ユーザーが必要に応じてアプリからログアウトし、別のユーザーとしてログインできるアプリを作成しています。新しいユーザーがログインしたら、Apple から新しいデバイス トークンを取得する方法はありますか? メソッドを強制的に呼び出すdidRegisterForRemoteNotificationsWithDeviceToken
方法はありますか?
4 に答える
いいえ、新しいデバイス トークンを要求することはできません。それらは時々期限切れになり、その時だけ新しいものを取得します (または、別のバンドル ID を持つ別のアプリがある場合、トークンは異なります)。
didRegister を処理する関数を作成し、didRegisterForRemoteNotificationsWithDeviceToken から呼び出します。次に、呼び出しを強制する必要があるときにその関数を使用します。
ユーザーがログインしているため、誰かがログインするたびにデバイス トークンを含む情報をサーバーに渡し、サーバー側でユーザーをトークンに関連付けます。
別のデバイス トークンを取得する方法はありません。ユーザーがログアウトするときに、バックエンドからトークンを削除する必要があります。
iOS7以降でどのように動作するかはわかりませんが、iOS7より前は、同じデバイス上のすべてのアプリケーションが同じデバイストークンを取得するため、あなたが求めることは不可能です. iOS7 の時点で、各アプリケーションは独自のデバイス トークンを取得しますが、そのトークンが連続した登録で変更される可能性があるかどうかはわかりません。
を呼び出すことでいつでも を強制的に呼び出すことができdidRegisterForRemoteNotificationsWithDeviceToken
ますregisterForRemoteNotificationTypes
が、通常は同じデバイス トークンを取得します。
通知を特定のユーザーに関連付けることが目標である場合、iOS 10 の時点で、NotificationService拡張機能を実装して、現在認証されているユーザーに関連付けられている通知のみをフィルター処理することができます。同じデバイス上の複数のユーザーはサーバーで同じデバイス トークンに関連付けられますが、クライアントは現在のユーザーの通知のみを表示します (一度に 1 人のユーザーしかログインできないと仮定)。
このアプローチでは、認証を必要としない通知を保持することもできます。変更せずに渡すだけです。
上記のように、UIApplication.shared.registerForRemoteNotification (Swift 3+) を明示的に呼び出すことで、ユーザー ログイン後にリクエスト/レスポンス トークンの更新を強制できます。次に、そのユーザーとデバイスのトークンの組み合わせをアプリケーション サーバーに送信して使用します。