私のアプリでは、デバイスを登録すると、デバイスが既に登録されているかどうかを確認するために永続データとして保存されます。
サーバー側では、ユーザーの一意の ID である user_id と共にそれらをデータベースに保存します。
[user_id] [gcm_registration_id]
今、私はこのケースに取り組むことができません:
ユーザーがログアウトした場合:
次にアプリを起動したときに別のユーザーがログインする可能性があるため、SharedPreferences に格納されている registration_id をクリアする必要があります。
さらに、そのデバイス (現在ログインしているユーザーがいない) はこれ以上通知を受信してはならないため、データベースからその registration_id に対応する行を削除する必要があります。
問題は、データベースが canonical_ids を使用して更新されるか、呼び出し時に取得した最新の registration_ids を言うことです
https://android.googleapis.com/gcm/send
そのため、削除するログアウトしたユーザーの古い registration_id が見つからない可能性があります。これにより、ログインしていないユーザーに通知を送信できます。
また、user_id に一致する DB の行を削除できません。これは、ユーザーが 1 つのデバイスからのみログアウトした可能性があり、まだログインしているデバイスが他にほとんどないためです。
この特定のユーザーとデバイスの登録 ID が変更されたことをどのように確認できますか?
すべての古い登録 ID とそれに対応する canonical_id をデータベースに保存する必要がありますか?