メインコンテンツへスキップ
OneSignalダッシュボードのプッシュメッセージレポートでは:
  • 配信済みは、OneSignalが通知をプッシュサービス(FCM、APNs、またはHMS)に正常に引き渡し、成功レスポンスを受け取ったことを意味します。
  • 確認済みは、デバイス上のOneSignal SDKが通知を受信したことを意味します。
通知が「配信済み」だが「確認済み」でなく、デバイスに表示されなかった場合は、以下の手順から開始してください。

始める前に

トラブルシューティングに役立てるために、以下の情報を収集してください。正しいサブスクリプションを特定し、配信状態を確認するために必要です。
External IDしかない場合は、Audience > SubscriptionsでDevice Type、Last Session、IPアドレスでフィルタリングしてサブスクリプションを検索してください。

デバイス設定

このセクションはすべてのプラットフォームに適用されます。プラットフォーム固有またはコードレベルの原因を調査する前に、まずこれらを確認してください。

権限とサブスクリプションの状態

デバイスで:
  1. 設定 > 通知に移動し、アプリの通知設定を開きます。
  2. 通知権限が有効になっていることを確認します。
  3. 次にアプリを開きます。SDKが初期化されると、サブスクリプションの状態がOneSignalに同期されます。
OneSignalダッシュボードで:
  1. Audience > Subscriptionsに移動します。
  2. サブスクリプションIDまたはExternal IDで検索するか、Device Type、Last Session、IPアドレスで並べ替えます。
  3. プッシュ状態がSubscribedと表示されていることを確認します。未購読と表示されるか表示されない場合、何を送っても通知は届きません。状態が予期しない場合は、下のトラブルシューティングを参照してください。

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

AndroidとiOSのおやすみモードと集中モードは、通知を完全に抑制したり、モードが解除されるまで不可視になる方法でグループ化したりすることがあります。 テスト前にこれらのモードを無効にしてください:
  • iOS: 設定 > 集中モード > おやすみ > オフ
  • Android: 設定 > 通知 > おやすみモード > オフ
無効にした後にテスト通知を送信します。通知が表示された場合、そのモードが原因でした。
iOSでは、集中モード中に通知が届き、ユーザーがグループ化された通知サマリーをスワイプして消した場合、それらの通知は後から個別に再表示されません。

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

iOS:テスト前に設定 > バッテリーで低電力モードを無効にします。 Androidデバイス:バッテリー設定でアプリを「無制限」または「最適化なし」に設定します。その設定が見つからない場合は、バッテリー最適化省電力モード節電バックグラウンド使用制限、または適応型バッテリー設定を検索し、アプリに対して無効にします。

ネットワークと接続

プッシュ通知を受信するには、デバイスがオンラインである必要があります。デバイスがオフ、機内モード、不安定またはインターネット接続がない場合、適切な接続が確立されるまでプッシュは表示されません。FCMとAPNsが接続を待機する期間はTime To Live (TTL)パラメータで設定できます(デフォルトは3日間)。 ファイアウォールやVPNがあるWiFiネットワークに接続しているデバイスは、AppleやGoogleサーバーへの接続がブロックされる場合があります。モバイルデータに切り替えてテストしてください。 ファイアウォールでネットワークトラフィックを管理している場合は、以下を許可するよう設定してください:
  • FCM(Android): アウトバウンドTCPポート5228、5229、5230。完全な要件はFCMドキュメントを参照してください。
  • APNs(iOS): アウトバウンドTCPポート5223およびTCPポート443または2197。完全な要件はAppleのドキュメントを参照してください。

通知グループ化の動作

AndroidとiOSの異なるバージョンには、それぞれの通知グループ化動作があります。通知グループ化とは、同じアプリまたは複数のアプリのいくつかの通知が通知センターにまとめられることです。グループ化された通知がまとめて閉じられることで、ユーザーが個別の通知を見逃すことがよくあります。

Androidの問題

このセクションはAndroidデバイスのみに適用されます。iOSのトラブルシューティングをしている場合は、iOSの問題にスキップしてください。

Android 強制停止

Androidアプリが強制停止されると、OSはユーザーが手動で再起動するまでプッシュ通知の受信を阻止します。これはAndroidで通知が届かない最も一般的な原因の一つです。 Samsung、Xiaomi、Huaweiなどの一部のメーカーは、ユーザーが最近使用したアプリリストからアプリをスワイプして消した際にアプリを積極的に強制停止しますが、GmailやWhatsAppなどの大手アプリは対象外です。デバイス固有の動作についてはdontkillmyapp.comを参照してください。 影響を受けたデバイスでの強制停止の動作を軽減するには、以下の手順を順番に試してください:
  1. バックグラウンドアクティビティを許可:設定 > アプリ > あなたのアプリ > バッテリー > バックグラウンドアクティビティを許可。
  2. スリープ中のアプリを無効化:設定 > バッテリーとデバイスケア > バッテリー > バックグラウンド使用制限 > スリープ中のアプリ > このリストからアプリを削除。
  3. 最近のアプリでアプリをロック:アプリを開き、最近のアプリボタンをタップして、アプリウィンドウを長押しし、このアプリをロックを選択(一部のSamsungモデルで利用可能)。
  4. 自動起動を有効化(一部のデバイス):設定 > アプリ > あなたのアプリ > 権限 > 自動起動 > 有効化。
  5. 適応型バッテリー最適化を無効化:設定 > バッテリーとデバイスケア > バッテリー > その他のバッテリー設定 > 適応型バッテリー > オフ(またはアプリを除外)。
