はじめに
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"
}
]
}