web-dev-qa-db-ja.com

アプリのプッシュ通知設定をリセットする

プッシュ通知を使用するアプリを開発しています。ユーザーインタラクションのすべての可能な方法を確認するために、ユーザーが最初の起動時にアプリでプッシュ通知を有効にすることを拒否した場合にアプリをテストしたいと思います。

ただし、ダイアログ(registerForRemoteNotificationTypesで開始)は、アプリごとに1回だけ表示されます。アプリのiPhone OSのメモリをリセットするにはどうすればよいですか。アプリを削除して再インストールしても解決しません。

168
hanno

テクニカルノートTN2265:プッシュ通知のトラブルシューティング

プッシュ対応アプリがプッシュ通知に初めて登録するとき、iOSはユーザーにそのアプリの通知を受信するかどうかを尋ねます。ユーザーがこのアラートに応答すると、デバイスが復元されるか、アプリが少なくとも1日アンインストールされない限り、アラートは再度表示されません。

アプリの初回実行をシミュレートする場合は、アプリを1日アンインストールしたままにしておくことができます。 システムクロックを1日以上進め、デバイスを完全にオフにしてから、デバイスをオンに戻すことで、実際に1日待たずに後者を実現できます。

更新:以下のコメントに記載されているように、このソリューションはiOS 5.1以降動作しなくなりました。ドキュメントを更新できるように、Appleでバグを報告することをお勧めします。現在の解決策は、デバイスのコンテンツと設定をリセットしているようです。

更新:テクニカルノートは、iOS 7の時点で正しく動作する新しい手順で更新されました。

  1. デバイスからアプリを削除します。
  2. デバイスを完全にオフにして、再びオンにします。
  3. [設定]> [全般]> [日付と時刻]に移動し、1日以上先の日付を設定します。
  4. デバイスの電源を完全にオフにし、再びオンにします。

iOS 9以降の更新

アプリを削除して再インストールすると、通知ステータスがnotDeterminedにリセットされます(プロンプトが表示されることを意味します)。

以下のGomfuciusの回答に感謝します。 https://stackoverflow.com/a/33247900/7048

297
ianolito

別のテスト用これに対する解決策は、単にバンドルIDを変更することです。完了したら、元に戻すことを忘れないでください!

47
capikaw

IOS 9.0.2では、アプリを削除して再インストールするたびに「登録プッシュ通知アラート」が表示されます。これは、AppStore実稼働ダウンロードとアドホックモードの両方に当てはまります。

PDATE:これはiOS 9.xで機能していることが確認されています

35
Gomfucius

すでに述べたように、デバイス上のアプリの通知状態をリセットする方法は、iOS5以降で変更されています。

これは、iOS6で動作します。

  • デバイスからアプリを削除する
  • デバイスの日時を2日以上先に設定する
  • デバイスを再起動します
  • デバイスの日時を2日以上先に設定する
  • デバイスを再起動します
  • アプリを再度インストールして実行します

ただし、これにより最初のプロンプトが再び表示されるだけです。他のプッシュ状態に関連するものは削除されません。

19
micmdk

Plist:/private/var/mobile/Library/RemoteNotification/Clients.plist

...プッシュ通知の登録済みクライアントが含まれます。アプリのエントリを削除すると、プロンプトが再表示されます

9
Erik Johnson

プログラムでそれを行うことは、私にとって毎回うまくいくようです。次の行のコメントを外した状態でビルドします。

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

PNから登録解除するたびに実行します。最新リストから明示的にアプリを終了し、設定アプリの通知センターを操作して正しく動作させる必要がある場合があります。

また、ユーザーにPNの登録を求めるUIプロンプトが表示されない場合があります。最新のiOSバージョンのいずれかで無効にされているかどうかはわかりません。

7
dagnytaggart

Micmdkに同意します。プッシュ通知を使用して開発環境をセットアップし、初期インストールのように携帯電話をリセットする方法が必要でした。

Apple TECH DOCから:

IOSでのプッシュ通知許可アラートのリセットプッシュ対応アプリがプッシュ通知に初めて登録するとき、iOSはユーザーにそのアプリの通知を受信するかどうかを尋ねます。ユーザーがこのアラートに応答すると、デバイスが復元されるか、アプリが少なくとも1日アンインストールされない限り、アラートは再度表示されません。

