Push通知が届かない場合のトラブルシューティング

オフラインからオンラインになった際のプッシュ通知の受信

1. デバイスのチェック

1-1. 正しいデバイストークンが登録されていない

デバイスがGrowth Pushに登録されていない場合、プッシュ通知が届きません。デバイスが登録されているかの確認は、管理画面の「デバイス」の画面から見ることができます。

iOSの場合は、アプリの証明書の設定などが正しく行われていないと、デバイストークンが取得できずに、デバイストークンが空になる場合があります。この場合は、証明書の設定を見なおしてください。詳細は  デバイストークンが登録されない(iOSの場合) をご覧ください。
Androidの場合は、AndroidManifest.xmlの記述に不足がある可能性が高いです。詳しくは  デバイストークンが登録されない(Androidの場合)をご覧ください。

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証明書の有効期限が切れている場合は、iOSへ配信されません。
その場合、配信詳細画面のステータスが「失敗あり」となり、詳細ログにエラーが表示されます。
有効期限が切れている環境のAPNs証明書を作成・更新してください。

その他、証明書のエラーは下記をご参照ください。

3. デバイスのプッシュ通知ステータスがアクティブ(Active)になっていない

デバイスのプッシュ通知ステータスがActiveになっていない場合、プッシュ通知が届きません。 
管理画面の「デバイス」の画面 を開き、プッシュ通知ステータスが「アクティブ(Active)」になっているかを確認します。 それ以外のデバイスには、プッシュ通知は配信されませんので、状況を確認して「アクティブ(Active)」になるように設定します。 

その他下記トラブルシューティングもご参照下さい。

4. その他失敗する例

4-1. アプリがアンインストールされている

アプリがアンインストールされている場合は、配信ができません。

4-2. 登録されているデバイストークンと環境(development/production)が一致しない 

管理画面上のデバイス一覧画面 にて、登録されたデバイスの環境を確認することができます。

4-3. SDK と API を並行利用している

並行利用している場合、デバイストークンが正しく登録されない場合がございます。SDK を利用している場合は、API でのデバイストークンの登録はお控えください。 

(Androidのみ) 4-4. プッシュ文言にタグ値を含める場合のAndroid端末へのプッシュ通知

プッシュ通知の文言部分に「{{tag:タグ名}}」という文字列を埋め込むことによってユーザーごとにプッシュ通知の文言を変化させることができますが、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)」のままとなります。