4

この質問は、私が質問した時点で iOS の最新の製品バージョンであった iOS 6 に適用されることに注意してください。それ以降のバージョンの iOS ではテストを行っていないため、状況が変わっている可能性があります。それ以降のバージョンの OS で同じ動作が見られる場合は、コメントしてください。

私のアプリはプッシュ通知に登録します。アクセス許可ダイアログ (「MyApp がプッシュ通知を送信します」) が表示されます。次の 2 つのフローが考えられます。

a) ユーザーが [OK] を選択します。Settings->Notifications->MyApp では、予想どおり、アラートに対する完全な権限が表示されます。

また

b)これはバグです ユーザーが [キャンセル] を選択します。Settings->Notifications->MyApp で、アプリが通知センターにないものとして表示され、すべての権限がオフになっていることを期待します。ただし、その逆です。ダイアログを OK する場合と違いはありません。

私のアプリケーションとは別に、BBC News と Ap Mobile には同じバグが見られますが、Viber には見られないことがわかりました (期待どおりに動作します)。Ap Mobile にはこのバグの変形があります。プッシュ通知を拒否すると、サウンドとアラートではなく、バッジのみがオンになります。

TN2265 に従って、アプリを実行する前に作成されたバックアップに復元することにより、プッシュ設定の状態をリセットしています。

4

1 に答える 1

2

無限の復元とテストの後、次のことがわかりました。

ユーザーが「xxx がプッシュ通知を送信したい」で [キャンセル] を選択すると、[設定] -> [通知] -> [アプリ名] でアラートがオフになります。

a) registerForRemoteNotificationTypes: の前に cancelAllLocalNotifications への呼び出しが行われた場合、すべてのアラートがオンになります。これはAppleのバグのように感じます。

または b) registerForRemoteNotificationTypes: が行われる前に setApplicationIconBadgeNumber:0 (他の番号は試しませんでした) への呼び出しが行われました。この場合、バッジのみがオンになります。おそらく、実際にバッジ番号を設定する場合はバッジを有効にするのが合理的であるため、これが (文書化されていない) 機能ではなくバグであることは完全には明らかではありません。

このバグ/機能の回避策は、タッチする前にプッシュが有効になっていることを確認することです。

    // If remote notifications are already enabled, then clear any existing.
    if([[UIApplication sharedApplication] enabledRemoteNotificationTypes] != UIRemoteNotificationTypeNone)
    {
        [[UIApplication sharedApplication] cancelAllLocalNotifications];
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    }
于 2013-09-08T20:02:05.850 に答える