创建一个网站的英文,泰州网站设计咨询,外贸网络营销如何做,幼教机构网站开发设计论文Firebase Cloud Messaging (FCM) 是 Google 提供的跨平台消息推送解决方案。以下是在 Android Kotlin 项目中集成 FCM 的详细步骤。
一、前期准备
1. 创建 Firebase 项目
访问 Firebase 控制台点击添加项目#xff0c;按照向导创建新项目项目创建完成后#x…Firebase Cloud Messaging (FCM) 是 Google 提供的跨平台消息推送解决方案。以下是在 Android Kotlin 项目中集成 FCM 的详细步骤。
一、前期准备
1. 创建 Firebase 项目
访问 Firebase 控制台点击添加项目按照向导创建新项目项目创建完成后点击添加应用选择 Android 应用
2. 获取配置文件
输入应用的包名必须与 build.gradle 中的 applicationId 一致下载 google-services.json 文件将该文件放到项目的 app 模块根目录下
二、项目配置
1. 项目级 build.gradle
// 在项目级的 build.gradle 文件中添加
buildscript {dependencies {// 添加 Google Services 插件classpath com.google.gms:google-services:4.3.15}
}2. 应用级 build.gradle
// 在应用级的 build.gradle 文件顶部添加
plugins {id com.android.applicationid kotlin-androidid com.google.gms.google-services // 添加这行
}dependencies {// FCM 核心库implementation com.google.firebase:firebase-messaging:23.2.1// 可选 - Kotlin 协程支持implementation org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4implementation org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.4// 可选 - 用于处理后台消息implementation androidx.work:work-runtime-ktx:2.8.1
}三、实现 FCM 服务
1. 创建自定义 FirebaseMessagingService
import android.util.Log
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessageclass MyFirebaseMessagingService : FirebaseMessagingService() {private val TAG FCM_Service/*** 当收到新消息时调用*/override fun onMessageReceived(remoteMessage: RemoteMessage) {Log.d(TAG, From: ${remoteMessage.from})// 检查消息是否包含数据负载if (remoteMessage.data.isNotEmpty()) {Log.d(TAG, Message data payload: ${remoteMessage.data})// 在这里处理数据消息handleDataMessage(remoteMessage.data)}// 检查消息是否包含通知负载remoteMessage.notification?.let {Log.d(TAG, Message Notification Body: ${it.body})// 在这里处理通知消息handleNotification(it)}}/*** 当新令牌生成时调用*/override fun onNewToken(token: String) {Log.d(TAG, Refreshed token: $token)// 将新令牌发送到你的应用服务器sendRegistrationToServer(token)}private fun handleDataMessage(data: MapString, String) {// 实现你的数据消息处理逻辑// 例如更新UI、显示通知等}private fun handleNotification(notification: RemoteMessage.Notification) {// 实现你的通知处理逻辑// 例如显示系统通知}private fun sendRegistrationToServer(token: String) {// 实现将令牌发送到你的应用服务器的逻辑}
}2. 在 AndroidManifest.xml 中注册服务
serviceandroid:name.MyFirebaseMessagingServiceandroid:exportedfalseintent-filteraction android:namecom.google.firebase.MESSAGING_EVENT //intent-filter
/service四、获取设备令牌
1. 创建 FCM 管理器类
import android.util.Log
import com.google.firebase.messaging.FirebaseMessaging
import kotlinx.coroutines.tasks.awaitobject FCMManager {private const val TAG FCM_Manager/*** 获取当前 FCM 令牌*/suspend fun getToken(): String? {return try {FirebaseMessaging.getInstance().token.await().also { token -Log.d(TAG, FCM Token: $token)}} catch (e: Exception) {Log.e(TAG, Failed to get FCM token, e)null}}/*** 订阅主题*/fun subscribeToTopic(topic: String) {FirebaseMessaging.getInstance().subscribeToTopic(topic).addOnCompleteListener { task -if (task.isSuccessful) {Log.d(TAG, Subscribed to $topic)} else {Log.e(TAG, Subscribe to $topic failed, task.exception)}}}/*** 取消订阅主题*/fun unsubscribeFromTopic(topic: String) {FirebaseMessaging.getInstance().unsubscribeFromTopic(topic).addOnCompleteListener { task -if (task.isSuccessful) {Log.d(TAG, Unsubscribed from $topic)} else {Log.e(TAG, Unsubscribe from $topic failed, task.exception)}}}
}2. 在应用启动时获取令牌
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 获取 FCM 令牌lifecycleScope.launch {val token FCMManager.getToken()// 可以将 token 发送到你的服务器}// 订阅主题示例FCMManager.subscribeToTopic(news)}
}五、处理通知点击
1. 创建通知点击处理 Activity
class NotificationHandlerActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_notification_handler)// 处理从通知传递过来的数据intent.extras?.let { extras -// 解析 extras 中的数据并处理val message extras.getString(key)// 根据消息内容跳转到相应页面}// 关闭 Activity如果是仅用于处理点击finish()}
}2. 在 AndroidManifest.xml 中配置
activityandroid:name.NotificationHandlerActivityandroid:exportedtrueandroid:themestyle/Theme.AppCompat.Translucentintent-filteraction android:nameandroid.intent.action.VIEW /category android:nameandroid.intent.category.DEFAULT //intent-filter
/activity六、测试 FCM 功能
1. 使用 Firebase 控制台测试
在 Firebase 控制台中选择你的项目进入 Cloud Messaging 部分点击发送第一条消息填写通知标题、内容等选择目标设备或主题发送测试消息
2. 使用 cURL 命令测试
curl -X POST \https://fcm.googleapis.com/fcm/send \-H Authorization: keyYOUR_SERVER_KEY \-H Content-Type: application/json \-d {to: DEVICE_TOKEN,notification: {title: 测试通知,body: 这是一条测试消息,click_action: .NotificationHandlerActivity},data: {key1: value1,key2: value2}}七、常见问题解决 收不到通知 检查设备是否联网确认 google-services.json 配置正确检查应用是否被强制停止 令牌获取失败 确保 Google Play 服务可用检查设备是否支持 GMS 后台消息不触发 确认服务已在 Manifest 中正确声明检查 Android 版本是否限制了后台服务 通知图标不显示 确保有默认通知图标在 Manifest 中添加元数据meta-dataandroid:namecom.google.firebase.messaging.default_notification_iconandroid:resourcedrawable/ic_notification /八、最佳实践 令牌管理 每次应用启动时检查令牌在 onNewToken 中及时更新服务器上的令牌 消息处理 区分数据消息和通知消息对于重要消息考虑添加 WorkManager 任务确保处理 用户体验 为通知设置合适的渠道提供清晰的点击行为 安全性 使用 HTTPS 传输令牌在服务器端验证消息来源
通过以上步骤你的 Android Kotlin 应用已经成功集成了 FCM 推送通知功能。你可以根据需要进一步扩展功能如实现富媒体通知、分组通知等高级特性。