私のアプリはgcmを使用しています。ユーザーがログインするたびに、新しいgcmトークンが登録され、サードパーティのサーバーに送信されます。ユーザーがログアウトするたびに、gcmトークンは登録解除されます。これは何の問題もなく起きます。すべてのgcmトークンを無効にする
テストになると、テスターはログアウトせずにアプリケーションをアンインストールしてから、もう一度インストールして別のアカウントにログインすることができます。それから彼は2つの異なるアカウントから2つのgcmsを受け取るでしょう。これは、彼が現在ログオンしていないアカウントhesのプライベートGCを受け取ることを意味します。これは、ライブユーザが時折行うこともあります。
gcmトークンが期限切れになることがあるというGCMの文書には、アプリケーションがアンインストールされた場合は、時にはとなります。実際には、これは決して起こらない。
http://developer.android.com/google/gcm/gcm.html
GCMのドキュメントでは、あなたが
Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
startService(unregIntent);
を実行することにより、GCMトークンの登録を解除することができます。しかし、この方法は、あなたが再インストール後にそれをしようとした場合に動作するようには思えないと述べています。トークンは登録されていないが、gcmトークンはまだ正常に動作することを伝えるコールバックを受け取る。
私の質問は、アプリケーションに有効なgcmトークンがないことを確認できますか?アプリケーションの最初の起動時に既存のトークンをすべて登録解除するか、少なくとも電話機の設定からリセットしたいと思います。
こんにちはアレクセイ、あなたが行った解決策 –
私はモハメド・ハフェズの提案をしました。私はユーザーIDとgcmトークンを持つテーブルを持っています。どちらのフィールドも一意です。新しいgcmトークンで既存のuserIdを受け取ると、gcmトークンが更新されます。新しいユーザーIDで既存のgcmトークンを受け取ると、私はユーザーIDを更新します。それはすべてのコーナーケースをカバーするようです。 – Alexey
ユーザーが2台のデバイスにログインしている場合はどうなりますか。私はこのソリューションで2つのデバイスがgcmメッセージを受信しないことを恐れています。または何かが欠けている。 –