7

私のアプリの機能の 1 つは、ユーザーがアプリからログアウトしたときにリモート プッシュ通知からユーザーを登録解除することです。デバイスが機内 (オフライン) モードのときにユーザーがログアウトしたときに、アプリをプッシュ通知から登録解除する方法はありますか?

このコードを試してみましたが、オンラインに戻ったときにまだ通知を受け取ります [[UIApplication sharedApplication] unregisterForRemoteNotifications];

デバイスが機内モードのときに通知センターからアプリを削除する方法を教えてください。

4

2 に答える 2

2

Apple がリモート プッシュ通知を制御します。オフラインの場合、論理的に無効にすることはできません。Apple が最初にオンラインであることを確認し、プッシュが無効になっていない場合は、プッシュが送信されます。Apple がユーザーに送信するプッシュを iDevice が表示しないようにする方法はありません。これはアプリの管理下にないためです。

したがって、可能性は 1 つだけです。デバイスが再びオンラインになった後、すぐにプッシュを無効にする必要があります。それでも、Apple がどのメッセージを最初に取得するか、あなたがオンラインであるか、プッシュを無効にするかは運の問題です。また、デバイスがオフラインのときに Apple がデバイスに送信したかった通知がどうなるかという問題もあります。とにかくオンラインのときにそれらを再送信しますか、それとも最初に無効にするときにそれらを破棄しますか? 知らない。調査を行う必要があります。

したがって、唯一の可能性は、ユーザーがオンラインになっている間、アプリがバックグラウンドにある場合です。システム通知に応答できるようにするには、アプリが中断されないようにする必要があります (これを実現する方法は次のとおりです)。あなたが必要としている通知は、オンライン状態の変更の通知です。私はそれが存在することしか知りません。このリソースが役立つ場合があります。したがって、デバイスがオンラインになると、バックグラウンドで待機するアプリに通知されます (中断されません)。次に、リモートプッシュからすぐに登録を解除することで対応できます。

それは、その方向で達成できる最高のものです。お役に立てれば。

于 2012-10-10T10:57:41.103 に答える
0

呼び出すときに、フラグまたは同様のものを追加します(ShouldRecallUnregisterなど、好きなように呼び出します)

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

インターネット接続がない場合は YES に設定し、登録解除が機能する場合は NO のままにします。

それをUserDefaults ( [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];) に保存し、その値applicationDidBecomeActive:をたとえば (またはアプリに最適な場所) で確認します。

[[UIApplication sharedApplication] unregisterForRemoteNotifications];YES の場合は、もう一度電話してください。

于 2012-10-09T15:59:43.370 に答える