結論から言うと自分の設定ミスだったのだが、色々試行錯誤した時のメモ
結論
TargetのCapabiliiesでPush NotifictionsをOFFにしてしまっていたため。
Background Modesの Background fetch、Remote notificationsはONしてしていたが、こちらだけONにしても受け取れない(DeviceTokenは受け取れます)
環境
- Xcode8.0
- 実機iPodTouch(iOS9.3)で確認
状況
- Push通知で利用するDeviceTokenは取得できる
- しかし、APNsにPushメッセージを送信を行った時にStatusCode8(Invalid Token)が返却され、Push通知時にiOSで呼ばれるはずのdidReceiveRemoteNotificationが呼び出されない
やったこと
- 「状況」の所でAPNsから返却ステータスコードを書いているが最初はそれが分かってなかったため、APNsからの返却値が何であるかは最初に確認したほうが良いだろう
- InvalidToken 8 とかでググってみる。iOSで取得できるデバイストークンの設定をミスしたときなども同様のエラーとなるようだった。(実際に取得できたデバイストークンとAPNsへ送信する時のデバイストークンが違うなど)しかし、今回はこれが原因ではない
- 証明書?などの設定ミスなどの可能性もあることがあるようだったのでAppIDの作成や証明書の作成などすべてを最初からやり直したが解消せず
- 追加でググったりすると以下の記事を発見
- 自分の設定を再度見直すとCapabilitiesでPushNotificationsという設定があり、これがOFFになっていた
- ONに変更し、再度アプリを動かすことでPush通知が出来た
その他調べた時のメモ
- 今回と同じInvalidTokne8と同じ事象になるかは不明だが、Deploymnet用の設定で、ProductionのPushをしようとするとエラーとなることがあるらしい(APNsのエンドポイントが違う)
感想
自分が悪いと言えば悪いのですが、iOSなりAPNsのステータスコードでもうちょっと分かりやすいエラーコードを出してくれると嬉しいなぁ。。。(ずばりPush通知設定がされていないよというメッセージを出すなど)