Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

使用Unity設置Firebase Cloud Messaging客戶端應用

要使用Unity編寫跨平台的Firebase Cloud Messaging客戶端應用程序,請使用Firebase Cloud Messaging API。 Unity SDK適用於Android和iOS,每個平台都需要一些其他設置。

在你開始之前

先決條件

  • 安裝Unity 2017.4或更高版本。較早的版本也可能兼容,但不會得到積極支持。

  • (僅iOS)安裝以下內容:

    • Xcode 9.4.1或更高版本
    • CocoaPods 1.10.0或更高版本
  • 確保您的Unity項目滿足以下要求:

    • 對於iOS-針對iOS 10或更高版本
    • 對於Android —以API級別16(Jelly Bean)或更高版本為目標
  • 設置設備或使用仿真器運行Unity項目。

    • 對於iOS-設置物理iOS設備以運行您的應用程序,並完成以下任務:

      • 為您的Apple Developer帳戶獲取Apple Push Notification身份驗證密鑰。
      • 在“應用程序” >“功能”下的XCode中啟用“推送通知”。
    • 對於Android設備-模擬器必須在Google Play中使用模擬器圖像。

如果您還沒有Unity項目,而只想試用Firebase產品,則可以下載我們的快速入門樣本之一

步驟1:建立Firebase專案

在將Firebase添加到Unity項目之前,您需要創建一個Firebase項目以連接到Unity項目。訪問了解Firebase項目以了解有關Firebase項目的更多信息。

第2步:向Firebase註冊您的應用

您可以註冊一個或多個應用程序或遊戲以與Firebase項目連接。

  1. 轉到Firebase控制台

  2. 在項目概述頁面的中心,單擊Unity圖標( )以啟動設置工作流程。

    如果您已經將應用程序添加到Firebase項目中,請單擊“添加應用程序”以顯示平台選項。

  3. 選擇您要註冊的Unity項目的構建目標,或者甚至可以選擇同時註冊兩個目標。

  4. 輸入您的Unity項目的特定於平台的ID。

    • 對於iOS-iOS捆綁包ID字段中輸入Unity項目的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項目的“項目”窗口,然後將配置文件移到Assets文件夾中。

  3. 返回Firebase控制台,在設置工作流程中,單擊“下一步”

步驟4:添加Firebase Unity SDK

  1. 在Firebase控制台中,單擊“下載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(分析) 。另外,作為設置Google Analytics(分析)的一部分,您需要將適用於Analytics(分析)的Firebase軟件包添加到您的應用中。

    啟用分析

    • 為Google Analytics(分析)添加Firebase軟件包: FirebaseAnalytics.unitypackage
    • 添加Firebase Cloud Messaging的軟件包: FirebaseMessaging.unitypackage

    尚未啟用分析

    添加Firebase Cloud Messaging的軟件包: FirebaseMessaging.unitypackage

  4. 在“導入Unity軟件包”窗口中,單擊導入

  5. 返回Firebase控制台,在設置工作流程中,單擊“下一步”

步驟5:確認Google Play服務版本要求

適用於Android的Firebase Unity SDK需要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. 向下滾動到“鏈接的框架和庫” ,然後單擊+按鈕添加框架。

  3. 在出現的窗口中,滾動到UserNotifications.framework ,單擊該條目,然後單擊“添加”

步驟8:啟用推送通知

  1. 單擊Xcode中的項目,然後從“編輯器”區域中選擇“功能”選項卡。

  2. 將“推送通知”切換為“打開”

  3. 向下滾動到“後台模式” ,然後將其切換為“開”

  4. 選中“後台模式”下的“遠程通知”複選框。

初始化Firebase雲消息傳遞

在添加TokenReceivedMessageReceived事件的處理程序時,將初始化Firebase Cloud Message庫。

初始化後,請求客戶端應用程序實例的註冊令牌。該應用程序將接收帶有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上,Firebase Cloud Messaging捆綁有一個自定義入口點活動,該活動將替換默認的UnityPlayerActivity 。如果您不使用自定義入口點,則此替換將自動發生,並且您不必採取任何其他措施。不使用默認入口點Activity或提供自己的Assets/Plugins/AndroidManifest.xml將需要額外的配置。

Android上的Firebase Cloud Messaging Unity插件隨附了兩個附加文件:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar包含一個名為MessagingUnityPlayerActivity的活動,該活動取代了標準UnityPlayerActivity
  • Assets/Plugins/Android/AndroidManifest.xml指示應用程序使用MessagingUnityPlayerActivity作為應用程序的入口點。

之所以提供這些文件,是因為默認的UnityPlayerActivity不處理onStoponRestart活動生命週期過渡或實現onNewIntent ,這對於Firebase Cloud Messaging正確處理傳入消息是必需的。

配置自定義入口點活動

如果您的應用未使用默認的UnityPlayerActivity ,則需要刪除提供的AndroidManifest.xml並確保您的自定義活動正確處理了Android Activity生命週期的所有轉換(下面顯示了一個示例)。如果您的自定義活動擴展了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());
  startService(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);
}

關於在Android上傳遞消息的注意事項

當應用程序完全沒有運行並且用戶點擊通知時,默認情況下,該消息不會通過FCM的內置回調進行路由。在這種情況下,通過用於啟動應用程序的Intent接收消息有效負載。

當應用程序在後台運行時收到的消息具有其通知字段的內容,用於填充系統任務欄通知,但該通知內容不會傳達給FCM。也就是說, FirebaseMessage.Notification將為空。

總之:

應用狀態通知數據兩個都
前景Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
背景系統托盤Firebase.Messaging.FirebaseMessaging.MessageReceived通知:系統托盤
數據:意圖之外。

防止自動初始化

FCM生成用於設備定位的註冊令牌。生成令牌後,庫會將標識符和配置數據上載到Firebase。如果您想在使用令牌之前獲得明確的選擇加入,則可以通過禁用FCM(在Android和Analytics(分析)上)來防止在配置時生成。為此,請將元數據值添加到iOS上的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>

的iOS

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發送下游消息和主題消息。要了解更多信息,請參閱快速入門示例,該示例演示了此功能。

要將其他更高級的行為添加到您的應用程序,請參閱有關從應用程序服務器發送消息的指南:

請記住,您將需要服務器實施才能使用這些功能。