> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 配信確認

> 配信確認はOneSignalを通じて送信されたプッシュ通知をデバイスが受信した時を追跡します。iOS、Android、Huawei、Webの要件、プラットフォーム制限、トラブルシューティングについて説明します。

## 概要

配信確認は、デバイスがOneSignalを通じて送信されたプッシュ通知を実際に**受信**したときを追跡します。デバイス上のOneSignal SDKがプッシュを受信すると、通知IDとデバイスの[サブスクリプションID](./subscriptions)を含む確認イベントをOneSignalに送り返します。これにより、どのサブスクリプションがどの通知を受信したかを正確に確認できます。

OneSignalダッシュボードでは、配信確認は[メッセージレポート](./push-notification-message-reports)で**確認済み**（または**受信済み**）として表示されます。すべての配信とエンゲージメントの指標については、[メトリクス用語集](./analytics-metrics-glossary)を参照してください。

<Frame caption="配信確認フロー">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=17ce8f50b8e92e0d368abe42865709c3" alt="配信確認フロー" width="800" height="667" data-path="images/docs/35ba167-analytics-ensure-confirmed-message-delivery_1.png" />
</Frame>

<Note>
  配信確認は「配信済み」とは異なります。プラットフォームプッシュサービス（APNs、FCM、ADM、HMS）は通知がサービスに受け付けられたかどうかを報告します — デバイスが実際に受信したかどうかではありません。配信確認はデバイス側の確認です。
</Note>

***

## 要件

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

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

**iOS**

* **Notification Service Extension**と**App Group**の両方のセットアップが必要です。
* APNsは、オフライン時に**アプリごとに1つのメッセージ**のみを保持します。オフライン中に複数のプッシュが送信された場合、最新のもののみが配信されます。

**Huawei**

