# Push Notifications SDK

> Register for Push Notifications and configure the SDK for your platform.

Push Notifications SDK を使用して、画像付きのリッチプッシュ通知を含む、プッシュ通知キャンペーンをユーザーに送信します。

## プラットフォームサポート##platform-support

この SDK では、iOS と Android の両方 (iOS 10+ および Android SDK >= 26 (Oreo)) がサポートされます。

## クイックスタート##quick-start

この SDK には、Push Notifications について登録するためのサンプルスクリプトが含まれています。これをプロジェクトに追加し、Project Settings (プロジェクト設定) の下のエディターで関連する項目を設定します。

## Push Notifications への登録##registering-for-push-notifications

Push Notifications について登録するには、以下のステップが必要です。

1. [エディターに設定](./get-started.md) を入力します。これらは、**Project Settings** (プロジェクト設定) > **Services** (サービス) > **Push Notifications** にあります。
2. [Unity Services を初期化します](./get-started.md)。これで、必須の分析イベントが Unity Analytics に送信されるようになります。また、必須のイベントが正しく送信されるように、[プライバシーフロー](/analytics/privacy-and-consent/manage-data-privacy.md) も実装する必要があります。
3. ゲームの起動コード内で通知について登録し、通知が届かないことがないようにします。ただし、最初の登録時にパーミッションリクエストがユーザーに表示されるため、この呼び出しがゲーム内の適切な場所で行われるようにしてください。SDK は、画像、タイトル、メッセージ本文など、通知コンテンツの表示を処理します。

> **Note:**
>
> **ノート:** Analytics は、Push Notification データに関連するイベントが正しく送信されるために必要です。プライバシー同意を処理するには、詳細について Analytics のドキュメントを参照してください。

コードサンプル:

```cs
using Unity.Services.Analytics;
using Unity.Services.Core;
using Unity.Services.PushNotifications;
...

await UnityServices.InitializeAsync();

bool userGaveConsent = ...;

if (userGaveConsent)
{
	AnalyticsService.Instance.StartDataCollection();
}

try
{
    string pushToken = await PushNotificationsService.Instance.RegisterForPushNotificationsAsync();

    PushNotificationsService.Instance.OnNotificationReceived += notificationData =>
    {
        Debug.Log("Received a notification!");
    };
}
catch (Exception e)
{
    Debug.Log("Failed to retrieve a push notification token.");
}
```

### 通知受信コールバック##notification-received-callbacks

通知が受信されたときに C# イベントコールバックを受信するようにデリゲートを登録し、その時点でカスタム動作を実行できます。このためには、上記のサンプルに示すように、デリゲート/メソッドコールバックを `PushNotifications.OnNotificationReceived` に追加します。

### Push Notifications の設定##push-notifications-settings

この SDK が正しく動作するにはいくつかの設定が必要です。一部の設定は、設定名からわかるように特定のプラットフォームのみで使用されます。Android (Firebase) では以下のように設定できます。

これらの設定は、**Unity Editor** (Unity エディター) > **Edit** (編集) > **Project Settings** (プロジェクト設定) > **Services** (サービス) > **Push Notifications** にあります。以下のすべてのフィールドの値は、Firebase ダッシュボードの Settings ページにあります。

* **FirebaseWebApiKey**: Android の Firebase Cloud Messaging API で使用される Firebase プロジェクトの "ウェブ API キー"。プロジェクトについてこれが表示されない場合は、前もって Firebase の認証を有効にする必要があるかもしれません。
* **FirebaseProjectNumber**: Android の Firebase Cloud Messaging で使用される “プロジェクト番号”。
* **FirebaseAppID**: Android の Firebase Cloud Messaging API で使用される Firebase アプリの "App ID"。
* **FirebaseProjectID**: Android の Firebase Cloud Messaging API で使用される Firebase プロジェクトの "プロジェクト ID"。

