メインコンテンツへスキップ
OneSignalから送信するプッシュ通知は、まず異なるプッシュサービス(FCM、APNS、HMSなど)に送信する必要があります。プッシュサービスから、メッセージは各ユーザーのデバイスに配信されます。 OneSignalダッシュボードのプッシュメッセージレポートでは:
  • Deliveredは、プッシュ通知がプッシュサービスに正常に引き渡されたことを意味します。プッシュサービスからの応答を受け取ります。
  • Confirmedは、デバイス上のOneSignal SDKが通知を受信したことを意味します。各ユーザーのデバイスから直接このステータスを取得します。
通知が「Delivered」だったのに「Confirmed」ではなく、デバイスに表示されなかった(または遅延した)場合、このガイドはその理由をトラブルシューティングするのに役立ちます。

前提条件

効果的にトラブルシューティングするには、次の情報を収集してください:
External IDのみを持っている場合は、デバイスタイプ、最終セッション、IPアドレスなどのフィルターを使用して、Audience > Subscriptionsタブでサブスクリプションを検索してください。

デバイスレベルの問題

デバイス上でユーザーが制御する項目で、プッシュ通知の配信に影響を与える可能性があります。

プッシュ権限とサブスクリプションステータス

デバイスで、アプリの通知設定を確認してください。通知権限が有効になっていることを確認してください。次にアプリを開きます。 SDKがサブスクリプションステータスやその他のプロパティを更新するために、デバイスでアプリを開くことが不可欠です。 OneSignalダッシュボードのAudience > Subscriptionsで:
  • Subscription IDを検索します
  • Subscription IDがない場合は、External IDを検索したり、デバイスタイプ、最終セッション、IPアドレスでフィルタリングして見つけてみてください。
プッシュサブスクリプションが「Subscribed」プッシュステータスになっていることを確認してください。

Androidカテゴリが無効

デバイスがAndroidの場合、設定アプリ > 通知 > あなたのアプリを確認してください。「通知を表示」が有効になっており、その下のすべてのカテゴリが有効になっていることを確認してください。カテゴリが無効になっている場合、そのカテゴリから通知を受信できません。 この例では、Abandoned Cart - Urgentカテゴリがオフになっています。このカテゴリが通知で使用されている場合、デバイスは通知を受信しません。

画像は、デバイス上のアプリでカテゴリが無効になっていることを示しており、そのカテゴリで送信すると、デバイスはこのプッシュを受信しません。

カテゴリが設定されていない場合、OneSignalはデフォルトの「Miscellaneous」カテゴリを使用します。無効になっている場合は、このカテゴリが有効になっていることを確認してください。詳細はAndroid通知カテゴリを参照してください。
一部のSamsungデバイスは、アプリのカテゴリをデフォルトで自動的にオフにします。詳細については、このreddit投稿およびAndroid Policeの記事と記事2を参照してください。
これについてユーザーに教育するために、Samsungユーザーをターゲットにしてカテゴリを有効にする手順を表示するアプリ内メッセージを設定できます。チュートリアル例:特定のAndroidメーカーとデバイスをターゲットにするを提供しています。

AndroidアプリがForce Stopされている

Androidアプリが強制停止されると、デバイスはそのアプリのプッシュ通知が表示されるのを防ぎます。バッテリー寿命を延ばすために、Xiaomi、Huawei、Samsungなどの一部のAndroidメーカーは、ユーザーがアプリをスワイプで閉じたときにアプリを強制停止する可能性のある積極的なバックグラウンドプロセス管理を実装しています(Facebook、Whatsapp、Gmailなどの大規模なアプリは省略)。これについてのオンライン情報は多数あります:https://dontkillmyapp.com/当社が書いたブログ投稿は、多くのRedditでの議論を生み出しました。 デバイスによっては、これが発生するのを防ぐために次の手順を実行する必要がある場合があります:
  1. バックグラウンドアクティビティを許可する:
    • 設定 > アプリ > あなたのアプリ > バッテリー > バックグラウンドアクティビティを許可する。
  2. スリープ中のアプリ機能を無効にする:
    • 設定 > バッテリーとデバイスケア > バッテリー > バックグラウンド使用制限 > スリープ中のアプリ > このリストからアプリを削除します。
  3. 最近のアプリでアプリをロックする:
    • アプリを開き、最近のアプリボタンをタップします。
    • アプリを見つけ、アプリウィンドウをタップして長押しし、次にこのアプリをロックします(一部のSamsungモデルで利用可能)。
  4. アプリの自動起動を有効にする(一部のデバイスで):
    • 設定 > アプリ > あなたのアプリ > 権限 > 自動起動 > 有効にする。
  5. アプリの適応型バッテリー最適化を無効にする:
    • 設定 > バッテリーとデバイスケア > バッテリー > その他のバッテリー設定 > 適応型バッテリー > オフに切り替える(またはアプリを除外する)。
