プッシュ通知を使用するアプリを開発しています。ユーザーインタラクションのすべての可能な方法を確認するために、ユーザーが最初の起動時にアプリでプッシュ通知を有効にすることを拒否した場合にアプリをテストしたいと思います。
ただし、ダイアログ(registerForRemoteNotificationTypes
で開始)は、アプリごとに1回だけ表示されます。アプリのiPhone OSのメモリをリセットするにはどうすればよいですか。アプリを削除して再インストールしても解決しません。
テクニカルノートTN2265:プッシュ通知のトラブルシューティング
プッシュ対応アプリがプッシュ通知に初めて登録するとき、iOSはユーザーにそのアプリの通知を受信するかどうかを尋ねます。ユーザーがこのアラートに応答すると、デバイスが復元されるか、アプリが少なくとも1日アンインストールされない限り、アラートは再度表示されません。
アプリの初回実行をシミュレートする場合は、アプリを1日アンインストールしたままにしておくことができます。 システムクロックを1日以上進め、デバイスを完全にオフにしてから、デバイスをオンに戻すことで、実際に1日待たずに後者を実現できます。
更新:以下のコメントに記載されているように、このソリューションはiOS 5.1以降動作しなくなりました。ドキュメントを更新できるように、Appleでバグを報告することをお勧めします。現在の解決策は、デバイスのコンテンツと設定をリセットしているようです。
更新:テクニカルノートは、iOS 7の時点で正しく動作する新しい手順で更新されました。
- デバイスからアプリを削除します。
- デバイスを完全にオフにして、再びオンにします。
- [設定]> [全般]> [日付と時刻]に移動し、1日以上先の日付を設定します。
- デバイスの電源を完全にオフにし、再びオンにします。
iOS 9以降の更新
アプリを削除して再インストールすると、通知ステータスがnotDetermined
にリセットされます(プロンプトが表示されることを意味します)。
以下のGomfuciusの回答に感謝します。 https://stackoverflow.com/a/33247900/7048
別のテスト用これに対する解決策は、単にバンドルIDを変更することです。完了したら、元に戻すことを忘れないでください!
IOS 9.0.2では、アプリを削除して再インストールするたびに「登録プッシュ通知アラート」が表示されます。これは、AppStore実稼働ダウンロードとアドホックモードの両方に当てはまります。
PDATE:これはiOS 9.xで機能していることが確認されています
すでに述べたように、デバイス上のアプリの通知状態をリセットする方法は、iOS5以降で変更されています。
これは、iOS6で動作します。
ただし、これにより最初のプロンプトが再び表示されるだけです。他のプッシュ状態に関連するものは削除されません。
Plist:/private/var/mobile/Library/RemoteNotification/Clients.plist
...プッシュ通知の登録済みクライアントが含まれます。アプリのエントリを削除すると、プロンプトが再表示されます
プログラムでそれを行うことは、私にとって毎回うまくいくようです。次の行のコメントを外した状態でビルドします。
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
PNから登録解除するたびに実行します。最新リストから明示的にアプリを終了し、設定アプリの通知センターを操作して正しく動作させる必要がある場合があります。
また、ユーザーにPNの登録を求めるUIプロンプトが表示されない場合があります。最新のiOSバージョンのいずれかで無効にされているかどうかはわかりません。
Micmdkに同意します。プッシュ通知を使用して開発環境をセットアップし、初期インストールのように携帯電話をリセットする方法が必要でした。
Apple TECH DOCから:
IOSでのプッシュ通知許可アラートのリセットプッシュ対応アプリがプッシュ通知に初めて登録するとき、iOSはユーザーにそのアプリの通知を受信するかどうかを尋ねます。ユーザーがこのアラートに応答すると、デバイスが復元されるか、アプリが少なくとも1日アンインストールされない限り、アラートは再度表示されません。
アプリの初回実行をシミュレートする場合は、アプリを1日アンインストールしたままにしておくことができます。次の手順に従うことで、実際に1日待つことなく後者を実現できます。
デバイスからアプリを削除します。
デバイスを完全にオフにして、再びオンにします。
[設定]> [全般]> [日付と時刻]に移動し、1日以上先の日付を設定します。
デバイスの電源を完全にオフにし、再びオンにします。
Ianolitoが言ったように、日付の設定はうまくいくはずです:
システムクロックを1日以上進め、デバイスの電源を完全にオフにしてから再びオンにすることで、実際に1日待つことなく後者を実現できます。
私のデバイス(iPhone 4、iOS 6.1.2)でシステムクロックを設定していることに気付きました1日前または数日でも機能しませんでした私にとっては。そのため、日付を前に設定しましたa monthそして、それは機能し、アプリケーションは通知プロンプトを再び表示しました。
これが誰にとっても役立つことを願っています、それは一種の頭痛の種になります!
私は過去にこれについて疑問に思っていましたが、実際には私のコードにとって有効なテストケースではないという結論に達しました。あなたのアプリケーションコードが実際に誰かが最初に通知を拒否したり、後でiPhone通知設定からそれを無効にしたりすることの違いを区別できるとは思いません。ユーザーエクスペリエンスは異なりますが、registerForRemoteNotificationTypesの呼び出し内に隠されています。
UnregisterForRemoteNotificationsを呼び出しても、通知設定からアプリケーションが完全に削除されるわけではありませんが、そのアプリケーションの設定の内容は削除されます。そのため、次回アプリを実行するときに、ダイアログが2回目にユーザーに表示されることはありません(少なくとも現在テスト中のv3.1.3ではありません)。しかし、私が上で言ったように、おそらくあなたはそれについて心配するべきではありません。
受け入れられた回答( TN2265-プッシュ通知のトラブルシューティング) で参照されたものと同じ技術情報が、iOS 5以降のソリューションで更新されました。
要するに、バックアップを作成し、毎回それから復元します。
IOS 5以降では、バックアップからデバイスを復元することにより、プッシュ通知のアクセス許可アラートをリセットします(r。11450187)。これを効率的に行う手順は次のとおりです。
- Xcode Organizerを使用して、デバイスにアプリをインストールします。重要なのは、アプリを実行せずに初めてインストールすることです。
- ITunesを使用してデバイスをバックアップします。
- アプリを実行します。プッシュ通知の許可アラートが表示されます。
- プッシュ通知のアクセス許可のアラートをリセットする場合は、最初の手順で作成したバックアップからデバイスを復元します。
Apple Tech Noteには、デバイスを復元してプッシュ通知ダイアログをリセットできることも記載されています。
デバイス自体(iOS 5.x)で「一般->リセット->すべてのコンテンツと設定を消去」オプションを使用できるとは書かれていません。
Ianolitoの答えに加えて。
1年前にダウンロードしたアプリで同じ問題が発生し、最初はプッシュ通知を拒否しました。プッシュ通知を取り戻したいので、これらの手順はiOS 7ベータ版で機能しました。どのポイントがそれを正確にトリガーしたかわからない。
「すべてのコンテンツと設定を消去する」必要がなかったことに感謝します。たぶんそれは誰かを助けるでしょう。
数時間の検索の後、上記の提案に運がなかった後、これは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
}
}