アプリの初回実行をシミュレートする場合は、アプリを1日アンインストールしたままにしておくことができます。次の手順に従うことで、実際に1日待つことなく後者を実現できます。

  1. デバイスからアプリを削除します。

  2. デバイスを完全にオフにして、再びオンにします。

  3. [設定]> [全般]> [日付と時刻]に移動し、1日以上先の日付を設定します。

  4. デバイスの電源を完全にオフにし、再びオンにします。

5
lepert

Ianolitoが言ったように、日付の設定はうまくいくはずです:

システムクロックを1日以上進め、デバイスの電源を完全にオフにしてから再びオンにすることで、実際に1日待つことなく後者を実現できます。

私のデバイス(iPhone 4、iOS 6.1.2)でシステムクロックを設定していることに気付きました1日前または数日でも機能しませんでした私にとっては。そのため、日付を前に設定しましたa monthそして、それは機能し、アプリケーションは通知プロンプトを再び表示しました。

これが誰にとっても役立つことを願っています、それは一種の頭痛の種になります!

5
Vincent Cohen

私は過去にこれについて疑問に思っていましたが、実際には私のコードにとって有効なテストケースではないという結論に達しました。あなたのアプリケーションコードが実際に誰かが最初に通知を拒否したり、後でiPhone通知設定からそれを無効にしたりすることの違いを区別できるとは思いません。ユーザーエクスペリエンスは異なりますが、registerForRemoteNotificationTypesの呼び出し内に隠されています。

UnregisterForRemoteNotificationsを呼び出しても、通知設定からアプリケーションが完全に削除されるわけではありませんが、そのアプリケーションの設定の内容は削除されます。そのため、次回アプリを実行するときに、ダイアログが2回目にユーザーに表示されることはありません(少なくとも現在テスト中のv3.1.3ではありません)。しかし、私が上で言ったように、おそらくあなたはそれについて心配するべきではありません。

3
kharrison

受け入れられた回答( TN2265-プッシュ通知のトラブルシューティング) で参照されたものと同じ技術情報が、iOS 5以降のソリューションで更新されました。

要するに、バックアップを作成し、毎回それから復元します。

IOS 5以降では、バックアップからデバイスを復元することにより、プッシュ通知のアクセス許可アラートをリセットします(r。11450187)。これを効率的に行う手順は次のとおりです。

  1. Xcode Organizerを使用して、デバイスにアプリをインストールします。重要なのは、アプリを実行せずに初めてインストールすることです。
  2. ITunesを使用してデバイスをバックアップします。
  3. アプリを実行します。プッシュ通知の許可アラートが表示されます。
  4. プッシュ通知のアクセス許可のアラートをリセットする場合は、最初の手順で作成したバックアップからデバイスを復元します。
3

Apple Tech Noteには、デバイスを復元してプッシュ通知ダイアログをリセットできることも記載されています。

デバイス自体(iOS 5.x)で「一般->リセット->すべてのコンテンツと設定を消去」オプションを使用できるとは書かれていません。

2
Mr. Zystem

Ianolitoの答えに加えて。

1年前にダウンロードしたアプリで同じ問題が発生し、最初はプッシュ通知を拒否しました。プッシュ通知を取り戻したいので、これらの手順はiOS 7ベータ版で機能しました。どのポイントがそれを正確にトリガーしたかわからない。

  • アプリを閉じて削除します。
  • ICloud設定に移動し、iCloudからアプリを削除します。アプリのiCloudバックアップが有効になっている他のすべてのデバイスでこれを実行します。無効化して削除した後、新しいバックアップを作成します。バックアップの下にアプリが表示されないようにする必要があります。 (これは、ianolitoが説明するAppleのテクニカルノートがiOS 5で機能しなくなり、iCloudがiOS 5で導入され、アプリのiCloudバックアップが有効になっているためです。
  • 時間設定に移動して、1か月以上前に時間を設定します。
  • IPhoneのスイッチをオフにします(リセットなし)。
  • しばらく待ってから、再度電源を入れて、アプリを再度ダウンロードしてください。
  • アプリを起動すると、ダイアログが再び表示されました。
  • アプリのバックアップはまだ無効になっているため、再度有効にします。時間を修正します。

「すべてのコンテンツと設定を消去する」必要がなかったことに感謝します。たぶんそれは誰かを助けるでしょう。

1
Masa

数時間の検索の後、上記の提案に運がなかった後、これは3.x +の魅力のように機能しました

override func viewDidLoad() {
        super.viewDidLoad()


            requestAuthorization()

}

func requestAuthorization() {

        if #available(iOS 10.0, *) {

            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                print("Access granted: \(granted.description)")
            }

        } else {
            // Fallback on earlier versions
        }

    }
0
Felecia Genet