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


173

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

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

回答:


300

テクニカルノート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/704803


16
誰かがこれをiOS 5.1で試しましたか?私はこれらの手順を正確に実行しましたが、それでもデバイスをリセットできません... Xcode経由でインストールする前に、Macの時計を進めてみました。
nrj 2012年

1
同上...プロンプトが表示されませんでした。
Rob

2
Appleは、AppStore提出ガイドラインに新しい要件を追加しました。これは、プロンプトを表示するためにアプリケーションに依存しています。これは、自動プロンプトがiOS 5.1で削除されたことを示唆している可能性があります。ただし、通知センターの設定をクエリするAPIがないため、プロンプトの目的が何であるかは不明です。:同様の問題に私の応答を参照してくださいstackoverflow.com/questions/10191006/...
グレッグ

10
ばかげてる。Appleは、開発者やユーザーでさえ、本当に悪い回避策を使わずにこれらのものをリセットできることを望んでいるのではないかと気づいていませんか?
sudo 2014年

2
シミュレータでこれを試すと、エラーCode = 3010「リモート通知はシミュレータでサポートされていません」が表示されます
Thomas Zimmer

48

これに対するテストソリューションのもう1つの方法は、バンドルIDを変更することです。完了したら、変更することを忘れないでください!


12
テストするために、新しいアプリIDの証明書も作成する必要はありませんか?
Tony

1
これは、ワイルドカードベースのプロビジョニングプロファイルを使用している場合にのみ機能します。それ以外の場合は、新しいバンドルのプロファイルを作成する必要があります。
Zorayr、2015年

新しいプロファイルを作成する必要がある場合でも、「Fix it」ボタンをクリックして数秒待つだけで、すべての再起動サイクルを実行するよりもはるかに高速です。
2015年

これが最速の解決策です!それは私にはかなりうまくいきます!bundle_idを変更すると、同じ「プロビジョニングプロファイル」でアプリに署名できなくなります。しかし、心配しないでください。xCode(私のバージョン7.1.1)では、「修正する」をクリックするだけで問題を解決できます。同様に、「機能」オンレットを忘れないでください。「機能を修正」するためのいくつかの項目を(「修正する」ボタンをクリックすることで)設定できるため、非常にうまく機能します。
ダムFaを

この答えは合法的な選択肢ですが、それでもアップルからの愚かな状況に対するハック修正です。bundleIDを変更したり、デバイスのクロックを切り替えたりしていません。同様に、どの開発者も、「プッシュ通知を許可しますか?」と尋ねるUIAlertViewを示す短いコードを書くことができます。..はい= registerメソッドを呼び出します。いいえ= didFailToRegisterForRemoteNotificationsWithError(など)を呼び出します。これは私自身の解決策です。このQ&Aを読んだ後の持ち帰りです。技術的には、プライバシー情報をユーザーに認識させるための最良の方法です...プッシュを有効にするか、オプションにする必要があるのはなぜですか。
トムペース

36

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

更新:これはiOS 9.xで動作することが確認されています


1
iOS 9.xでも同じ動作が発生します。私は追加することで、オリジナルの答えを編集することをお勧めいたしますでしょうUPDATEを:
Yevhenドビニン

3
最後に!アプリを削除したり、デバイスをオフにしたり、時計を早送りに設定したりする必要はありません。
mkeremkeskin

19

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

これは私にとってiOS6で機能します。

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

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


私のためにもios7で働いた、日付を1回2回変更する必要があるが機能しない
Nath

1
ありがとうございました!これはiOS 8でも機能します(設定の設定ペインに「アプリアイコンバッジ」設定がなかったため、Twitter.appのプッシュ権限をリセットする必要がありました)。
gklka 2014年

9

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

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


11
App Store向けに開発した場合は役に立たない答え
samvermette 2010

20
ジェイルブレーカーでこれが可能である場合、開発者はジェイルブレイクされていない電話で行うことができるはずですよね?そして、それはあなたがストアに提出するためにあなたがアプリに入れるものではないので、それは役に立たない答えではありません。開発者がWHILE TESTINGを行うためのものです。
オスカー

1
このファイルはiOS 5.xの一部ではありません。
gmogames 2012年

この質問の一部として更新の答えを参照してください。stackoverflow.com/questions/13021066/...
AriX

7

プログラムでそれを行うことは、いつも私のために働くようです。次の行のコメントを外したビルドがあります。

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

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

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


私のために働いたiOS 10 / iPhone 6S。登録を解除し、再インストールする前にアプリを削除したことに注意してください。
Gabriel Jensen

5

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

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

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

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