テスト中は、通知を送信している間にアプリが実行されていることを確認してください。メッセージを受信していることを確認するには、デバッグログの取得を参照してください。

ネットワーク接続

プッシュ通知を受信するには、デバイスがオンラインである必要があります。デバイスがオフ、機内モード、不安定またはインターネット接続がない場合、適切な接続が確立されるまでプッシュは表示されません。詳細については、Time To Live(TTL)パラメータを参照してください。

Wi-Fi接続、ファイアウォール、またはVPN

接続しているネットワーク/WiFiを確認してください。AppleまたはGoogleサーバーへの接続が閉じられている可能性があります。インターネット接続を無効にしてから再度有効にしてみてください。また、WiFiなしでモバイルデータを使用してみてください。 インターネットとの間のトラフィックを制限している場合は、プッシュサービスとの接続を許可するように構成する必要があります。

おやすみモードと集中モード

デバイスが「おやすみモード」または「集中モード」を使用している場合、通知の表示を防いだり、アプリの他の通知とは異なる方法で通知をグループ化したりする可能性があります。集中モードでグループ化された通知をスワイプで削除すると、デバイスの通知センターでアプリの既にグループ化された通知に後で表示されません。 デバイスでこれらのモードを確認して無効にしてください。
  • iOS:設定 > 通知 > 集中モード
  • Android:設定 > 通知 > 集中モード
次に、確認するためにテスト通知を自分に送信します。

通知グループ化の動作

集中モードとともに、Androidの異なるバージョンには独自の通知グループ化動作がある場合があります。試す解決策:
  1. OneSignalダッシュボードまたはコードを使用してAndroid通知カテゴリを作成してみてください。次に、すべての通知にこのIDを設定して、効果があるかどうかを確認します。
  2. デバイス固有の設定を確認する:デバイスで、デバイス固有のグループ化オプションの設定 > 通知 > 詳細設定を確認します。
  3. 通知制限を確認する:この特定のデバイスでアプリのバッテリー最適化またはアプリスリープ機能が有効になっているかどうかを確認します。

低電力モードとバッテリー最適化

iOSデバイス:テスト中は低電力モードを無効にするか、デバイスを充電してください。 Androidデバイス:デバイスメーカーとオペレーティングシステムのバージョンによって、「バッテリー最適化」設定にはいくつかの異なる名前があります。バッテリー設定で、アプリを「制限なし」または「最適化なし」に設定します。この設定がない場合は、バッテリー最適化または省電力モードまたはエネルギー節約またはバックグラウンド使用制限または適応型バッテリー設定を検索し、アプリまたはテスト中に無効にします。

エミュレーターの癖

エミュレーターデバイスには次の両方が必要です:
  1. Google Playサービス(Google Playストア)がインストールされている
  2. コールドブートで起動する
  • Android Studio Device Managerを開きます
  • デバイスを選択し、Google Playストアがインストールされていることを確認してEditをクリックします
  • Additional SettingsまたはMoreボタンに移動します
  • Boot optionCold Bootに設定します
  • 変更を保存してエミュレーターを再起動します

プッシュの送信

プッシュ通知を送信する際に確認すべき一般的な事項。

デバイスがメッセージオーディエンスに含まれていない

サブスクリプションがメッセージのターゲットオーディエンスに含まれていない可能性があります。セグメントまたはフィルターを使用している場合は、サブスクリプションが基準に適合していることを確認してください。External IDまたは他のエイリアスをターゲティングしている場合は、それが設定されており、正しいものに送信していることを確認してください。

Collapse ID

メッセージにCollapse IDを追加している場合、最新の通知は同じIDを持つ古い通知を置き換えます。これを設定していないか、置き換えたい通知に対して正しく設定していることを確認してください。詳細については、通知の削除とTTLを参照してください。

