メインコンテンツへスキップ

概要

配信確認は、デバイスがOneSignalを通じて送信されたプッシュ通知を実際に受信したときを追跡します。デバイス上のOneSignal SDKがプッシュを受信すると、通知IDとデバイスのサブスクリプションIDを含む確認イベントをOneSignalに送り返します。これにより、どのサブスクリプションがどの通知を受信したかを正確に確認できます。 OneSignalダッシュボードでは、配信確認はメッセージレポート確認済み(または受信済み)として表示されます。すべての配信とエンゲージメントの指標については、メトリクス用語集を参照してください。
配信確認フロー
配信確認は「配信済み」とは異なります。プラットフォームプッシュサービス(APNs、FCM、ADM、HMS)は通知がサービスに受け付けられたかどうかを報告します — デバイスが実際に受信したかどうかではありません。配信確認はデバイス側の確認です。

要件

  • 有料プランでのみ利用可能です。プランを比較
  • Web SDKセットアップおよび/またはモバイルSDKセットアップを完了してください。
    • 配信確認は、デバイスにOneSignal SDKがインストールされている場合にのみ機能します。
    • APIのみで作成されたサブスクリプションにはサポートされていません

プラットフォーム固有の制限

iOS
  • Notification Service ExtensionApp Groupの両方のセットアップが必要です。
  • APNsは、オフライン時にアプリごとに1つのメッセージのみを保持します。オフライン中に複数のプッシュが送信された場合、最新のもののみが配信されます。
Huawei
  • data Huaweiメッセージタイプでのみサポートされています。
  • messageタイプの場合、Huaweiは自社のダッシュボードでのみ受信データを提供します。
Web
  • Safariは配信確認をサポートしていません

配信確認のトラブルシューティング

プッシュ通知がまったく届かない場合は、まず通知が表示されないを参照してください。

iOS

iOSでの配信確認には、2つのものが連携して機能する必要があります:
  1. プッシュが届いたときにOneSignalコードを実行するNotification Service Extension(NSE)
  2. メインアプリターゲットとNSEターゲットの間でデータを交換できるように共有されるApp Group
どちらかが欠落または誤設定されている場合、デバイスはプッシュを受信しますが、OneSignalに報告しません。 iOS設定を確認する
1

NSEターゲットが存在し正しいコードを持っていることを確認する

Xcodeで、プロジェクトターゲットの下にOneSignalNotificationServiceExtensionターゲットがリストされていることを確認してください。存在しない場合は、iOS SDKセットアップのステップ2に従ってください。NSEのNotificationService.swift(または.m)ファイルを開きます。didReceive(_:withContentHandler:)内でOneSignalExtension.didReceiveNotificationExtensionRequestを呼び出す必要があります。ファイルにまだAppleのデフォルトテンプレートコードが含まれている場合は、OneSignal NSEコードに置き換えてください。
2

NSEにOneSignalExtensionパッケージがあることを確認する

NSEターゲット > General > Frameworks and Libraries(またはBuild Phases > Link Binary With Libraries)を選択してください。OneSignalExtensionがリストされていることを確認してください。メインアプリターゲットはOneSignalFrameworkを使用しますが、NSEターゲットはOneSignalExtensionを使用する必要があります — これらは異なるパッケージです。
3

App Groupが両方のターゲットで正しく設定されていることを確認する

OneSignal SDKはApp Groupを使用してメインアプリとNSEの間でデータを共有します。設定方法は2つあります — お使いの設定に合うものを選択してください。
  1. メインアプリターゲット > Signing & Capabilities > App Groupsを選択します。
  2. App Groupを確認します。
App Groupがgroup.YOUR_MAIN_APP_BUNDLE_ID.onesignalYOUR_MAIN_APP_BUNDLE_IDはメインアプリターゲットのバンドル識別子で、General > Identityで確認できます)の場合、デフォルトApp Groupタブに従ってください。そうでない場合は、カスタムApp Groupタブに従ってください。
  1. NSEターゲット > Signing & Capabilities > App Groupsを選択します。
  2. まったく同じApp Groupがリストされていることを確認します。欠落している場合は、+ Capability > App Groupsから追加し、同じグループを選択します。
よくある間違いは、メインアプリのバンドル識別子ではなくNSEのバンドル識別子を使用することです:
  • 正しい: group.YOUR_MAIN_APP_BUNDLE_ID.onesignal
  • 間違い: group.YOUR_MAIN_APP_BUNDLE_ID.OneSignalNotificationServiceExtension.onesignal
