iOSアプリでプッシュ通知を完璧にテストする方法

もしかしたらよく知られていることなのかもしれないけど、割とハマったのでメモ。

iOSアプリでプッシュ通知機能のテストは結構面倒である。特に面倒なのが、アプリ初回起動時の挙動のテスト(以下の画像参照)。

iOSのプッシュ機能は以下のような流れで設定される。

  1. アプリ起動時にregisterForRemoteNotificationTypesメソッドを呼ぶ
  2. 端末はアップルのサーバー(APNs)と通信して、プッシュのためのデバイストークンを取得
  3. アプリの初回起動時にのみiOSが「<アプリ名>はあなたにプッシュ通知を送信します。よろしいですか?」というアラートを表示する
  4. 「はい」ボタンを押すと、APNsに端末が登録されプッシュを受信できるようになる

で面倒なのが、初回起動時のみに表示されるアラートのテスト。このアラートは本当に初回起動時にしか表示されず、アプリを一度削除して、再度インストールしても、このアラートは二度と表示されない。

が、以下の手順を踏めば、再度アラートを表示させることができる。

  1. アプリを削除する
  2. Macのシステム時計を2週間ほど早める(!)
  3. iPhoneを再起動する
  4. iPhoneをMacに接続すると、iPhoneのシステム時計が2週間進む
  5. アプリを再インストールする
  6. アラートが表示される

iPhoneの設定で直接時刻すると、Macに接続した瞬間に時間が補正されてしまって元に戻ってしまうので、仕方なくMac側のシステム時計を変更している。

ちなみにiPhoneのシステム時計をあんまり進めすぎるとプロビジョニングプロファイルの有効期限を超えちゃって実機転送できなくなるのでお気をつけて。

詳しくは以下を参照してくださいー。
http://developer.apple.com/library/ios/#technotes/tn2265/_index.html

Resetting the Push Notifications Permissions Alert on iOS
The first time a push-enabled app registers for push notifications, iOS asks the user if they wish to receive notifications for that app. Once the user has responded to this alert it is not presented again unless the device is restored or the app has been uninstalled for at least a day.

If you want to simulate a first-time run of your app, you can leave the app uninstalled for a day. You can achieve the latter without actually waiting a day by setting the system clock forward a day or more, turning the device off completely, then turning the device back on.