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

使用C ++設置Firebase Cloud Messaging客戶端應用

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

設置Firebase和FCM SDK

安卓

  1. 如果尚未將Firebase添加到C ++項目中

    • 在鏈接的安裝說明中,查看有關使用Firebase C ++ SDK的設備和應用程序要求,包括有關使用CMake生成應用程序的建議。

    • 在項目級build.gradle文件,確保包括兩個你谷歌的Maven倉庫buildscriptallprojects部分。

  2. 創建Firebase App對象,並在JNI環境和活動中傳遞:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. 定義一個實現firebase::messaging::Listener接口的類。

  4. 初始化FCM,傳入應用程序和構造的偵聽器:

    ::firebase::messaging::Initialize(app, listener);

  5. 依賴Google Play服務SDK的應用在訪問功能之前,應先檢查設備是否有兼容的Google Play服務APK。要了解更多信息,請參閱檢查Google Play服務APK

的iOS

  1. 您需要有效的APNs證書。如果您還沒有,請參閱Provision APNs SSL證書
  2. 如果尚未將Firebase添加到C ++項目中。然後,為FCM設置項目:
    1. 在項目的Podfile中,添加FCM依賴項:
      pod 'Firebase/Messaging'
    2. Firebase C ++ SDKfirebase.frameworkfirebase_messaging.framework框架拖到您的Xcode項目中。
  3. 配置您的Xcode項目以啟用推送通知:

    1. 從“導航器”區域中選擇項目。
    2. 從“編輯器”區域中選擇項目目標。
    3. 從“編輯器”區域中選擇“常規”選項卡。

      1. 向下滾動到“鏈接的框架和庫” ,然後單擊+按鈕添加框架。
      2. 在出現的窗口中,滾動到UserNotifications.framework ,單擊該條目,然後單擊Add

        該框架僅出現在Xcode v8和更高版本中,並且是該庫所必需的。

    4. 從“編輯器”區域中選擇“功能”選項卡。

      1. 將“推送通知”切換為“打開”
      2. 向下滾動到“後台模式” ,然後將其切換為“開”
      3. 在“後台模式”下選擇“遠程通知”。
  4. 創建Firebase應用程序對象:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. 定義一個實現firebase::messaging::Listener接口的類。

  6. 初始化Firebase Cloud Messaging,並傳入應用程序和構造的偵聽器:

    ::firebase::messaging::Initialize(app, listener);

訪問設備註冊令牌

初始化Firebase Cloud Messaging庫後,將為客戶端應用程序實例請求註冊令牌。應用程序將通過OnTokenReceived回調接收令牌,該令牌應在實現firebase::messaging::Listener的類中定義。

如果要定位到該特定設備,則需要訪問此令牌。

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

當應用程序完全沒有運行並且用戶點擊通知時,默認情況下,該消息不會通過FCM的內置回調進行路由。在這種情況下,通過用於啟動應用程序的Intent接收消息有效負載。為了使FCM將這些傳入消息轉發到C ++庫回調,您需要重寫Activity中的onNewIntent方法onNewIntent Intent傳遞給MessageForwardingService

import com.google.firebase.messaging.MessageForwardingService;

class MyActivity extends Activity {
  private static final String TAG = "MyActvity";

  @Override
  protected void onNewIntent(Intent intent) {
    Log.d(TAG, "A message was sent to this app while it was in the background.");
    Intent message = new Intent(this, MessageForwardingService.class);
    message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
    message.putExtras(intent);
    message.setData(intent.getData());
    startService(message);
  }
}

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

總之:

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

Android上的自定義消息處理

默認情況下,發送到應用程序的通知將傳遞到::firebase::messaging::Listener::OnMessageReceived ,但是在某些情況下,您可能需要覆蓋默認行為。為此,您需要編寫擴展com.google.firebase.messaging.cpp.ListenerService自定義類,並更新項目的AndroidManifest.xml

重寫ListenerService方法。

ListenerService是Java類,它攔截發送到應用程序的傳入消息並將其路由到C ++庫。當應用程序位於前台時(或當應用程序位於後台並且接收到僅數據有效負載時),消息將通過此類提供的回調之一傳遞。要將自定義行為添加到消息處理中,您將需要擴展FCM的默認ListenerService

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

通過重寫ListenerService.onMessageReceived方法,可以基於接收到的RemoteMessage對象執行操作並獲取消息數據:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService還具有其他一些不常用的方法。這些也可以被覆蓋,有關更多信息,請參見FirebaseMessagingService參考。

@Override
public void onDeletedMessages() {
  Log.d(TAG, "Messages have been deleted on the server.");
  // Do additional logic...
  super.onDeletedMessages();
}

@Override
public void onMessageSent(String messageId) {
  Log.d(TAG, "An outgoing message has been sent.");
  // Do additional logic...
  super.onMessageSent(messageId);
}

@Override
public void onSendError(String messageId, Exception exception) {
  Log.d(TAG, "An outgoing message encountered an error.");
  // Do additional logic...
  super.onSendError(messageId, exception);
}

更新AndroidManifest.xml

編寫自定義類後,必須將它們包含在AndroidManifest.xml中才能生效。通過在<manifest>標記內聲明適當的屬性,確保清單包含合併工具,如下所示:

第0625章

firebase_messaging_cpp.aar檔案中,有一個AndroidManifest.xml文件,該文件聲明了FCM的默認ListenerService 。該清單通常與特定於項目的清單合併,這就是ListenerService能夠運行的方式。此ListenerService需要替換為cusom偵聽器服務。這是通過刪除默認的ListenerService並添加自定義服務來完成的,可以使用您的項目AndroidManifest.xml文件的以下行來完成:

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService"
         android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

防止自動初始化

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::SetTokenRegistrationOnInitEnabled(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發送下游消息和主題消息。要了解更多信息,請參閱快速入門示例中演示的此功能,您可以下載,運行和查看該功能。

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

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