Push通知が届かない場合のトラブルシューティング
オフラインからオンラインになった際のプッシュ通知の受信
1. デバイスのチェック
1-1. 正しいデバイストークンが登録されていない
1-2. デバイスがオフラインになっている(ネットに繋げない状態である)
1-3.通知拒否設定になっている
デバイスで通知拒否設定になっている場合、プッシュ通知が届きません。
1-4. セグメントに当てはまっていない
セグメント指定した配信の場合、条件に一致していないデバイスには配信されません。
条件指定に誤りがないか、タグの紐付けやイベントの発生が行われているか確認してください。
2. 証明書のチェック
2-1. 証明書が登録されていない
2-2. 登録されている証明書が誤っている
iOSの場合アプリの bundleId とアップロードしていただいた証明書の bundleId が異なると証明書が正しく認識されません。証明書の bundleId は以下のコマンドでも確認出来ます。
openssl pkcs12 -in your_certificate.p12
Android の場合、FCM のサーバーキーを取得し、デバイストークンに対してリクエストを送ると、配信が行える証明書であるか確認できます。こちらの確認方法に関しては、Googleの公式 FCMドキュメント をご参照ください。
curl --header "Authorization: key=${YOUR_SERVER_KEY}" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d "{\"registration_ids\":[\"${DEVICE_TOKEN}\"],\"dry_run\":true,\"data\":{}}"
2-3. 証明書の期限が切れている(iOS)
その場合、配信詳細画面のステータスが「失敗あり」となり、詳細ログにエラーが表示されます。
有効期限が切れている環境のAPNs証明書を作成・更新してください。
3. デバイスのプッシュ通知ステータスがアクティブ(Active)になっていない
その他下記トラブルシューティングもご参照下さい。
4. その他失敗する例
4-1. アプリがアンインストールされている
4-2. 登録されているデバイストークンと環境(development/production)が一致しない
4-3. SDK と API を並行利用している
並行利用している場合、デバイストークンが正しく登録されない場合がございます。SDK を利用している場合は、API でのデバイストークンの登録はお控えください。
(Androidのみ) 4-4. プッシュ文言にタグ値を含める場合のAndroid端末へのプッシュ通知
(Androidのみ) 4-5. 古い RegistrationId を使用している
GCMの仕様変更により、 registerメソッドが非推奨となったため、 Growthbeat Android SDK 1.2.6以降、InstanceIDクラスを使用して取得するよう仕様変更しております。詳細は下記ドキュメントをご参照ください。
古いRegistrationIdとFCMサーバーキーの組み合わせでも配信が失敗することがございます。先述の下記 curl を利用して組み合わせが正しいか確認が可能です。
curl --header "Authorization: key=${YOUR_SERVER_KEY}" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d "{\"registration_ids\":[\"${DEVICE_TOKEN}\"],\"dry_run\":true,\"data\":{}}"
5. 配信の状況の確認
5-1. プッシュ通知の配信状況を確認する
届かない場合の状況を確認するためには、管理画面の「配信一覧」を御覧ください。
「完了」となっている送信は、配信処理が終了していますが、その他のステータスのものは送信処理の途中です。配信が完了するまでお待ちください。
5-2. プッシュ通知の配信の詳細を確認する
配信が完了している場合は、配信の詳細を確認してください。「配信一覧」からプッシュ通知のメッセージ部分のリンクをクリックしていただくと詳細をご覧いただくことができます。
ここで実際に配信されている数が確認できるので、配信数がゼロとなっている場合は、デバイスが正しく登録されていない状況が考えられます。配信ステータスが「失敗あり」となっている場合は、詳細ログを確認してください。
5-3. プッシュ通知の配信のログを確認する
ログを確認するには、「詳細」をクリックして下さい。
証明書などに問題がある場合は、ここに失敗のエラーメッセージが出ます。エラーを確認して、対応をおこなってください。
メッセージ表示例
[iOS] | Unregister -> アンインストール済み BadDeviceToken -> 本番/開発の証明書間違え、もしくはEnvironmentの指定間違え DeviceTokenNotForTopic -> 証明書とデバイストークンが紐付かない場合 iOS (environment: XXXX) certificate is expired. -> APNs証明書の有効期限切れ |
[Android] | NotRegistered -> アンインストール済み InvalidRegistration -> デバイストークンが不正 MismatchSenderId -> 証明書(サーバーキー)とSenderIdが一致しない |
正常な配信ログは下記のようになります。
Start to send for iOS (environment: production)... Client token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, payload: {"aps":{"alert":"全体配信テスト","sound":"default","badge":1}} ~ 略 ~ Finished to send for iOS (environment: production). size: 156 Change status of inactive clients Number of inactive tokens: 0 Inactive client finished to change status. Start to send Android (environment: production)... Client token: eOLOsWxp0QE:xxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxx, payload: {"data":{"message":"全体配信テスト","sound":true}} ~ 略 ~ Finished to send for Android (environment: production). size: 14 Change status of inactive clients Number of inactive tokens: 0 Inactive client finished to change status.
Number of inactive tokens は、アンインストール している等の理由で配信ができなかったデバイスの数となります。また、これらのデバイスは、プッシュ通知ステータスが「無効(Inactive)」 へ変化します。
※iOSでアプリ初回起動時の通知許可ダイアログを許可にしている状態で、端末の設定から通知をOFFにしたユーザーは、
「無効(Inactive)」にならず、「アクティブ(Active)」のままとなります。