アプリが強制停止されているかどうかを確認するには、以下のコマンドを実行します。com.company.appnameをあなたのパッケージ名に置き換えてください:
adb shell dumpsys package com.company.appname | grep stopped
stopped=falseはアプリが強制停止されていないことを意味します。stopped=trueは強制停止されていることを意味します。 いくつかの通知を送信して、logcatで以下のエントリを確認することもできます:
W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent {
   act=com.google.android.c2dm.intent.RECEIVE pkg=com.onesignal.example (has extras)
}
このキャンセルされたインテントが表示された場合、アプリは通知を処理するために起動できませんでした。
FCMは、デバイスがFCMサーバーに最後に接続した時刻を確認するAPIを提供しています。これによりデバイスがそもそも到達可能かどうかを確認できます。詳細はアプリインスタンス情報に関するGoogleのドキュメントを参照してください。ユーザーが自分で解決できるようにするには、アプリ内メッセージを使用して既知のAndroidデバイスユーザーにバックグラウンドアクティビティを有効化する方法を案内してください。例:特定のAndroidメーカーとデバイスをターゲットにするを参照してください。

Android 通知カテゴリが無効

Android通知カテゴリ(チャンネルとも呼ばれます)を使用すると、ユーザーはアプリの特定の種類の通知を無効化できます。カテゴリが無効化されている場合、そのカテゴリで送信された通知はデバイスに表示されません——アプリが通知権限を持っていても同様です。 デバイスでカテゴリの状態を確認します:設定 > 通知 > あなたのアプリ。「通知を表示」が有効になっており、すべてのカテゴリがオンになっていることを確認します。
「Abandoned Cart - Urgent」カテゴリがオフになっているAndroidアプリの通知設定。このカテゴリの通知がデバイスに表示されなくなります。
通知にカテゴリが設定されていない場合、OneSignalはデフォルトのMiscellaneousカテゴリを使用します。カスタムカテゴリを使用していない場合は、このカテゴリが有効になっていることを確認してください。設定の詳細はAndroid通知カテゴリを参照してください。
Samsung One UI 6.1は多くのアプリの通知カテゴリを自動的に無効化します。ユーザーがSamsungデバイスを使用していて最近特定の通知を受信できなくなった場合、これが原因である可能性が高いです。詳細はAndroid Policeの記事を参照してください。
アプリ内メッセージを使用してSamsungユーザーにカテゴリの再有効化方法を案内できます。例:特定のAndroidメーカーとデバイスをターゲットにするを参照してください。

Android Dozeモード、優先度、および優先度が下げられたメッセージ

AndroidのDozeモードApp Standby機能は、デバイスがプラグを抜いて静止しているときにバックグラウンドプロセス(プッシュ配信を含む)を遅延させます。これらのモードは自動的に有効化され、ユーザーには表示されません。 高優先度メッセージを送信するとデバイスが起動し、Dozeモードをバイパスします。ただし、可視通知を生成しない高優先度メッセージを多数送信すると、FCMがメッセージを通常優先度に自動的に降格させる場合があります。FCMドキュメントより:
Android上の高優先度メッセージは、時間に敏感なユーザー向けコンテンツを対象としています。FCMがメッセージがユーザー向け通知につながらないパターンを検出した場合、メッセージは通常優先度に降格される可能性があります。
降格が疑われる場合は、高優先度の使用を時間に敏感なメッセージのみに制限してください。

Androidエミュレーターの設定

AndroidエミュレーターでのプッシュにはGoogle Play Servicesが必要です。エミュレーターでテストしているのに通知が届かない場合は、以下を確認してください:
  1. エミュレーターイメージにGoogle Play Storeが含まれていること
  2. エミュレーターがコールドブートを使用するように設定されていること
コールドブートの設定:Android Studio Device Managerを開く > デバイスを選択 > 編集 > 追加設定 > ブートオプションをCold Bootに設定 > 保存して再起動。

iOSの問題

このセクションはiOSデバイスのみに適用されます。Androidのトラブルシューティングをしている場合は、Androidの問題を参照してください。

APNs通知の統合

iOSデバイスがオフラインまたは到達不能な間に複数の通知が送信された場合、デバイスが再接続した際に最新の通知のみが表示されることがあります。APNsはデバイスがオフラインの間、アプリごとに1つの通知のみを保存し、それ以前の通知は破棄します。これは想定されたAPNsの動作であり、OneSignalやアプリ側で変更することはできません。

iOSフォアグラウンドブロック

iOS UNUserNotificationCenterDelegateを設定している場合、アプリがフォアグラウンドにある間に通知の表示をブロックするコードがある可能性があります。 このカスタムコードを削除し、代わりにSDKのフォアグラウンドイベントリスナーを使用してください。

