Firebase Cloud Message 的介绍
Firebase Cloud Message(FCM)
是由Google
推出的一种云端消息推送服务,它是由Google
推出的Google Cloud Messaging(GCM)
服务的升级版。在2016年5月,Google
宣布将Google Cloud Messaging
重命名为Firebase Cloud Message
,作为Firebase
的一部分进行更完整的应用程序开发服务。
Firebase Cloud Message
的历史可以追溯到2010年,当时Google推出了Google Cloud Messaging(GCM)
,这是一种云端消息推送服务,它允许开发者向Android
设备发送消息。在接下来的几年中,GCM
在移动应用程序开发中变得越来越受欢迎,并于2014年加入了iOS
支持。
然而,随着时间的推移,GCM
逐渐变得过时和限制性,因此在2016年,Google
宣布将其重命名为Firebase Cloud Message
,并将其与Firebase一起作为更全面的应用程序开发平台。Firebase Cloud Message
提供了更强大的功能和更灵活的配置选项,允许开发人员更轻松地构建有用的通知并将它们推送到各种设备上。
目前,Firebase Cloud Message
已成为许多应用程序开发人员和企业的首选云端消息推送服务,它可以让开发人员更轻松地管理和发送通知,从而提高用户体验和应用程序的使用率。
Firebase Cloud Message
是一种可靠而强大的云端消息传递服务,它允许开发者轻松地发送跨平台的实时消息和通知,包括Android、iOS
和Web
应用程序。Firebase Cloud Message
提供了一个可靠而强大的云端平台,可以为您管理消息传递所需的协议和基础设施。除了实时消息和通知之外,Firebase Cloud Message
还支持数据传输,使得开发者可以将自定义数据传递到移动应用程序中,以实现更灵活的应用程序功能。它还提供了一种管理后台,让开发者可以定制和管理通知和消息,以适应不同的应用程序需求。总之,Firebase Cloud Message
是一个十分方便易用的消息传递服务,可以帮助开发者提高应用程序的交互性和用户体验。
在控制板中配置项目
Firebase的官网有专门的接收如何构建android 的应用,在这里可以进行参考。这里简单的梳理几个重要的步骤。
进入官网,创建一个项目:这里以FindMyKids
为例。
点击进入项目中,创建一个安卓的应用,这个应用是指虚拟的一个应用,不是手机上的app。
在这个过程中,我们会看到android
端的应用如何接入Firebase
的sdk
。这个可以了解下,最后会得到一个关键的json文件google-services.json
。
这里要注意一下三个信息一个是应用别名,填写app里面的应用名称就可以。软件包名就是app的packagename
。SHA 证书指纹可以具体的搜索一下是如何生成的,简单的来说是跟包的签名有关系,从签名文件中得到SHA 证书指纹。
keytool -list -v -keystore xxx.jks
#输入密码,获取证书指纹SHA1,SHA256等
构建安卓应用接收推送消息
用刚才在控制板中创建的信息来创建一个app
,创建完成后,需要配置如下的几个文件。
1.google-services.json
文件
放在app的目录中,如下:
2.项目根部
classpath 'com.google.gms:google-services:4.3.2'
3.项目的依赖项
implementation 'com.google.firebase:firebase-analytics:17.2.0'
implementation 'com.google.firebase:firebase-messaging:20.0.0'
4.添加插件
plugins {
id 'com.google.gms.google-services'
}
5.推送图标
//你的推送栏图标,自定义
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@mipmap/ic_launcher" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/design_default_color_secondary" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id"/>
5.自定义FirebaseMessagingService
服务
class MyFirebaseMessagingService: FirebaseMessagingService() {
override fun onNewToken(s: String) {
super.onNewToken(s)
Log.d(TAG, "Refreshed token: $s")
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
remoteMessage.notification?.let {
sendNotification(it.body)
}
}
private fun sendNotification(messageBody: String?) {
val channelId = getString(R.string.default_notification_channel_id)
val channelName = getString(R.string.default_notification_channel_name)
val intent = Intent(this, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val notificationBuilder = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_baseline_map_24)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
val mNotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT)
notificationBuilder.setChannelId(channelId)
mNotificationManager.createNotificationChannel(channel)
}
val notification = notificationBuilder.build()
mNotificationManager.notify(0, notification)
}
companion object {
private val TAG = MyFirebaseMessagingService::class.java.simpleName
}
}
6.获取客户端的token
btn_token.setOnClickListener {
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener { instanceIdResult ->
val deviceToken = instanceIdResult.token
val msg = getString(R.string.msg_token_fmt, deviceToken)
Toast.makeText(this@MainActivity, msg, Toast.LENGTH_SHORT).show()
Log.d(TAG, "Refreshed token: $deviceToken")
}
}
到这里我们的客户端就完成了,关键一点是我们要拿到deviceToken
。
看下android studio
的log,我们会看到:
Refreshed token: cqXqshuAKQA:APA91bGu2jM6ktZXf0fwHIplefWvs_gekXC30NLRbVGnUl_ijdSUBSFfZIOelgqRyp1oV-_jRKwDydtgIf04_amaWRVU318AFPsxxxxxxxxxxxxxxxxxxxxxepf4hAHg2eDf
拿到token
以后回到 firebase
的控制板。
在Firebase中发送push消息
点击message,进入发消息页面。
创建消息推送。
把刚才拿到的deviceToken
,添加进去,并勾选,点击测试。
在安卓端就会收到信息了。
如果在后端,会收到状态栏提醒。
在服务端发送消息到安卓中
刚才我们是在Firebase的控制端中发送数据的,Firebase也集成了sdk,我们可以在自己的服务器中发送信息。
这里以python 为例,来展示发送的流程。
1.获取私钥
把下载到的保存下来,放在 firebase-admin.json
中。
2.安装python的Firebase库
pip install firebase-admin
3.发送数据
cred = credentials.Certificate('config/firebase-admin.json')
firebase_admin.initialize_app(cred)
#指定 手机
token_mobile = 'dpAqJCKsTl6ZyFhV1QrwG7:APA91bHy_JS3-DIhFN1PoleBZ58WlJlFaK3ZShxXpqycLjzZBnK2f6LkoosLnWS-PmhrJ7qze67tBqAjW3ch1nM9v1hTbaU0hO'
response = messaging.send_multicast(message)
print('data: {}\n'.format(data))
这里有一个demo可以用来做测试。