* `data` [Huaweiメッセージタイプ](/reference/push-notification#body-huawei-msg-type)でのみサポートされています。
* `message`タイプの場合、Huaweiは自社のダッシュボードでのみ受信データを提供します。

**Web**

* Safariは配信確認を**サポートしていません**。

***

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

プッシュ通知がまったく届かない場合は、まず[通知が表示されない](./notifications-show-successful-but-are-not-being-shown)を参照してください。

### iOS

iOSでの配信確認には、2つのものが連携して機能する必要があります：

1. プッシュが届いたときにOneSignalコードを実行する**Notification Service Extension**（NSE）
2. メインアプリターゲットとNSEターゲットの間でデータを交換できるように共有される**App Group**

どちらかが欠落または誤設定されている場合、デバイスはプッシュを受信しますが、OneSignalに報告しません。

**iOS設定を確認する**

<Steps>
  <Step title="NSEターゲットが存在し正しいコードを持っていることを確認する">
    Xcodeで、プロジェクトターゲットの下に**OneSignalNotificationServiceExtension**ターゲットがリストされていることを確認してください。存在しない場合は、[iOS SDKセットアップのステップ2](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse)に従ってください。

    NSEの`NotificationService.swift`（または`.m`）ファイルを開きます。`didReceive(_:withContentHandler:)`内で`OneSignalExtension.didReceiveNotificationExtensionRequest`を呼び出す必要があります。ファイルにまだAppleのデフォルトテンプレートコードが含まれている場合は、[OneSignal NSEコード](./ios-sdk-setup#step-2-add-a-notification-service-extension-nse)に置き換えてください。
  </Step>

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

  <Step title="App Groupが両方のターゲットで正しく設定されていることを確認する">
    OneSignal SDKはApp Groupを使用してメインアプリとNSEの間でデータを共有します。設定方法は2つあります — お使いの設定に合うものを選択してください。

    1. **メインアプリターゲット > Signing & Capabilities > App Groups**を選択します。
    2. App Groupを確認します。

    App Groupが`group.YOUR_MAIN_APP_BUNDLE_ID.onesignal`（`YOUR_MAIN_APP_BUNDLE_ID`はメインアプリターゲットのバンドル識別子で、**General > Identity**で確認できます）の場合、デフォルトApp Groupタブに従ってください。そうでない場合は、カスタムApp Groupタブに従ってください。

    <Tabs>
      <Tab title="デフォルトApp Group - group.YOUR_MAIN_APP_BUNDLE_ID.onesignal">
        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識別子を持つ必要があります。
      </Tab>

      <Tab title="カスタムApp Group">
        App Group識別子が`group.YOUR_MAIN_APP_BUNDLE_ID.onesignal`形式に従っていない場合は、このオプションを使用してください。

        1. **メインアプリターゲット > Signing & Capabilities > App Groups**を選択します。
        2. カスタムApp Groupがリストされていることを確認します。
        3. メインアプリターゲットの`Info.plist`を選択し、次のキーを追加します：

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        `group.your-custom-group-name`を実際のApp Group名に置き換えてください。

        4. **NSEターゲット > Signing & Capabilities > App Groups**を選択します。
        5. **まったく同じ**カスタムApp Groupがリストされていることを確認します。欠落している場合は、**+ Capability > App Groups**から追加し、同じグループを選択します。
        6. NSEターゲットの`Info.plist`を選択し、次のキーを追加します：

        ```xml theme={null}
        <key>OneSignal_app_groups_key</key>
        <string>group.your-custom-group-name</string>
        ```

        `group.your-custom-group-name`を実際のApp Group名に置き換えてください。

        メインアプリターゲットとNSEターゲットは同じApp Group識別子を持つ必要があります。
      </Tab>
    </Tabs>

    <Warning>
      ビルド設定に`.xcconfig`ファイルを使用している場合は、App Groupがそれらのファイルで上書きまたは省略されていないことを確認してください。
    </Warning>
  </Step>

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

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

  <Step title="Info.plistのNSExtension値を確認する">
    **NSEターゲット > Infoタブ**を選択し、`NSExtension`キーを展開します。次が含まれていることを確認してください：

    ```xml theme={null}
    <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`を使用してください。
  </Step>

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

  <Step title="NSEが実行されていることをテストする">
    OneSignal呼び出しの前に`didReceive`内に一時的にこの行を追加します：

    ```swift theme={null}
    bestAttemptContent.body = "[Modified] " + bestAttemptContent.body
    ```

    テストプッシュを自分に送信します。通知の本文が`[Modified]`で始まる場合、NSEは正しく実行されています。そうでない場合は、上記の手順を見直してください — NSEは呼び出されていません。テスト後にこの行を削除してください。

    Xcode Consoleログを使用した高度なNSEデバッグについては、[iOS Notification Service Extensionのデバッグ](./service-extensions#debugging-the-ios-notification-service-extension)を参照してください。
  </Step>
</Steps>

### Android

* 通知が表示されない場合：[モバイルプッシュトラブルシューティング](./notifications-show-successful-but-are-not-being-shown)を参照してください。
* 通知は表示されるが配信確認が欠落している場合：カスタムAndroidサービス拡張がブロックしている可能性があります。[Androidサービス拡張ガイド](./service-extensions#android-service-extension)を確認してください。

### Web

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

***

## よくある質問

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

最も一般的な原因は、設定の問題（特にiOS）、非アクティブなデバイス、プラットフォームの制限です。

1. **iOS設定の誤り：** Notification Service ExtensionまたはApp Groupが欠落または不正です。上記の[iOS配信確認のトラブルシューティング](#ios)を参照してください。
2. **非アクティブまたは放棄されたデバイス：** オフラインまたは使用されていないデバイスは、プッシュを受信したり配信確認イベントを送信したりしません。下記の[非アクティブデバイスの処理方法は？](#非アクティブデバイスの処理方法は)を参照してください。
3. **プラットフォームの制限：** Huaweiの`message`タイプとSafariは配信確認をサポートしていません。
4. **Androidの強制終了：** 一部のデバイスメーカーはアプリをスワイプして閉じることを強制終了として扱い、SDKイベントが停止します。[モバイルプッシュが表示されないガイド](./notifications-show-successful-but-are-not-being-shown)を参照してください。

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

オフラインまたは放棄されたデバイスは、プッシュ通知を受信したり配信確認イベントを送信したりしません。これはユーザーがデバイスを交換または放棄した場合によく発生します。

非アクティブユーザーを再エンゲージするには：

* **Audience Activity**を使用して、配信を確認しなかったユーザーに再送信します。
* **Last Session**に基づいて[セグメント](./segmentation)を作成します（例：90日以上非アクティブ）。
  * [再エンゲージメントJourney](./journeys-examples#re-engagement-campaign)と組み合わせて、取り戻します。
  * 定期的に非アクティブユーザーをターゲットにして、到達不可能なデバイスを整理します。

OneSignalがサブスクリプションステータスを更新する方法の詳細については、[プッシュサブスクリプションステータスはいつ更新されますか？](./subscriptions#when-do-push-subscription-statuses-update)を参照してください。

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

配信確認イベントは、デバイスがプッシュペイロードを受信したことを意味します。まれに、通知が表示されない場合があります。

考えられる原因：

* **通知の見逃し：** [テストサブスクリプションを見つけて設定](./test-users)でテストプッシュを自分に送って確認します。
* **iOSのフォーカスモード：** 「おやすみモード」、「睡眠」、またはその他の[フォーカスモード](./ios-focus-modes-and-interruption-levels)は通知を遅延またはグループ化します。グループ化された通知を見ずに消してしまった可能性があります。
* **表示を抑制するアプリコード：**
  * [フォアグラウンドライフサイクルリスナー](./mobile-sdk-reference#addforegroundlifecyclelistener-push)または[Notification Service Extension](./service-extensions)の`event.preventDefault()`は通知の表示を停止します。
  * [`removeDeliveredNotifications(withIdentifiers:)`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removedeliverednotifications\(withidentifiers:\))または[`removeAllDeliveredNotifications()`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removealldeliverednotifications\(\))の呼び出しは通知が届いた後に削除します。
* **プッシュペイロード設定：**
  * `priority`が高に設定されていることを確認してください。[プッシュ優先度](./push#priority)を参照してください。
  * [`collapse_id`](./push#collapse_id)は同じIDを使用して古いプッシュを新しいプッシュに置き換えます。

***

<Info>
  サポートが必要ですか？

  サポートチームとチャットするか、`support@onesignal.com`にメールしてください

  以下を含めてください：

  * 発生している問題の詳細と再現手順（利用可能な場合）
  * OneSignal App ID
  * 該当する場合は、External IDまたはSubscription ID
  * 該当する場合は、OneSignalダッシュボードでテストしたメッセージのURL
  * 関連する[ログまたはエラーメッセージ](/docs/ja/capturing-a-debug-log)

  お気軽にお問い合わせください！
</Info>
