> ## 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.

# データとバックグラウンド通知

> iOSおよびAndroidで、可視メッセージを表示せずにデータを同期したりバックグラウンドタスクをトリガーするサイレントプッシュ通知を送信します。

## サイレント通知とは？

サイレント通知を使用すると、可視メッセージを表示したり音を鳴らしたりすることなく、アプリを起動してバックグラウンドタスク（同期やデータの更新など）を実行できます。

iOSでは、これらを**バックグラウンド通知**と呼び、Androidでは**データ通知**として知られています。これらはまとめてサイレントプッシュと呼ばれ、通常の可視通知とは異なる動作をします。

### 制限事項

* **アプリがサイレントプッシュを受信できない場合**：
  * **iOS**：アプリスイッチャーからスワイプして消した場合など、ユーザーがアプリを閉じた場合。（[Appleサポート](https://support.apple.com/en-us/HT201330)を参照）。
  * **Android**：デバイス設定を通じてアプリが強制終了された場合、またはスワイプして消したときに一部のメーカーによって自動的に終了された場合。（[詳細はこちら](./notifications-show-successful-but-are-not-being-shown#android-app-is-force-stopped)）。
* **配信は保証されません**：
  * AppleとGoogleの両方がサイレント通知を*ベストエフォート*として扱います。iOSは低電力モード、バックグラウンドアプリの更新がオフ、またはユーザーがアプリを閉じた場合に配信を遅延またはドロップする可能性があります。AndroidはDozeまたはOEMの省電力ルールの下で配信を制限またはバッチ処理する可能性があります。
  * このため、**サイレント通知は重要な更新には使用しないでください**。
* **購読ユーザーのみ**：OneSignal SDKは購読している[サブスクリプション](./subscriptions)にのみデータ通知を送信します。非購読ユーザーに到達するには、[この回避策](https://github.com/OneSignal/OneSignal-iOS-SDK/issues/302)に従ってください。
* **クロスプラットフォームSDKの限定的なサポート**：
  * サイレント通知は、ネイティブコード（AndroidのJava/Kotlin、iOSのSwift/Obj-C）で処理する必要があります。
  * iOSは[`application:didReceiveRemoteNotification:fetchCompletionHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application)の実装が必要です。
  * Androidは[通知サービス拡張機能](./service-extensions)の実装が必要です。

***

## OneSignalからサイレント通知を送信

OneSignalからサイレント通知を送信するには、次の手順に従います：

<Steps>
  <Step title="可視コンテンツを省略">
    メッセージから可視テキストまたはタイトルを削除します。これには次が含まれます：

    * **API**：[Create notification](/reference/create-message) APIリクエストの`contents`、`headings`、`subtitle`。
    * **Dashboard**：Message、Title、Subtitle
  </Step>

  <Step title="content_availableを設定">
    * **API**：`content_available`を`true`に設定します。
    * **Dashboard**：「Send to Apple iOS」の下の**Content available**をチェックします。これはすべてのプラットフォームに適用され、システムにメッセージが送信されていないことを伝えるだけです。
  </Step>

  <Step title="通知にデータを追加">
    * **API**：`data`パラメータを使用します。
    * **Dashboard**：**Additional Data**フィールドを使用します。
  </Step>
</Steps>

### APIペイロードの例

```bash theme={null}
curl -X POST https://api.onesignal.com/notifications \
  -H "Authorization: Key YOUR_APP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "app_id": "YOUR_APP_ID",
    "include_aliases": { "external_id": ["user-123"] },
    "target_channel": "push",
    "content_available": true,
    "data": {
      "action": "sync_data",
      "version": "2"
    }
  }'
```

***

## プラットフォーム固有の設定

### iOSバックグラウンド通知の設定

バックグラウンド通知を処理するには、iOSアプリのXcodeで**Background Modes > Remote Notifications**機能を有効にする必要があります。これは通常、[モバイルSDKセットアップ](./mobile-sdk-setup)に従った場合に含まれています。

通知を処理するには、`AppDelegate`メソッド[`application(_:didReceiveRemoteNotification:fetchCompletionHandler:)`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application)を実装します。

Appleドキュメント：

* [Pushing Background Updates to Your App](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app?language=objc)
* [Generating a Remote Notification](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)

<Warning>
  ユーザーがアプリを閉じた場合（アプリスイッチャーからスワイプして消した場合）、iOSは通知を配信しません。

  そのような場合は、可視の`contents`メッセージを含め、[`UNNotificationServiceExtension.didReceive`](./service-extensions#ios-notification-service-extension)でデータを処理します。
</Warning>

***

### Androidデータ通知の設定

[通知サービス拡張機能](./service-extensions)を使用してAndroidでデータ通知を処理します。

これにより次が可能になります：

* アプリが強制終了されていない限り通知を処理
* 通知の表示または抑制方法をカスタマイズ

Androidドキュメント：

* [FCMデータメッセージ](https://firebase.google.com/docs/cloud-messaging/concept-options#data_messages)
* [DozeとApp Standbyへの最適化](https://developer.android.com/training/monitoring-device-state/doze-standby)

<Warning>
  アプリが強制停止されている場合（デバイス設定またはOEMの省電力最適化によって）、Androidは通知を配信しません。[Androidの強制停止動作](./notifications-show-successful-but-are-not-being-shown#android-app-is-force-stopped)を参照してください。
</Warning>

***

## VoIP通知の送信

VoIP通知はサポートされていますが、標準のOneSignal SDKの外で追加の構成が必要です。OneSignalはVoIPトークンを自動的に登録しません。

<Card title="VoIP通知セットアップガイド" icon="phone" href="./voip-notifications">
  iOSでリアルタイム通話用のVoIPプッシュ通知を設定します。
</Card>

***

## FAQ

### サイレント通知をアンインストールまたは購読解除の検出に使用できますか？

技術的には可能ですが、信頼性がありません。上記の[制限事項](#制限事項)セクションで説明したように、サイレント通知の配信は保証されていません。

代わりに：

* 少なくとも月に1回、すべてのユーザーに可視通知（コンテンツを含む）を送信してください。
* オプションで補足チェックとしてサイレント通知を送信してください。

購読ステータスの変更の処理に関する詳細については、[サブスクリプション](./subscriptions)ガイドを参照してください。

### 確認配信はサイレント通知で機能しますか？

確認配信はサイレント通知では機能しません。

### サイレント通知を使ってリーチ可能なユーザー数を測定できますか？

いいえ、信頼性がありません。サイレント通知は配信が保証されていません。

1. **配信は保証されない** — AppleとGoogleの両方がサイレント通知をベストエフォートとして扱い、遅延またはドロップする可能性があります。たとえば、アプリが閉じられている（強制終了）場合、iOSはドロップし、AndroidとiOSは省電力ルールの下で制限します。

2. **配信は確認されない** — 確認配信はサイレント通知では機能しないため、どのユーザーが実際にプッシュを受信したかを知る方法がありません。

リーチ可能なユーザーを測定するには、可視通知を送信し、[Analytics](./analytics-overview)で配信指標を追跡してください。

***

<Columns cols={2}>
  <Card title="サービス拡張機能" icon="puzzle-piece" href="./service-extensions">
    iOSとAndroidでネイティブコードで通知処理を行います。
  </Card>

  <Card title="サブスクリプション" icon="address-book" href="./subscriptions">
    サブスクリプションの種類とユーザーとの接続方法を理解します。
  </Card>

  <Card title="メッセージ作成API" icon="code" href="/reference/create-message">
    サイレントプッシュを含む通知をプログラムで送信します。
  </Card>
</Columns>
