私のアプリは gcm を使用しています。ユーザーがログインするたびに、新しい gcm トークンが登録され、サードパーティ サーバーに送信されます。ユーザーがログアウトするたびに、gcm トークンが登録解除されます。これで問題なく動作します。
問題は、テストに関しては、テスターがログアウトせずにアプリをアンインストールし、再度インストールして別のアカウントにログインできることです。次に、2 つの異なるアカウントから 2 つの gcms を受け取ります。これは、彼が現在ログインしていないアカウントのプライベート gcms を受け取ることを意味します。これは、実際のユーザーでも発生することがあります。
GCM のドキュメントには、アプリケーションをアンインストールすると、gcm トークンが期限切れになることがあると記載されています。実際には、これは決して起こりません。
http://developer.android.com/google/gcm/gcm.html
GCM のドキュメントには、次のコマンドを実行して 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 トークンがないことを確認できますか? アプリケーションの最初の起動時に既存のトークンをすべて登録解除するか、少なくとも電話の設定からそれらをリセットしたいと思います。