Android:Google三方库之Firebase集成详细步骤(三)

Cloud Messaging

1、清单文件配置

a、(可选)一项扩展 FirebaseMessagingService 的服务。除了接收通知外,如果您还希望在后台应用中进行消息处理,则必须添加此服务。例如,您需要在前台应用中接收通知、接收数据载荷以及发送上行消息等,就必须扩展此服务

复制代码
<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

b、(可选)应用组件中用于设置默认通知图标和颜色的元数据元素。如果传入的消息未明确设置图标和颜色,Android 就会使用这些值。

复制代码
<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_stat_ic_notification" />
<meta-data
    android: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-data
    android: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 token
    val token = task.result
    //把当前获取的注册token传给自己服务器
})

监控令牌的生成

每当生成新令牌时,都会触发 onNewToken 回调函数。

复制代码
/**
 * 需要继承:FirebaseMessagingService,重新onNewToken方法
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    //把当前token传给自己服务器
    sendRegistrationToServer(token)
}

上面的令牌需要调用后端接口传给自己服务器,如果只是需要记录安装时一次,可以只需要使用检索一次就好,不需要实时监听令牌的变化。

在所有的依赖Google服务的功能,都应该调用 GoogleApiAvailability.makeGooglePlayServicesAvailable()​​​​​​​​​​​​​​检查,如果没有就需要引导用户下载

相关推荐
智慧物业老杨5 分钟前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava
alexhilton6 小时前
藏在设备上的秘密,终究藏不住
android·kotlin·android jetpack
hai_android12 小时前
Kotlin / Android 常用函数使用示例手册
android·java·kotlin
hai_android14 小时前
Android MeasureSpec 详解
android·java·kotlin
又见情义15 小时前
RK3568 Android 13 本地 U 盘 OTA 升级实战:基于 RKUpdateService 的完整流程
android
Godikov16 小时前
Android10后台弹窗与APK自动更新
android
又见情义17 小时前
RK3568 Android 13 USB OTG/Host 切换调试经验分享
android
终端安全笔记18 小时前
iOS 27 之后「策略空转」:设备升级不报错,但旧策略不再管它
android·网络·安全·ios·智能手机
JMchen19 小时前
实战案例:实现120fps流畅的渐变进度条
android·kotlin·canvas
敲代码的瓦龙19 小时前
Jetpack?DataBinding!!!
android·java·开发语言·mysql·android-studio