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