Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

Unityを使用してFirebaseCloudMessagingクライアントアプリを設定する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Unity でクロスプラットフォームの Firebase Cloud Messaging クライアント アプリを作成するには、 Firebase Cloud Messaging API を使用します。 Unity SDK は Android と Apple の両方で動作しますが、プラットフォームごとに追加の設定が必要です。

あなたが始める前に

前提条件

  • Unity 2019.1 以降をインストールします。以前のバージョンも互換性がある可能性がありますが、積極的にサポートされる予定はありません。 Unity 2019.1 のサポートは非​​推奨と見なされ、次のメジャー リリース以降は積極的にサポートされなくなります。

  • (iOS のみ)以下をインストールします。

    • Xcode 13.3.1 以降
    • CocoaPods 1.10.0 以降
  • Unity プロジェクトが次の要件を満たしていることを確認してください。

    • iOS の場合— iOS 11 以降を対象としています
    • Android の場合— API レベル 19 (KitKat) 以上を対象としています
  • デバイスをセットアップするか、エミュレーターを使用して Unity プロジェクトを実行します。

    • iOSの場合 —物理 iOS デバイスをセットアップしてアプリを実行し、次のタスクを完了します。

      • Apple Developer アカウントの Apple プッシュ通知認証キーを取得します。
      • XCode のApp > Capabilitiesでプッシュ通知を有効にします。
    • Androidの場合 —エミュレーターは、Google Play でエミュレーター イメージを使用する必要があります。

Unity プロジェクトをまだお持ちでなく、Firebase 製品を試してみたいだけの場合は、クイックスタート サンプルのいずれかをダウンロードできます。

ステップ 1: Firebase プロジェクトを作成する

Firebase を Unity プロジェクトに追加する前に、Firebase プロジェクトを作成して Unity プロジェクトに接続する必要があります。 Firebase プロジェクトについて詳しくは、 Firebase プロジェクトを理解するをご覧ください。

ステップ 2: アプリを Firebase に登録する

1 つ以上のアプリまたはゲームを登録して、Firebase プロジェクトに接続できます。

  1. Firebase コンソールに移動します。

  2. プロジェクト概要ページの中央にあるUnityアイコン ( ) をクリックして、セットアップ ワークフローを起動します。

    Firebase プロジェクトに既にアプリを追加している場合は、[アプリを追加] をクリックしてプラットフォーム オプションを表示します。

  3. 登録する Unity プロジェクトのビルド ターゲットを選択するか、両方のターゲットを同時に登録することを選択することもできます。

  4. Unity プロジェクトのプラットフォーム固有の ID を入力します。

    • iOSの場合 — Unity プロジェクトの iOS ID をiOS バンドル IDフィールドに入力します。

    • Androidの場合 — Android パッケージ名フィールドに Unity プロジェクトの Android ID を入力します。
      パッケージ名アプリケーション IDという用語は、しばしば同じ意味で使用されます。

  5. (オプション) Unity プロジェクトのプラットフォーム固有のニックネームを入力します。
    これらのニックネームは内部の便利な識別子であり、Firebase コンソールでのみ表示されます。

  6. [アプリを登録]をクリックします。

ステップ 3: Firebase 構成ファイルを追加する

  1. Firebase コンソールのセットアップ ワークフローで、プラットフォーム固有の Firebase 構成ファイルを取得します。

    • iOS の場合— [ GoogleService-Info.plist をダウンロード] をクリックします。

    • Android の場合— [ google-services.json をダウンロード] をクリックします。

  2. Unity プロジェクトのProjectウィンドウを開き、構成ファイルをAssetsフォルダーに移動します。

  3. Firebase コンソールに戻り、セットアップ ワークフローで [次へ] をクリックします。

ステップ 4: Firebase Unity SDK を追加する

  1. Firebase コンソールで、 Download Firebase Unity SDKをクリックし、SDK を適切な場所に解凍します。

    • Firebase Unity SDKはいつでも再ダウンロードできます。

    • Firebase Unity SDK はプラットフォーム固有ではありません。

  2. 開いている Unity プロジェクトで、 Assets > Import Package > Custom Packageに移動します。

  3. 解凍した SDK から、アプリで使用するサポート対象の Firebase プロダクトを選択します。

    Firebase Cloud Messaging で最適なエクスペリエンスを得るには、プロジェクトでGoogle アナリティクスを有効にすることをお勧めします。また、Analytics の設定の一環として、Analytics 用の Firebase パッケージをアプリに追加する必要があります。

    分析が有効

    • Google アナリティクス用の Firebase パッケージを追加します: FirebaseAnalytics.unitypackage
    • Firebase Cloud Messaging のパッケージを追加します: FirebaseMessaging.unitypackage

    分析が有効になっていません

    Firebase Cloud Messaging のパッケージを追加します: FirebaseMessaging.unitypackage

  4. [ Unity パッケージのインポート] ウィンドウで、[インポート] をクリックします。

  5. Firebase コンソールに戻り、セットアップ ワークフローで [次へ] をクリックします。

