Cloud Messaging
??1、清單文件配置
? ? ? ? a、(可選)一項擴展?FirebaseMessagingService
?的服務。除了接收通知外,如果您還希望在后臺應用中進行消息處理,則必須添加此服務。例如,您需要在前臺應用中接收通知、接收數據載荷以及發送上行消息等,就必須擴展此服務
<serviceandroid:name=".java.MyFirebaseMessagingService"android:exported="false"><intent-filter><action android:name="com.google.firebase.MESSAGING_EVENT" /></intent-filter>
</service>
? ? ? ? b、(可選)應用組件中用于設置默認通知圖標和顏色的元數據元素。如果傳入的消息未明確設置圖標和顏色,Android 就會使用這些值。
<meta-dataandroid:name="com.google.firebase.messaging.default_notification_icon"android:resource="@drawable/ic_stat_ic_notification" />
<meta-dataandroid:name="com.google.firebase.messaging.default_notification_color"android:resource="@color/colorAccent" />
? ? ? ? ?c、(可選)從 Android 8.0(API 級別 26)和更高版本開始,我們支持并推薦使用通知渠道。FCM 提供具有基本設置的默認通知渠道。如果您希望創建和使用自己的默認渠道,請將?default_notification_channel_id
?設置為您的通知渠道對象的 ID(如下所示);只要傳入的消息未明確設置通知渠道,FCM 就會使用此值。如需了解詳情,請參閱管理通知渠道。
<meta-dataandroid:name="com.google.firebase.messaging.default_notification_channel_id"android:value="@string/default_notification_channel_id" />
以上三點都不配置的情況下:也能收到消息。如果需要在收到通知后,點擊消息做特殊處理,就需要實現第一點。
2、獲取設備注冊令牌
初次啟動您的應用時,FCM SDK 會為客戶端應用實例生成一個注冊令牌 (registration token)。如果您希望指定單一目標設備或者創建設備組,需要擴展?FirebaseMessagingService?并重寫?onNewToken
?來獲取此令牌。
因為令牌可能會在初始啟動后輪替,所以我們強烈建議您檢索最近更新的注冊令牌。
注冊令牌可能會在發生下列情況時更改:
- 應用在新設備上恢復
- 用戶卸載/重新安裝應用
- 用戶清除應用數據
如果需要檢索當前令牌,請調用?FirebaseMessaging.getInstance().getToken()。
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->if (!task.isSuccessful) {Log.w(TAG, "Fetching FCM registration token failed", task.exception)return@OnCompleteListener}// Get new FCM registration tokenval token = task.result//把當前獲取的注冊token傳給自己服務器
})
監控令牌的生成
每當生成新令牌時,都會觸發?onNewToken
?回調函數。
/*** 需要繼承:FirebaseMessagingService,重新onNewToken方法*/
override fun onNewToken(token: String) {Log.d(TAG, "Refreshed token: $token")//把當前token傳給自己服務器sendRegistrationToServer(token)
}
上面的令牌需要調用后端接口傳給自己服務器,如果只是需要記錄安裝時一次,可以只需要使用檢索一次就好,不需要實時監聽令牌的變化。
在所有的依賴Google服務的功能,都應該調用?GoogleApiAvailability.makeGooglePlayServicesAvailable()??????????????檢查,如果沒有就需要引導用戶下載