Android Dozeモード、優先度、優先度が下げられた(スロットルされた)メッセージ

Androidの省電力機能(DozeモードApp Standby)は、通知を遅延またはブロックする可能性があります。これらのモードは、デバイスが一定期間プラグを抜いて静止している場合に自動的に有効になります。 デバイスがこれらのモードにある場合、高優先度メッセージを送信するとアプリが起動します。ただし、送信しすぎると、通知の優先度が下げられ、通常の優先度で送信される可能性があります。FCMは次のように述べています
Androidの高優先度メッセージは、時間に敏感でユーザーに表示されるコンテンツを対象としており、ユーザー向けの通知につながるはずです。FCMがメッセージがユーザー向けの通知につながらないパターンを検出した場合、メッセージは通常の優先度に優先度が下げられるか、Google Playサービスによる処理に委任される可能性があります。

開発者:コードによる通知のブロックまたは削除

OneSignalフォアグラウンド通知の防止

SDKにはForeground Event Listenerメソッドがあります。このメソッド内でevent.preventDefault()を呼び出すと、アプリが開いている間に通知が表示されるのをブロックできます。 テスト中は、アプリがバックグラウンドまたは閉じていることを確認して、これが通知をブロックしていないことを確認してください。

Android Service Extensionによる通知のブロック

Android Notification Service Extensionを設定した場合、これはアプリへの通知のエントリポイントです。event.preventDefault()メソッドで通知をブロックしている可能性があります。コードを確認して、これが使用されているかどうか、およびどのような条件で使用されているかを確認してください。

iOS UNUserNotificationCenterDelegateによるフォアグラウンドでの通知のブロック

iOS UNUserNotificationCenterDelegateを設定した場合、フォアグラウンドで通知を表示することをiOSデバイスがブロックするコードがある可能性があります。 このカスタムコードを削除し、代わりにSDKのForeground Event Listenerメソッドを使用してください。

iOSバッジのクリア

バッジのクリアは通知に影響を与える可能性があります。アプリがバッジをクリアすると、通知センターから既存の通知を削除できます。OneSignalのSDKも、アプリが開いたときにバッジをクリアし、通知を削除します。これを防ぐ方法の詳細については、バッジを参照してください。

通知の削除

AppleはremoveAllDeliveredNotifications()メソッドを提供して、通知センターからアプリの配信されたすべての通知を削除します。removeAllDeliveredNotifications()に関するAppleの開発者ドキュメントを参照してください。

Firebaseの競合

Firebase Messaging SDKを使用している場合は、Android Manifestファイルで次の行を確認してください。これが通知をブロックしている可能性があります。
com.google.firebase.iid.FirebaseInstanceIdReceiver

テスト

アプリに詳細なデバッグメソッドを追加するには、デバッグログの取得に従ってください。 アプリをバックグラウンドで実行し、自分にメッセージを送信します。 メッセージイベントを受信していない場合は、次の情報を添えて[email protected]に連絡してください:
  • テストからの完全なログ。詳細については、デバッグログの取得を参照してください。
  • デバッグ時に送信したonesignal.comダッシュボードのメッセージレポートへのリンク。これはDelivery > Sent Messagesで見つけることができます。送信したメッセージをクリックし、URLをコピーして貼り付けて共有してください。

アプリの状態を確認する

次を実行して、アプリの現在の状態を確認します。「com.company.appname」をパッケージ名に置き換えてください。
adb shell dumpsys package com.company.appname | grep stopped
すべてが正常な場合はstopped=falseが表示され、それ以外の場合はstopped=trueが表示され、アプリが何らかの方法で強制終了されたことを示します。 別の方法は、いくつかの通知を送信して、次のGCM logcatエントリを確認することです。
W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent {
   act=com.google.android.c2dm.intent.RECEIVE pkg=com.onesignal.example (has extras)
}
上記のキャンセルされたインテントが表示された場合、アプリは通知を処理するために起動できませんでした。 一部のデバイスメーカーは、アプリが強制終了状態になるのを防ぐためにアプリをホワイトリストに登録します。例として、GmailやWhatsappなどがあります。

追加のデバッグ

FCMは、デバイスがFCMに最後に接続された時刻をクエリするREST APIを提供します。これを取得する方法については、次のGoogleドキュメントを参照してください。https://developers.google.com/instance-id/reference/server#get_information_about_app_instances