ステップ 5: Google Play サービスのバージョン要件を確認する

Firebase Unity SDK for Android にはGoogle Play サービスが必要です。これは、SDK を使用する前に最新である必要があります。

アプリケーションの先頭に次のコードを追加します。 SDK の他のメソッドを呼び出す前に、Google Play サービスを確認し、必要に応じて Firebase Unity SDK で必要なバージョンに更新できます。

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Create and hold a reference to your FirebaseApp,
    // where app is a Firebase.FirebaseApp property of your application class.
       app = Firebase.FirebaseApp.DefaultInstance;

    // Set a flag here to indicate whether Firebase is ready to use by your app.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

Unity プロジェクトが登録され、Firebase を使用するように構成されました。

ステップ 7: ユーザー通知フレームワークを追加する

  1. Xcode でプロジェクトをクリックし、エディタ領域から [全般] タブを選択します。

  2. Linked Frameworks and Librariesまで下にスクロールし、 +ボタンをクリックしてフレームワークを追加します。

  3. 表示されるウィンドウで、 UserNotifications.frameworkまでスクロールし、そのエントリをクリックしてから、 Add をクリックします。

ステップ 8: プッシュ通知を有効にする

  1. Xcode でプロジェクトをクリックし、エディタ領域から [機能] タブを選択します。

  2. プッシュ通知オンに切り替えます。

  3. Background Modesまで下にスクロールし、 Onに切り替えます。

  4. [バックグラウンド モード] の下の [リモート通知] チェックボックスをオンにします。

Firebase Cloud Messaging の初期化

Firebase Cloud Message ライブラリは、 TokenReceivedまたはMessageReceivedイベントのハンドラーを追加するときに初期化されます。

初期化時に、クライアント アプリ インスタンスの登録トークンが要求されます。アプリはOnTokenReceivedイベントでトークンを受け取ります。これは、後で使用するためにキャッシュする必要があります。この特定のデバイスをメッセージのターゲットにする場合は、このトークンが必要になります。

さらに、着信メッセージを受信できるようにする場合は、 OnMessageReceivedイベントに登録する必要があります。

セットアップ全体は次のようになります。

public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
  UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}

Android エントリ ポイント アクティビティの構成

Android では、デフォルトのUnityPlayerActivityを置き換えるカスタム エントリ ポイント アクティビティが Firebase Cloud Messaging にバンドルされています。カスタム エントリ ポイントを使用していない場合、この置換は自動的に行われるため、追加の操作を行う必要はありません。デフォルトのエントリ ポイント アクティビティを使用しないアプリ、または独自のAssets/Plugins/AndroidManifest.xmlを提供するアプリには、追加の構成が必要になります。

Android の Firebase Cloud Messaging Unity プラグインには、次の 2 つの追加ファイルがバンドルされています。

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jarには、標準のUnityPlayerActivityを置き換えるMessagingUnityPlayerActivityというアクティビティが含まれています。
  • Assets/Plugins/Android/AndroidManifest.xmlは、アプリへのエントリ ポイントとしてMessagingUnityPlayerActivityを使用するようアプリに指示します。

これらのファイルが提供されるのは、デフォルトのUnityPlayerActivityonStoponRestartアクティビティのライフサイクル遷移を処理しないか、Firebase Cloud Messaging が受信メッセージを正しく処理するために必要なonNewIntentを実装しないためです。

カスタム エントリ ポイント アクティビティの構成

アプリがデフォルトのUnityPlayerActivityを使用しない場合は、提供されたAndroidManifest.xmlを削除し、カスタム アクティビティがAndroid アクティビティ ライフサイクルのすべての遷移を適切に処理するようにする必要があります (これを行う方法の例を以下に示します)。カスタム アクティビティがUnityPlayerActivityを拡張する場合、代わりに必要なすべてのメソッドを実装するcom.google.firebase.MessagingUnityPlayerActivityを拡張できます。