> **Note:**
>
> Android アプリを Firebase 内で設定していない場合は、もう 1 つ追加する必要があります。"アプリの追加" ウィザードでは、Firebase にアプリを作成するだけでなく、直後に Firebase SDK を統合する方法の手順が示されます。**Firebase SDK をインストールする必要がない** ことに注意してください。ファイルや Firebase SDK をプロジェクトに追加するためのすべてのステップを省いて差し支えありません。


**Frame:**
![](/api/media?file=/push-notifications/media/images/project-settings.png)

これらは、**Edit** (編集) > **Project Settings** (プロジェクト設定) > **Services** (サービス) > **Push Notifications** で設定されます。

新しいプロジェクトについては Cloud Messaging API を有効にする必要があります。

1. 無効になっている Cloud Messaging API (Legacy) の横の 3 つのドットを選択します。
2. ENABLE Cloud Messaging API (Legacy) を選択します。
3. Firebase コンソールの情報を更新します。


**Frame:**
![](/api/media?file=/push-notifications/media/images/cloud-messaging.png)

### Analytics /Analytics##analytics

SDK によって 2 つの Analytics イベントが記録されます。

* **notificationServices:** このイベントは、新しいトークンがクライアントに登録されるたびに記録されます。これにはプッシュトークンが含まれます。このトークンをバックエンドサービスに登録して、Unity Dashboard から通知を送信するために使用されます。これは、この製品が適切に機能するために必要です。
* **notificationOpened:** このイベントは、通知がユーザーによって開封されるたびに記録されます。これには、ユーザーが該当するキャンペーンやコホートに関するデータと、アプリが通知から起動されたかどうかに関するデータが含まれます。

#### Analytics 専用モード##analytics-only-mode

> **Warning:**
>
> このセクションは、Unity Dashboard Push Notification サービスを別の Push Notification 実装と併用しようとする場合にのみ適用されます。ほとんどのユーザーにとって、このセクションは必要ありません。また、製品の機能が減るため推奨されません。

必要な場合には、この SDK を既存のプッシュ通知サービスと統合できます。このためには、前述のように登録メソッドを呼び出さないでください。その代わりに、`PushNotificationsService.Instance.Analytics` の 2 つのメソッドを既存の実装と併用してください。

`RecordPushTokenUpdated` を呼び出す必要があるのは、デバイスについて新しいプッシュトークンを受け取ったときです。OS によってアプリのライフサイクルの複数の時点で新しいトークンが作成される可能性があるため、起動時だけではなく、トークンが変化したときに常にこれを呼び出します。呼び出しの完全な形式は `PushNotificationsService.Instance.Analytics.RecordPushTokenUpdated(token);` です。

`RecordNotificationOpened` を呼び出す必要があるのは、通知が開封されたときです。これは、ディクショナリ (通知ペイロードが含んでいたデータ) とブーリアンフラグを使用して、アプリが通知から起動されたかどうかを示します。呼び出しの完全な形式は `PushNotificationsService.Instance.Analytics.RecordNotificationOpened(notificationData);` です。

こうすることで、Unity Dashboard から通知を送信したりスケジュール設定したりできるようになります。ただし、これは、実装している他のプッシュ通知実装に大幅に依存しており、画像やその他のコンテンツが通知に含まれなくなることがあります。このため、可能な場合には、この SDK のみを Push Notifications ソリューションとして統合する、標準設定の使用を強く推奨します。

## SDK インテグレーションのテスト##testing-the-sdk-integration

Push Notifications SDK インテグレーションをテストするには、アプリ内で以下のステップを実行します。

> **Note:**
>
> ここでは、[使用開始](./get-started.md) のステップに従う必要があります。

