サービスのユーザーがアプリからログアウトしたときに、デバイスのプッシュ トークンを確実に無効化 (サーバー上のユーザー プロファイルから削除) するにはどうすればよいですか?
ユーザー プロファイルに apns トークンを含む文字列の配列を保持し、ユーザーが特定のデバイスでプッシュ通知を有効にするたびに 1 つ追加します。
後で、プッシュ トークンはデバイスに固有のものであることに気付きましたが、内部ユーザー アカウントについては明らかに何も知らないため、あるユーザーがログアウトし、別のユーザーが (同じデバイスで) ログインすると、それぞれが同じトークンを持っています。次に、デバイスの現在のユーザーは、それらのいずれかに向けられたプッシュ通知を受け取ります。
基本的な解決策は、ログアウト時にユーザー プロファイルからデバイスのトークンを削除することですが、次のように考えると、多くの落とし穴があります。
- ログアウトはネットワーク アクセスを必要とすべきではありません– サーバーへの通知を試みることはできますが、ユーザーがネットワーク アクセスを持っていない場合でも、ログアウトを非同期的に成功させる必要があります (?)
- 実際のデバイス トークンは不明である可能性があります。ユーザーが一時的にプッシュ許可を遮断した場合、現在のトークンは提供されません。また、identifierForVendor はインストールごとに変更され、UDID メソッドは推奨されないため、デバイス<->キー情報の保存はせいぜい希薄に見えます。
- サーバー側の一意化を行います (アカウントにトークンを追加するときは、同じトークンが他のアカウントに設定されていないことを確認してください)。これは、2 番目のユーザーのログインに依存しますが、これは保証されません。
見落としているエッジ ケースは他にもありますか? また、それらを回避するためにどのような戦略を使用できますか?