16

プッシュ通知設定でユーザーが選択したオプションを常に知る必要があります。
(オプションは - アラート、サウンド、バッジ)

したがって、アプリの起動時に次のように呼び出します。

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

ユーザーが選択したものを検出します。

しかし、ユーザーがアプリの有効期間中に後で設定を変更したかどうかをどのように検出できますか?
この設定で変更が発生したときに呼び出されるデリゲート メソッドはありますか?

4

4 に答える 4

22

代理人はいません。UIApplicationなどで、プロパティをenabledRemoteNotificationTypes定期的に照会する必要がありますapplicationDidBecomeActive:

詳細については、次の回答を確認してください。

ユーザーがプッシュ通知を有効にしているかどうかを iPhone で確認する

ロック画面での表示と有効なRemoteNotificationTypes - iOS5

編集:
プッシュ通知設定と許可アラートをリセットする必要がある場合は、Apple テクニカル ノート TN2265を参照してください。「iOS でプッシュ通知のアクセス許可アラートをリセットする」セクションで、iOS で設定をリセットする方法を説明しています。ただし、多くの開発者は、この手順がうまくいかないと不満を漏らしています。このリンクが機能するかどうかは不明です。Apple フォーラムにアクセスする必要がありますが、これはまさにこの問題に関するスレッドの 1 つです。

Apple が iOS 5.1 で許可ダイアログを削除したのではないかと考えていました。そうでなければ、なぜ彼らはアプリケーションにアラートを表示する必要があるのでしょうか? 2016 年 6 月までの AppStore レビュー ガイドラインによると:

5.3最初にユーザーの同意を得ずにプッシュ通知を送信するアプリは拒否されます

たとえば、パス (アプリケーション) は、アプリケーションの初回起動時ではなく、サインアップ プロセスの途中でプッシュ通知をオプトインするようにユーザーに求めます。

アプリケーションは通知設定の状態を照会できないため、とにかくプロンプトの目的が何であるかわからない。特に、アプリケーションはどの通知タイプ ( を使用enabledRemoteNotificationTypes) が有効になっているかを確認できますが、特定のアプリケーションのプッシュ通知が有効か無効か (上部の通知センターのオン/オフ スイッチ) は確認できません。少なくとも、iOS 5.1 ではそうです。ユーザーがそのアプリケーションの通知を無効にしても、アプリケーションは引き続きプッシュ通知に登録でき (を使用registerForRemoteNotificationTypes)、APNS トークンを受け取ります。

于 2012-04-17T12:24:55.310 に答える
7

起動時だけでなく、アプリがアクティブになったときに確認してください。

于 2012-04-17T12:16:01.310 に答える
0

これは、Push が UrbanAirship を介して実装されている場合の例です。デリゲートに続くプッシュのユーザーのオプトイン/オプトアウトが発生するたびに、以下のメソッドを使用して (YES/NO) を確認できます。

UrbanAirship を使用しない場合は、UIApplication デリゲートでも同じことが実現できます。

- (void)registrationSucceededForChannelID:(NSString )channelID deviceToken:(NSString )deviceToken
    {
        NSLog(@"registrationSucceededForChannelID : %@",[self appRegisterForPushNotification]?@"YES":@"NO");
    }


    - (BOOL)appRegisterForPushNotification {
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
            UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
            return ((types & UIUserNotificationTypeAlert) || (types & UIUserNotificationTypeSound));
        }
        return NO;
    }
于 2017-01-03T12:50:19.483 に答える