カスタム アクティビティを使用していて、 com.google.firebase.MessagingUnityPlayerActivityを拡張していない場合は、アクティビティに次のスニペットを含める必要があります。

/**
 * Workaround for when a message is sent containing both a Data and Notification payload.
 *
 * When the app is in the background, if a message with both a data and notification payload is
 * received the data payload is stored on the Intent passed to onNewIntent. By default, that
 * intent does not get set as the Intent that started the app, so when the app comes back online
 * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so
 * that it sends the intent to the MessageForwardingService which forwards the message to the
 * FirebaseMessagingService which in turn sends the message to the application.
 */
@Override
protected void onNewIntent(Intent intent) {
  Intent message = new Intent(this, MessageForwardingService.class);
  message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
  message.putExtras(intent);
  message.setData(intent.getData());
  // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`.
  // startService(message);
  MessageForwardingService.enqueueWork(this, message);
}

/**
 * Dispose of the mUnityPlayer when restarting the app.
 *
 * This ensures that when the app starts up again it does not start with stale data.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
  if (mUnityPlayer != null) {
    mUnityPlayer.quit();
    mUnityPlayer = null;
  }
  super.onCreate(savedInstanceState);
}

Firebase C++ SDK の新しいバージョン (7.1.0 以降) は、 AndroidManifest.xmlファイルに追加の変更を加える必要があるJobIntentServiceを使用します。

<service android:name="com.google.firebase.messaging.MessageForwardingService"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" >
</service>

Android でのメッセージ配信に関する注意事項

アプリがまったく実行されていないときにユーザーが通知をタップすると、デフォルトでは、メッセージは FCM の組み込みコールバックを介してルーティングされません。この場合、メッセージ ペイロードは、アプリケーションの起動に使用されるIntentを介して受信されます。

アプリがバックグラウンドにある間に受信したメッセージには、システム トレイ通知を設定するために使用される通知フィールドのコンテンツがありますが、その通知コンテンツは FCM に伝達されません。つまり、 FirebaseMessage.Notificationは null になります。

要約すれば:

アプリの状態通知データ両方
前景Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
バックグラウンドシステムトレイFirebase.Messaging.FirebaseMessaging.MessageReceived通知: システム トレイ
データ: インテントのエクストラ。

自動初期化を防ぐ

FCM は、デバイス ターゲティング用の登録トークンを生成します。トークンが生成されると、ライブラリは識別子と構成データを Firebase にアップロードします。トークンを使用する前に明示的なオプトインを取得する場合は、FCM (および Android では Analytics) を無効にすることで、構成時に生成を防ぐことができます。これを行うには、メタデータ値を Apple のInfo.plist ( GoogleService-Info.plistではありません)、または Android のAndroidManifest.xmlに追加します。

アンドロイド

<?xml version="1.0" encoding="utf-8"?>
<application>
  <meta-data android:name="firebase_messaging_auto_init_enabled"
             android:value="false" />
  <meta-data android:name="firebase_analytics_collection_enabled"
             android:value="false" />
</application>

迅速

FirebaseMessagingAutoInitEnabled = NO

FCM を再度有効にするには、ランタイム呼び出しを行います。

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

この値は、一度設定するとアプリを再起動しても保持されます。

FCM を使用すると、アプリへのディープ リンクを含むメッセージを送信できます。ディープ リンクを含むメッセージを受信するには、アプリのディープ リンクを処理するアクティビティに新しいインテント フィルタを追加する必要があります。インテント フィルタは、ドメインのディープ リンクをキャッチする必要があります。メッセージにディープ リンクが含まれていない場合、この構成は必要ありません。 AndroidManifest.xml で:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/>
</intent-filter>

ワイルドカードを指定して、インテント フィルターをより柔軟にすることもできます。例えば:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="*.example.com" android:scheme="http"/>
  <data android:host="*.example.com" android:scheme="https"/>
</intent-filter>

指定したスキームとホストへのリンクを含む通知をユーザーがタップすると、アプリはこのインテント フィルターを使用してアクティビティを開始し、リンクを処理します。

次のステップ

クライアント アプリをセットアップしたら、Firebase を使用してダウンストリーム メッセージとトピック メッセージを送信する準備が整いました。詳細については、この機能を示すクイックスタート サンプルを参照してください。

アプリにその他のより高度な動作を追加するには、アプリ サーバーからメッセージを送信するためのガイドを参照してください。

これらの機能を利用するには、サーバーの実装が必要になることに注意してください。