2

私のアプリでは、初めてプッシュ通知を登録するときに、デバイス トークンを呼び出しdidRegisterForRemoteNotificationsWithDeviceTokenて永続的に保存し、デバイス トークンのサーバー リストを更新します。その後、誰かがiPhone設定からプッシュ通知設定をオフにした場合、サーバーからデバイストークンも削除できるように、アプリからそれを判断するにはどうすればよいですか。APNS がフィードバック リストを提供していることは知っていますが、それ以外にアプリでプログラムによってそれを判断する方法はありますか? 助けてくれてありがとう!

4

1 に答える 1

7

この方法でトークンを管理したくないと思います。

アプリは常に Apple に APNs トークンを要求する必要があります。その後、常にそのトークンを独自のサーバーに送信し、トークンをユーザーに関連付ける必要があります (ユーザーがいる場合)。これを行うのは、トークン変更される可能性があるためです。そのため、常に最新のトークンを使用できるようにする必要があります。

フィードバック サービスは、どのトークンが無効になったかを通知します (実際には、選択した間隔でポーリングします)。この時点で、サーバー側データベースからトークンを削除します。明確にするために、Apple のフィードバック サービスをポーリングし、サーバー側のデータベースを更新するサーバー側のプロセスが必要です。

トークンを使用して通知を送信するまで、無効なトークンに関するフィードバックを受け取ることはありません。通知は送信時に Apple に受け入れられると思いますが、無効なトークンに対するものであることが Apple によって検出されると、メッセージは削除され、トークンがフィードバックに追加されます。

ここで、アプリのユーザーが最初にプッシュ通知を要求したときにプッシュ通知を受け入れたが、後でアプリの設定アプリを介して通知をオフにした場合、それに関するフィードバックは得られません。私が知る限り、そのデバイスに送信された通知はすべてデバイスに送信されますが、OS はそれをドロップし、アプリと通知の設定アプリでのユーザーの最終的な選択を尊重します。

最後に、アプリで呼び出して、デバイス上のアプリで有効になっている通知の種類のビットマスクを取得できる API があります。この目的のために私が書いたメソッドを次に示します。必要に応じて調整します。

+(BOOL)acceptsPushNotifications
{
    UIRemoteNotificationType mask = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

    return (mask & UIRemoteNotificationTypeAlert) == UIRemoteNotificationTypeAlert;
}

ただし、これを使用して、アプリがサーバーにデータベースからトークンを削除するように指示する必要があるかどうかを判断することはお勧めしません。それは、APNs システム全体が機能するように意図された方法ではありません...私は信じています。

于 2012-01-30T17:43:50.333 に答える