メインアプリターゲットとNSEターゲットは同じApp Group識別子を持つ必要があります。
ビルド設定に.xcconfigファイルを使用している場合は、App Groupがそれらのファイルで上書きまたは省略されていないことを確認してください。
4

最小デプロイメントターゲットが一致することを確認する

NSEターゲット > General > Minimum Deploymentsを選択します。この値はメインアプリターゲットの最小デプロイメントと一致する必要があります。不一致は、特定のOSバージョンでNSEが実行されない原因になる可能性があります。
5

"Copy only when installing"のチェックを外す

メインアプリターゲット > Build Phases > Embed App Extensionsを選択します。“Copy only when installing”がチェックされていないことを確認してください。チェックされている場合、NSEは開発ビルド時に組み込まれないため、テスト時に実行されません。
6

Info.plistのNSExtension値を確認する

NSEターゲット > Infoタブを選択し、NSExtensionキーを展開します。次が含まれていることを確認してください:
<key>NSExtensionPointIdentifier</key>
<string>com.apple.usernotifications.service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).NotificationService</string>
NSEがObjective-Cで書かれている場合は、$(PRODUCT_MODULE_NAME).NotificationServiceの代わりにNotificationServiceを使用してください。
7

mutable-contentが設定されていることを確認する

OneSignalはプッシュペイロードに自動的にmutable-content: 1を設定します。これにより、iOSがNSEを呼び出すよう指示されます。REST APIでプッシュを送信する場合は、mutable_content: falseを明示的に設定していないことを確認してください。mutable-contentがないと、iOSはNSEを実行せず、配信確認はトリガーできません。
8

NSEが実行されていることをテストする

OneSignal呼び出しの前にdidReceive内に一時的にこの行を追加します:
bestAttemptContent.body = "[Modified] " + bestAttemptContent.body
テストプッシュを自分に送信します。通知の本文が[Modified]で始まる場合、NSEは正しく実行されています。そうでない場合は、上記の手順を見直してください — NSEは呼び出されていません。テスト後にこの行を削除してください。Xcode Consoleログを使用した高度なNSEデバッグについては、iOS Notification Service Extensionのデバッグを参照してください。

Android

Web

  • Safariはサポートされていません。
  • 他のブラウザの場合、v16 SDKへの移行が完了していることを確認してください:
    • 正しいSDK初期化:
      <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
      
    • 正しいService Worker参照:
      importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
      

よくある質問

配信確認の数が少ないまたは欠落しているのはなぜですか?

最も一般的な原因は、設定の問題(特にiOS)、非アクティブなデバイス、プラットフォームの制限です。
  1. iOS設定の誤り: Notification Service ExtensionまたはApp Groupが欠落または不正です。上記のiOS配信確認のトラブルシューティングを参照してください。
  2. 非アクティブまたは放棄されたデバイス: オフラインまたは使用されていないデバイスは、プッシュを受信したり配信確認イベントを送信したりしません。下記の非アクティブデバイスの処理方法は?を参照してください。
  3. プラットフォームの制限: HuaweiのmessageタイプとSafariは配信確認をサポートしていません。
  4. Androidの強制終了: 一部のデバイスメーカーはアプリをスワイプして閉じることを強制終了として扱い、SDKイベントが停止します。モバイルプッシュが表示されないガイドを参照してください。

非アクティブデバイスの処理方法は?

オフラインまたは放棄されたデバイスは、プッシュ通知を受信したり配信確認イベントを送信したりしません。これはユーザーがデバイスを交換または放棄した場合によく発生します。 非アクティブユーザーを再エンゲージするには:
  • Audience Activityを使用して、配信を確認しなかったユーザーに再送信します。
  • Last Sessionに基づいてセグメントを作成します(例:90日以上非アクティブ)。
    • 再エンゲージメントJourneyと組み合わせて、取り戻します。
    • 定期的に非アクティブユーザーをターゲットにして、到達不可能なデバイスを整理します。
OneSignalがサブスクリプションステータスを更新する方法の詳細については、プッシュサブスクリプションステータスはいつ更新されますか?を参照してください。

確認済みと表示されているのに、デバイスに表示されないのはなぜですか?

配信確認イベントは、デバイスがプッシュペイロードを受信したことを意味します。まれに、通知が表示されない場合があります。 考えられる原因:
サポートが必要ですか?サポートチームとチャットするか、support@onesignal.comにメールしてください以下を含めてください:
  • 発生している問題の詳細と再現手順(利用可能な場合)
  • OneSignal App ID
  • 該当する場合は、External IDまたはSubscription ID
  • 該当する場合は、OneSignalダッシュボードでテストしたメッセージのURL
  • 関連するログまたはエラーメッセージ
お気軽にお問い合わせください!