概要
配信確認は、デバイスがOneSignalを通じて送信されたプッシュ通知を実際に受信したときを追跡します。デバイス上のOneSignal SDKがプッシュを受信すると、通知IDとデバイスのサブスクリプションIDを含む確認イベントをOneSignalに送り返します。これにより、どのサブスクリプションがどの通知を受信したかを正確に確認できます。 OneSignalダッシュボードでは、配信確認はメッセージレポートで確認済み(または受信済み)として表示されます。すべての配信とエンゲージメントの指標については、メトリクス用語集を参照してください。
配信確認は「配信済み」とは異なります。プラットフォームプッシュサービス(APNs、FCM、ADM、HMS)は通知がサービスに受け付けられたかどうかを報告します — デバイスが実際に受信したかどうかではありません。配信確認はデバイス側の確認です。
要件
- 有料プランでのみ利用可能です。プランを比較。
- Web SDKセットアップおよび/またはモバイルSDKセットアップを完了してください。
- 配信確認は、デバイスにOneSignal SDKがインストールされている場合にのみ機能します。
- APIのみで作成されたサブスクリプションにはサポートされていません。
プラットフォーム固有の制限
iOS- Notification Service ExtensionとApp Groupの両方のセットアップが必要です。
- APNsは、オフライン時にアプリごとに1つのメッセージのみを保持します。オフライン中に複数のプッシュが送信された場合、最新のもののみが配信されます。
dataHuaweiメッセージタイプでのみサポートされています。messageタイプの場合、Huaweiは自社のダッシュボードでのみ受信データを提供します。
- Safariは配信確認をサポートしていません。
配信確認のトラブルシューティング
プッシュ通知がまったく届かない場合は、まず通知が表示されないを参照してください。iOS
iOSでの配信確認には、2つのものが連携して機能する必要があります:- プッシュが届いたときにOneSignalコードを実行するNotification Service Extension(NSE)
- メインアプリターゲットとNSEターゲットの間でデータを交換できるように共有されるApp Group
NSEターゲットが存在し正しいコードを持っていることを確認する
Xcodeで、プロジェクトターゲットの下にOneSignalNotificationServiceExtensionターゲットがリストされていることを確認してください。存在しない場合は、iOS SDKセットアップのステップ2に従ってください。NSEの
NotificationService.swift(または.m)ファイルを開きます。didReceive(_:withContentHandler:)内でOneSignalExtension.didReceiveNotificationExtensionRequestを呼び出す必要があります。ファイルにまだAppleのデフォルトテンプレートコードが含まれている場合は、OneSignal NSEコードに置き換えてください。NSEにOneSignalExtensionパッケージがあることを確認する
NSEターゲット > General > Frameworks and Libraries(またはBuild Phases > Link Binary With Libraries)を選択してください。
OneSignalExtensionがリストされていることを確認してください。メインアプリターゲットはOneSignalFrameworkを使用しますが、NSEターゲットはOneSignalExtensionを使用する必要があります — これらは異なるパッケージです。App Groupが両方のターゲットで正しく設定されていることを確認する
OneSignal SDKはApp Groupを使用してメインアプリとNSEの間でデータを共有します。設定方法は2つあります — お使いの設定に合うものを選択してください。
- メインアプリターゲット > Signing & Capabilities > App Groupsを選択します。
- App Groupを確認します。
group.YOUR_MAIN_APP_BUNDLE_ID.onesignal(YOUR_MAIN_APP_BUNDLE_IDはメインアプリターゲットのバンドル識別子で、General > Identityで確認できます)の場合、デフォルトApp Groupタブに従ってください。そうでない場合は、カスタムApp Groupタブに従ってください。- デフォルトApp Group - group.YOUR_MAIN_APP_BUNDLE_ID.onesignal
- カスタムApp Group
- NSEターゲット > Signing & Capabilities > App Groupsを選択します。
- まったく同じApp Groupがリストされていることを確認します。欠落している場合は、+ Capability > App Groupsから追加し、同じグループを選択します。
- 正しい:
group.YOUR_MAIN_APP_BUNDLE_ID.onesignal - 間違い:
group.YOUR_MAIN_APP_BUNDLE_ID.OneSignalNotificationServiceExtension.onesignal
最小デプロイメントターゲットが一致することを確認する
NSEターゲット > General > Minimum Deploymentsを選択します。この値はメインアプリターゲットの最小デプロイメントと一致する必要があります。不一致は、特定のOSバージョンでNSEが実行されない原因になる可能性があります。
"Copy only when installing"のチェックを外す
メインアプリターゲット > Build Phases > Embed App Extensionsを選択します。“Copy only when installing”がチェックされていないことを確認してください。チェックされている場合、NSEは開発ビルド時に組み込まれないため、テスト時に実行されません。
Info.plistのNSExtension値を確認する
NSEターゲット > Infoタブを選択し、NSEがObjective-Cで書かれている場合は、
NSExtensionキーを展開します。次が含まれていることを確認してください:$(PRODUCT_MODULE_NAME).NotificationServiceの代わりにNotificationServiceを使用してください。mutable-contentが設定されていることを確認する
OneSignalはプッシュペイロードに自動的に
mutable-content: 1を設定します。これにより、iOSがNSEを呼び出すよう指示されます。REST APIでプッシュを送信する場合は、mutable_content: falseを明示的に設定していないことを確認してください。mutable-contentがないと、iOSはNSEを実行せず、配信確認はトリガーできません。NSEが実行されていることをテストする
OneSignal呼び出しの前にテストプッシュを自分に送信します。通知の本文が
didReceive内に一時的にこの行を追加します:[Modified]で始まる場合、NSEは正しく実行されています。そうでない場合は、上記の手順を見直してください — NSEは呼び出されていません。テスト後にこの行を削除してください。Xcode Consoleログを使用した高度なNSEデバッグについては、iOS Notification Service Extensionのデバッグを参照してください。Android
- 通知が表示されない場合:モバイルプッシュトラブルシューティングを参照してください。
- 通知は表示されるが配信確認が欠落している場合:カスタムAndroidサービス拡張がブロックしている可能性があります。Androidサービス拡張ガイドを確認してください。
Web
- Safariはサポートされていません。
- 他のブラウザの場合、v16 SDKへの移行が完了していることを確認してください:
- 正しいSDK初期化:
- 正しいService Worker参照:
- 正しいSDK初期化:
よくある質問
配信確認の数が少ないまたは欠落しているのはなぜですか?
最も一般的な原因は、設定の問題(特にiOS)、非アクティブなデバイス、プラットフォームの制限です。- iOS設定の誤り: Notification Service ExtensionまたはApp Groupが欠落または不正です。上記のiOS配信確認のトラブルシューティングを参照してください。
- 非アクティブまたは放棄されたデバイス: オフラインまたは使用されていないデバイスは、プッシュを受信したり配信確認イベントを送信したりしません。下記の非アクティブデバイスの処理方法は?を参照してください。
- プラットフォームの制限: Huaweiの
messageタイプとSafariは配信確認をサポートしていません。 - Androidの強制終了: 一部のデバイスメーカーはアプリをスワイプして閉じることを強制終了として扱い、SDKイベントが停止します。モバイルプッシュが表示されないガイドを参照してください。
非アクティブデバイスの処理方法は?
オフラインまたは放棄されたデバイスは、プッシュ通知を受信したり配信確認イベントを送信したりしません。これはユーザーがデバイスを交換または放棄した場合によく発生します。 非アクティブユーザーを再エンゲージするには:- Audience Activityを使用して、配信を確認しなかったユーザーに再送信します。
- Last Sessionに基づいてセグメントを作成します(例:90日以上非アクティブ)。
- 再エンゲージメントJourneyと組み合わせて、取り戻します。
- 定期的に非アクティブユーザーをターゲットにして、到達不可能なデバイスを整理します。
確認済みと表示されているのに、デバイスに表示されないのはなぜですか?
配信確認イベントは、デバイスがプッシュペイロードを受信したことを意味します。まれに、通知が表示されない場合があります。 考えられる原因:- 通知の見逃し: テストサブスクリプションを見つけて設定でテストプッシュを自分に送って確認します。
- iOSのフォーカスモード: 「おやすみモード」、「睡眠」、またはその他のフォーカスモードは通知を遅延またはグループ化します。グループ化された通知を見ずに消してしまった可能性があります。
- 表示を抑制するアプリコード:
- フォアグラウンドライフサイクルリスナーまたはNotification Service Extensionの
event.preventDefault()は通知の表示を停止します。 removeDeliveredNotifications(withIdentifiers:)またはremoveAllDeliveredNotifications()の呼び出しは通知が届いた後に削除します。
- フォアグラウンドライフサイクルリスナーまたはNotification Service Extensionの
- プッシュペイロード設定:
priorityが高に設定されていることを確認してください。プッシュ優先度を参照してください。collapse_idは同じIDを使用して古いプッシュを新しいプッシュに置き換えます。
サポートが必要ですか?サポートチームとチャットするか、
support@onesignal.comにメールしてください以下を含めてください:- 発生している問題の詳細と再現手順(利用可能な場合)
- OneSignal App ID
- 該当する場合は、External IDまたはSubscription ID
- 該当する場合は、OneSignalダッシュボードでテストしたメッセージのURL
- 関連するログまたはエラーメッセージ