iOS・Android

【FCM・APNs】iOSで InvalidRegistration error になってしまう/ deviceTokenが無効の場合

iOS・Android
この記事は約2分で読めます。

はじめに

Androidでは問題なくdeviceTokenやトピックを用いた通知の送信ができるのに、iOSでなぜかうまくいかないとき。

APNsで発行されるトークンと、FCMで使用するトークンは、実は異なる場合があるので注意が必要です。

SandBox と Production

根本的な原因を理解するためには、APNSがプッシュ通知にSandBoxとProductionの2つのサーバーを使用していることを理解する必要があります。開発段階でiOSデバイス上にアプリのデバッグバージョンを構築すると、SandBoxサーバーに接続し、そこからトークンを取得します。アプリのリリースビルドを作成すると、本番サーバーに接続されます。

デバッグビルドでアプリをテストしている場合、通知をテストするには、サンドボックスでテストする必要があります。トークンを受け取ったら、以下のGoogle APIを使用して、APNSトークンをFCMトークンに変換することができます。

リクエスト

HTTP POST : https://iid.googleapis.com/iid/v1:batchImport
HTTP HEADERS:
Content-Type: application/json
Authorization : key=YOUR_SERVER_KEY (FCMのコンソールから確認できます)

リクエストbody

{
  "application": "com.company.app", (YOUR_APP_PACKAGE)
  "sandbox":true,
  "apns_tokens":[
      "7c6811bfa1e89c739c5862122aa7ab68fc4972dea7372242f74276a5326f...."
   ]
 }

レスポンス

{
    "results": [
        {
            "registration_token": "ejXQlECjCeI:APA91bE7oaUhaFnGyl77lFrySdEaWxocM0oj81uNezACX1wsZXiTyL4OYo5ssvFjjWYpFymMVyqBccboVcwTTW2rvykOmV_CABDM7rTIRCiJFl_9ngf7SrDSYoFouwNj69JSwlH.....",
            "apns_token": "7c6811bfa1e89c739c5862122aa7ab68fc4972dea7372242f74276a5326f....",
            "status": "OK"
        }
    ]
}