1. アプリ内で、PushNotificationsService トークンをフェッチし、\`Debug.Log\` を使用してそれをログに書き込みます。

2. ターゲットプラットフォームに応じて、[Android](https://docs.unity3d.com/2021.2/Documentation/Manual/android-debugging-on-an-android-device.html) 用のデバッグガイドまたは [iOS](https://docs.unity3d.com/2021.2/Documentation/Manual/iphone-BuildProcess.html) 用のビルドと実行のガイドに従い、アプリを実行します。

3. アプリのログを読み取ってロギングされたトークンをフェッチします。

   1. **Android の場合**: [Android Logcat](https://docs.unity3d.com/Packages/com.unity.mobile.android-logcat@latest) パッケージを使用します。
   2. **iOS の場合**: アプリの実行時に XCODE 内のログを調べます。

4. UGS ダッシュボード内で、既存の Push Notification キャンペーンに移動するか、新しいダミーのキャンペーンを作成します。

5. Content (コンテンツ) ステップで、必要に応じて通知を作成し、Test on Device (デバイスでのテスト) に移動します。


**Frame:**
![](/api/media?file=/push-notifications/media/images/test-on-device.png)

6. ターゲットデバイスを選択し、フェッチしたトークンを入力します。


**Frame:**
![](/api/media?file=/push-notifications/media/images/send-test.png)

7. **Send** (送信) を選択し、デバイスが通知を受信するかどうかを確認します。

## External Dependency Manager for Unity (EDM4U) のサポート##external-dependency-manager-for-unity-edm4u-support

> **Note:**
>
> Push Notifications と併用して EDM4U または MDR を統合しているユーザーに適用されます。

他の SDK または Unity パッケージ (Google の Firebase Unity パッケージなど) は、[External Dependency Manager for Unity (EDM4U)](https://github.com/googlesamples/unity-jar-resolver) または Mobile Dependency Resolver (MDR) を使用して、Unity プロジェクト内の依存関係を解決します。

Push Notifications SDK は、Unity プロジェクト内の依存関係を解決するために EDM4U または MDR を使用する必要が **ありません**。また、デフォルトでは、EDM4U または MDR を再配布したり使用したりすることもありません。

ただし、バージョン `3.0.1-pre.1` 以降では、EDM4U または MDR が使用される場合に、Push Notifications SDK は、自動生成される `Assets/Push Notifications/Editor/Android` ディレクトリ内でそれらが使用できるように依存関係ファイル (PushSDKDependencies.xml) を生成してそれらを統合します。

アプリケーションをビルドする前に、`Resolve` (解決) または `Force Resolve` (強制解決) (いずれも **Assets > External Dependency Manager > Android Manager** (アセット > 外部依存関係マネージャー > Android マネージャー) にある) を実行して、Push Notifications SDK の依存関係が解決されるようにしてください。これらの依存関係が解決されたことを確認するには、`Display Libraries` (ライブラリの表示) オプション (**Assets > External Dependency Manager > Android Manager > Display Libraries** (アセット > 外部依存関係マネージャー > Android マネージャー > ライブラリの表示)) を使用します。


**Frame:**
![](/api/media?file=/push-notifications/media/images/edm4u-options.png)

以下の行が表示されるはずです。

```text
implementation 'com.google.firebase:firebase-messaging-ktx:22.0.0' // Assets/Push Notifications/Editor/Android/PushSDKDependencies.xml:9
```

他のパッケージでも同一の依存関係が必要な場合には、コメントが異なる可能性があることに注意してください。その場合には、EDM4U によって、依存関係が抽出された場所のすべてのファイルが隣接するコメントにリスト表示されます。依存関係ファイルのパス (`Assets/Push Notifications/Editor/Android/PushSDKDependencies.xml:9`) がコメント内に表示される限り、EDM4U/MDR が依存関係ファイルを検出して読み取りに成功したことを確認できます。

この行が表示 **されない** 場合は、依存関係ファイルが `Assets/Push Notifications/Editor/Android` ディレクトリに存在することを確認し、`Force Resolve` (強制解決) オプション (**Assets > External Dependency Manager > Android Manager > Force Resolve** (アセット > 外部依存関係マネージャー > Android マネージャー > 強制解決)) を再び試行してください。

依存関係ファイルが生成されていない場合は、プロジェクトを再び開きます。このプロセスで依存関係ファイルが生成されるはずです。
