176

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

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

4

14 に答える 14

305

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

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

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

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

更新:テクニカルノートが更新され、iOS7以降で正しく機能する新しい手順が追加されました。

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

iOS9以降の更新

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

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

于 2010-11-02T18:07:17.600 に答える
48

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

于 2013-04-11T20:43:20.870 に答える
38

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

更新:これがiOS9.xで機能していることが確認されました

于 2015-10-20T22:27:32.100 に答える
19

すでに述べたように、デバイス上のアプリの通知状態をリセットするためのアプローチは、新しいiOS5では変更されています。

これはiOS6で私のために働きます:

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

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

于 2013-08-29T12:53:24.503 に答える
9

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

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

于 2010-04-12T22:00:19.990 に答える
8

プログラムでそれを行うことは、私にとって毎回うまくいくようです。次の行がコメントされていないビルドがあります。

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

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

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

于 2013-03-27T16:54:23.280 に答える
5

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

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

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

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

于 2013-02-02T11:20:10.833 に答える
5

micmdkに同意します。プッシュ通知を使用して開発環境をセットアップし、電話をリセットして初期インストールのように見せるための方法が必要でした…そしてこれらの正確な手順だけでうまくいきました…デバイスを2回再起動する必要があります。

APPLE TECH DOCから:

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

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

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

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

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

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

于 2014-01-08T00:56:49.390 に答える
3

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

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

于 2010-03-13T14:47:22.360 に答える
3

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

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

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

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

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

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

于 2012-05-22T13:27:49.817 に答える
2

私は最近、react-nativeアプリケーションで同様の問題に遭遇しました。iPhone OSのバージョンは13.1でした。アプリケーションをアンインストールしてアプリをインストールしようとしましたが、場所と通知の両方のアクセス許可が求められていないことに気付きました。

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

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

于 2019-09-27T14:07:24.377 に答える
1

ianolitoの答えに加えて。

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

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

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

于 2013-08-21T11:40:33.083 に答える
-1

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

    }
于 2017-05-23T18:46:18.153 に答える