iOSバッジクリア

アプリがバッジカウントをクリアすると、iOSはそのアプリのすべての通知を通知センターから削除します。OneSignal SDKはアプリが開かれたときに自動的にバッジをクリアするため、以前に配信された通知がユーザーが次回アプリを開いたときに消える可能性があります。 テスト中にこれが混乱を引き起こしている場合は、この動作を制御する方法についてバッジを参照してください。

メッセージの設定

このセクションでは、デバイスではなくOneSignalでの通知の設定方法によって引き起こされる問題を取り上げます。

サブスクリプションがターゲットオーディエンスに含まれていない

メッセージのオーディエンスを確認して、モバイルサブスクリプションが含まれていることを確認します:
  • セグメント:サブスクリプションがすべてのオーディエンスフィルタ条件を満たしていることを確認します。
  • ダイレクト送信:ターゲットにしているIDが正しいことを確認します:
    • サブスクリプションがまだプッシュを購読していること。
    • 最近の最終セッション日付があること——古いまたは非アクティブなサブスクリプションに送信している可能性があります。

Collapse IDによる通知の置き換え

メッセージにCollapse IDを設定している場合、同じCollapse IDを持つ新しい通知は未読の同IDの通知を静かに置き換えます。ユーザーが以前の通知を開いていない場合、最新の通知のみが表示されます。Collapse IDの仕組みについては通知の削除とTTLを参照してください。

コードレベルの原因

このセクションではアプリのソースコードへのアクセスが必要です。コードへのアクセス権がない場合は、これらのチェック項目を開発チームと共有してください。

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

OneSignal SDKのフォアグラウンドイベントリスナーには、アプリがフォアグラウンドにある間に通知を抑制するevent.preventDefault()メソッドが含まれています。このメソッドがコード内で無条件に呼び出されている場合、すべてのフォアグラウンド通知が静かにブロックされます。 テスト中は、フォアグラウンド抑制を原因として除外するため、アプリをバックグラウンドまたは完全に閉じた状態に保ってください。

Android Notification Service Extension

Android Notification Service Extensionを実装している場合、これはアプリへの受信通知の最初のエントリポイントです。このExtension内でevent.preventDefault()が呼び出されると、アプリの状態に関わらず通知がブロックされます。Extensionのコードを確認し、このメソッドが意図的にのみ呼び出されていることを確認してください。

Firebase Messaging SDKの競合

アプリにFirebase Messaging SDKも含まれている場合は、OneSignalがFCMメッセージを処理する前にFirebaseが傍受していないか確認してください。 この問題は次の場合によく発生します:
  • OneSignalで通知が配信済みと表示されているにもかかわらず、デバイスに表示されない。
  • アプリにOneSignalとfirebase_messaging(またはカスタムFirebaseMessagingService)の両方が含まれている。
  • Firebase Messagingを削除するとプッシュが機能するが、両方のSDKが存在すると失敗する。
  1. AndroidManifest.xmlcom.google.firebase.iid.FirebaseInstanceIdReceiverなどのレガシーFirebaseレシーバーを確認し、OneSignalがプッシュ配信を担当している場合は削除または条件付きで除外してください。
  2. onMessageReceivedをオーバーライドするカスタムFirebaseMessagingServiceの実装(またはFlutterのfirebase_messagingなどのライブラリ)を確認してください。別のサービスがメッセージを完全に処理または抑制している場合、OneSignalが通知を表示する前にFCMペイロードを消費する可能性があります。
  3. FirebaseMessaging.getToken()FirebaseMessaging.deleteToken()などのFirebaseトークン管理APIの呼び出しは避けてください。
OneSignalがプッシュ配信を担当している場合、プッシュトークンのライフサイクルを管理するSDKはOneSignalのみであるべきです。FCMトークンを直接取得または管理すると、トークンの所有権の競合や不安定な配信動作が発生する可能性があります。 他のシステム用にデバイスのプッシュトークンが必要な場合は、OneSignalから読み取り(例:User.pushSubscription.token)、SDKのオブザーバーAPIを使用してサブスクリプション/トークンの変更を監視してください。

トラブルシューティング

上記のセクションを確認しても問題が解決しない場合は、デバッグログを取得してください。これは配信が失敗している場所を正確に特定する最速の方法です。 デバッグログの取得に従ってアプリで詳細ログを有効にします。次に:
  1. アプリをバックグラウンドに置く
  2. 影響を受けたデバイスにテスト通知を送信する
  3. ログにエラーがないか確認する。OneSignalが初期化されており、ログ内のsubscription-idがプッシュを購読していて、メッセージを送信しているIDと同じであることを確認してください。

お困りですか?support@onesignal.comのサポートチームにお問い合わせください以下の情報をご提供ください:
  • OneSignal App ID
  • サブスクリプションIDまたはExternal ID
  • OneSignalダッシュボードでテストしたメッセージのURL
  • デバッグログの取得の完全なデバッグログ
喜んでお手伝いします!