1
「最新のOS」と答えないでください。常に変化します。この動作は6.1.2ではまだ壊れているように見えますが、おそらく6.0.1で動作しましたか?
patr1ck 2013

答えを編集しましたが、6.0.1でも以前の6.1.2にあります。少なくとも+1か月の日付を設定した場合にのみ機能します。
Vincent Cohen

1
24時間も聞いていたので試してみたところ、2日先に行っても上手くいきませんでした。3か月後くらいに設定すると許可ポップアップが再登場!ありがとう!
marcshilling 2015

古い投稿ですが、それを見てうれしいです!幸運:)
Vincent Cohen

5

私はmicmdkに同意します。私はプッシュ通知を使用して開発環境をセットアップし、電話を初期インストールのようにリセットする方法が必要でした…そして、これらの正確なステップのみが機能しました…デバイスの2回の再起動が必要です:

APPLE TECH DOCから:

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

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

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

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

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

  4. デバイスをもう一度完全にオフにして、再びオンにします。


これはもう別の回答では機能しないとして言及されています。
Beau Nouvelle

正常に動作します。iOS 5.1で機能しなくなったのは、他の回答の古いバージョンだったため、アプリを削除してから時計を合わせるまでの間に再起動が行われませんでした。
dgatwood 2015年

3

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

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


私はもっ​​と良い答えを望んでいましたが、私はそれがないだけだと思います。とにかくありがとう!
飯能

3

承認された回答で言及されているのと同じテクニカルノート(TN2265-プッシュ通知のトラブルシューティング)は、iOS 5以降のソリューションで更新されています。

つまり、バックアップを作成し、毎回そこから復元します。

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

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

それは一度にそれを勧めたかもしれませんが、それはもはやしません。現在の推奨事項は、アプリを削除して再起動し、時計を進め、再起動し、オプションで時計を正しい日付と時刻に戻し、アプリを実行することです。
dgatwood 2015年

2

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

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


1
それだけの価値があるので、「すべての設定を消去」を試してみましたが、うまくいきませんでした。all-content-and-all-settings ...
Groxx

8
そして、「すべてのコンテンツと設定」は確かに機能します。しかし、聖なる核オプション、バットマン!それは絶対に異常です。
Groxxは

94
新しいデバイスを購入すると、プッシュ通知の警告もクリアされると聞きました。
samvermette 2012

新しいデバイスを購入しようとしましたが、それもうまくいきませんでした。天才バーに新しいデバイスを持ち込んだ後、彼らはいくつかの魔法を働かせ、より多くのお金のために修正しました...何年も経ってから、Appleはまだプッシュ権限をリセットする実用的で簡単な方法を提供していません。バカバカしい
Chris

1

ianolitoの答えに加えて。

1年前にダウンロードしたアプリにも同じ問題があり、最初はプッシュ通知を拒否していました。プッシュ通知を戻したいので、iOS 7ベータ版ではこれらの手順がうまくいきました。どのポイントが正確にトリガーしたかは不明です。

  • アプリを閉じて削除します。
  • iCloud設定に移動し、iCloudからアプリを削除します。アプリのiCloudバックアップが有効になっている他のすべてのデバイスでこれを行います。非アクティブ化して削除した後、新しいバックアップを作成します。アプリはバックアップの下に表示されなくなります。(これは、iCloudがiOS 5で導入され、多くのアプリでiCloudバックアップが有効になっているため、ianolitoによって記述されたAppleのテクニカルノートがiOS 5で機能しなくなった理由かもしれません。)
  • 時間設定に移動し、1か月以上先の時間を設定します。
  • iPhoneの電源を切ります(リセットなし)。
  • 少し待って、もう一度スイッチを入れて、アプリを再度ダウンロードしてください。
  • アプリを起動すると、ダイアログが再度表示されました。
  • アプリのバックアップがまだ無効になっているため、再度有効にします。時刻を修正してください。

「すべてのコンテンツと設定を消去」する必要はありませんでした。多分それは誰かを助けるでしょう。


1

最近、ネイティブ対応のアプリケーションで同様の問題に遭遇しました。iPhone OSのバージョンは13.1でした。アプリをアンインストールしてアプリをインストールしようとしたところ、場所と通知の両方の権限が要求されないことに気付きました。

設定を確認したところ、アプリケーションが(以前のインストールからの)場所に対して有効になっていることがわかりましたが、時間を設定せずにアンインストールと再起動を試みたという通知に対応するエントリがなく、機能しませんでした。ところで、私もAppstoreアプリをダウンロードしようとしましたが、同じ動作です。

この問題は、デバイスの時刻を設定した後にのみ解決されました。


0

何時間も検索したが、上記の提案でうまくいかなかったため、これは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
        }

    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.