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

# 通知トレイの管理

> Android および iOS の通知トレイにおける OneSignal モバイルプッシュ通知の動作：クリックと却下の処理、復元された通知、バッジ、プログラムによる通知のクリア、サービス拡張機能。

このガイドでは、プッシュ通知がデバイスに表示された後に何が起こるかを理解し、制御する方法を説明します：クリックと却下で何が起こるか、Android が通知を再表示するタイミング、バッジが同期される仕組み、そしてアプリコードからトレイを管理できる SDK ツールについてです。

このページはモバイルプッシュ（Android および iOS）を対象としています。Web プッシュの動作については、[Web プッシュ通知の動作](./push)を参照してください。

***

## トレイ内の通知ライフサイクル

デバイスに表示されたすべての OneSignal 通知は SDK によって追跡されます。次に何が起こるかによって、その通知が再表示される可能性があるかどうかが決まります：

| イベント                                                                          | 何が起こるか                                                                                                        | 再表示される可能性は？                                            |
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| **ユーザーがクリックする**                                                               | トレイから削除され、クリック済みとしてマークされ、[クリックリスナー](./mobile-sdk-reference#addclicklistener-push)が発火し、起動 URL またはインテントが実行されます。 | いいえ                                                    |
| **ユーザーが却下する**（スワイプまたは「すべて消去」）                                                 | 却下済みとしてマークされます。                                                                                               | いいえ                                                    |
| **アプリが [OneSignal SDK メソッド](#clearing-notifications-programmatically)でクリアする** | トレイから削除され、却下済みとしてマークされます。                                                                                     | いいえ                                                    |
| **アプリが Android のネイティブ `NotificationManager` でキャンセルする**                        | トレイから削除されますが、却下済みとしてマークされ**ません**。                                                                             | はい、Android では次回のアプリ再起動時に復元されます                         |
| **Android が強制削除する**（デバイスの再起動、アプリの更新、強制終了）                                     | ユーザーの操作なしに OS によって削除されます。                                                                                     | はい、[復元された通知](#restored-notifications-android)を参照してください |

<Warning>
  Android では、Android のネイティブな `NotificationManager.cancel()` や `cancelAll()` の代わりに、常に OneSignal SDK メソッドで通知をクリアしてください。ネイティブ API でキャンセルされた通知は却下済みとしてマークされないため、次回アプリが再起動したときに SDK がそれらを復元します。
</Warning>

***

## クリックと却下の動作

通知を**クリック**すると、アプリ（または通知の起動 URL）が開き、通知がトレイから削除され、通知ペイロードとクリックされたアクションボタン ID を伴って [`addClickListener()`](./mobile-sdk-reference#addclicklistener-push) コールバックが発火します。クリックされた通知がグループに属している場合、SDK はグループサマリーを更新または削除します。クリックされた通知が復元されることはありません。

通知を**却下**する（スワイプで消す、またはトレイの「すべて消去」をタップする）と、却下済みとしてマークされ、バッジカウントとグループサマリーが更新されます。却下された通知が復元されることはありません。SDK は却下リスナーを提供していません。却下は内部的に追跡されます。

アプリがフォアグラウンドにある間に表示される通知は、まず[フォアグラウンドライフサイクルリスナー](./mobile-sdk-reference#addforegroundlifecyclelistener-push)を通過するため、そこで表示を防ぐことができます。

***

## 復元された通知（Android）

Android は、ユーザーの操作なしに通知を強制削除することがあります：デバイスの再起動、アプリの更新、強制終了（一部デバイスの積極的なバッテリーマネージャーを含む）などの場合です。Android SDK は、次回アプリがコールドスタートしたときに、影響を受けた通知を自動的に再表示（復元）します。これにより、ユーザーが見たり却下したりしなかった配信済みメッセージが失われることはありません。

復元された通知は、低重要度の [Restored カテゴリ](./android-notification-categories#restored)でサイレントに再表示されます。クリックも却下もされておらず、TTL の範囲内にあり、過去 7 日以内に受信された通知のみが、最大 49 件まで復元されます。

対象となる条件と制御方法の詳細は、[復元された通知（Android）](./osnotification-payload#restored-notifications-android)にあります。復元を減らすには、送信時に短い `ttl` を使用するか、消費済みの通知を[以下の SDK メソッド](#clearing-notifications-programmatically)でクリアしてください。iOS には復元の動作はありません。

***

## バッジの動作

**iOS** では、バッジは通知ペイロード（`ios_badgeType` と `ios_badgeCount`）によって設定され、サービス拡張機能がカウントを正確に更新できるように App Group が必要です。デフォルトでは、SDK はアプリを開いたときにバッジをクリアします。

**Android** では、アプリアイコンのバッジはトレイ内のアクティブな OneSignal 通知の数を反映し、[通知カテゴリ](./android-notification-categories)を通じて管理されます。SDK は、通知が表示、却下、クリック、またはクリアされたときにカウントを自動的に更新し、`clearAllNotifications()` を呼び出すと `0` にリセットします。

セットアップ、プラットフォームごとのオプション、トラブルシューティングについては、[バッジ](./badges)を参照してください。

***

## プログラムによる通知のクリア

通知のクリアは、アプリのライフサイクルイベントではなく、その内容がアプリ内で消費されたときに行ってください。一般的なパターン：

* **コンテンツ消費に伴う同期**：ユーザーが通知の指す画面（受信ボックス、メッセージセンター、アクティビティフィード）を開いたため、通知が不要になった場合。すべてをクリアするか、一部のコンテンツのみが消費された場合はターゲット指定のメソッドを使用します。
* **ログアウト**：前のユーザーの通知が次のユーザーに見えないよう、すべてをクリアします。

「トレイをきれいに保つ」ためにアプリの起動時やフォアグラウンド復帰のたびにクリアするのは避けてください。トレイ内の通知は再エンゲージメントを促進するものであり、クリアするとその入口が失われます。通知の蓄積を管理したい場合は、送信時に `collapse_id` を使用して通知を積み重ねる代わりに置き換えるか、より短い TTL を使用して未配信の通知を期限切れにしてください。

### `clearAllNotifications()`

アプリの通知をトレイから削除し、バッジカウントを `0` にリセットします。Android では、OneSignal が作成した通知のみが削除され、復元されないように却下済みとしてマークされます。iOS では、ローカル通知や他のプロバイダーからのプッシュを含む、アプリの配信済み通知が**すべて**削除されます。[完全なメソッドリファレンス](./mobile-sdk-reference#clearallnotifications)を参照してください。

<Note>
  復元された通知を防ぐためにアプリ起動時にクリアする場合、クロスプラットフォームアプリでは呼び出しを Android に限定してください。iOS では、ローカル通知や他のプロバイダーからのプッシュも削除されます。
</Note>

### `removeNotification()` と `removeGroupedNotifications()`（Android）

Android 通知 ID で単一の通知を削除するか、グループキーでグループ内のすべての通知を削除します。削除された通知は却下済みとしてマークされ、復元されません。複数の会話のうちの 1 つなど、トレイ内のコンテンツの一部のみが消費された場合に使用してください。[メソッドリファレンス](./mobile-sdk-reference#removenotification-removegroupednotifications-android)を参照してください。

***

## 一定時間後に通知を自動的に却下する

表示された通知を一定時間後に削除する送信時パラメーターはありません。可能なことはプラットフォームによって異なります：

* **Android 8.0（API 26）以降**：[通知サービス拡張機能](./service-extensions)で `setTimeoutAfter()` を使用してタイムアウトを設定します。タイムアウトが経過すると、Android は通知をシェードから削除します。API 26 未満のデバイスでは、この呼び出しは無視され、ユーザーが操作するまで通知が残ります。
* **iOS**：サポートされていません。iOS には配信済み通知を自動的に期限切れにする方法はありません。最も近い選択肢は、[`collapse_id`](./push#collapse-id-mobile-push) を使用して新しい通知で置き換えるか、後続のプッシュが届いたときに Apple の [`removeDeliveredNotifications(withIdentifiers:)`](https://developer.apple.com/documentation/usernotifications/unusernotificationcenter/removedeliverednotifications\(withidentifiers:\)) を使用して Notification Service Extension から削除することです。

<CodeGroup>
  ```kotlin Kotlin theme={null}
  class NotificationServiceExtension : INotificationServiceExtension {
      override fun onNotificationReceived(event: INotificationReceivedEvent) {
          event.notification.setExtender { builder ->
              // Remove this notification from the shade after 10 minutes (API 26+ only)
              builder.setTimeoutAfter(10 * 60 * 1000L)
          }
      }
  }
  ```

  ```java Java theme={null}
  public class NotificationServiceExtension implements INotificationServiceExtension {
      @Override
      public void onNotificationReceived(INotificationReceivedEvent event) {
          event.getNotification().setExtender(builder ->
              // Remove this notification from the shade after 10 minutes (API 26+ only)
              builder.setTimeoutAfter(10 * 60 * 1000L)
          );
      }
  }
  ```
</CodeGroup>

コードで固定するのではなくメッセージごとにタイムアウトを設定するには、[`additionalData`](./osnotification-payload) で時間を送信し、サービス拡張機能内でイベントから読み取ってください。

<Note>
  `setTimeoutAfter()` で削除された通知はシステムによって却下されるため、OneSignal SDK はそれを復元しません。これを `ttl` と混同しないでください。`ttl` は未配信のメッセージがオフラインのデバイスを待つ時間を制御するもので、表示済みの通知を削除することはありません。
</Note>

***

## サービス拡張機能による通知のカスタマイズ

[サービス拡張機能](./service-extensions)は通知が表示される前に実行され、外観の変更、バックグラウンドデータの受信、表示の完全な抑制が可能です：

* **Android** では、`INotificationServiceExtension` を実装し、`setExtender()` を使用して `NotificationCompat` オプションを変更するか、`event.preventDefault()` を呼び出して表示を抑制します。
* **iOS** では、リッチメディア、バッジの増分、配信確認のために `UNNotificationServiceExtension`（セットアップ時に作成される `OneSignalNotificationServiceExtension`）を使用します。

<Warning>
  Android では、サービス拡張機能は[復元された通知](#restored-notifications-android)に対しても実行されます。`onNotificationReceived` 内の副作用（アナリティクス呼び出し、API リクエスト、データベース書き込み）は通知が復元されるときに再実行され、`setChannelId()` などのエクステンダーによる変更も復元に適用されるため、復元時に大きな音で通知される可能性があります。アラートオプションが新規に配信された通知にのみ適用されるように拡張機能を設計してください。
</Warning>

***

## FAQ

### Android でアプリを開くと古い通知が再表示されるのはなぜですか？

Android SDK は、デバイスの再起動、アプリの更新、強制終了などの後に、トレイから強制削除された通知を復元します。ユーザーが却下またはクリックした通知は復元されません。対象条件と制御方法については、[復元された通知（Android）](./osnotification-payload#restored-notifications-android)を参照してください。

### TTL の期限が切れると、トレイから通知が削除されますか？

いいえ。TTL は未配信のメッセージがオフラインのデバイスを待つ時間を制御するもので、Android では復元可能な通知の範囲も制限します。すでにトレイに表示されている通知を削除することはありません。表示済みの通知を削除するには、[クリアメソッド](#clearing-notifications-programmatically)を使用してください。Android で一定時間後に削除するには、[一定時間後に通知を自動的に却下する](#dismiss-notifications-automatically-after-a-delay)を参照してください。

### トレイをクリアせずにバッジだけをクリアできますか？

iOS では可能です：バッジはアプリを開いたときに自動的にクリアされ（無効化していない限り）、トレイの内容はそのまま残ります。Android では、バッジはトレイ内のアクティブな通知を反映するため、通知とは独立して設定することはできません。[バッジ](./badges)を参照してください。

### ユーザーが通知を却下したときのリスナーはありますか？

いいえ。SDK は却下された通知が復元されないように内部的に却下を追跡しますが、却下イベントは公開していません。[クリックリスナー](./mobile-sdk-reference#addclicklistener-push)はクリックのみを対象としています。

***

<Columns cols={3}>
  <Card title="モバイル SDK リファレンス" icon="code" href="./mobile-sdk-reference">
    通知メソッドとリスナーの完全なリファレンス。
  </Card>

  <Card title="OSNotification ペイロード" icon="brackets-curly" href="./osnotification-payload">
    ペイロードフィールドと復元された通知のルール。
  </Card>

  <Card title="モバイルサービス拡張機能" icon="puzzle-piece" href="./service-extensions">
    表示前に通知を傍受してカスタマイズします。
  </Card>
</Columns>
