Android中使用FCM进行消息推送

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、iOSWeb应用程序。Firebase Cloud Message提供了一个可靠而强大的云端平台,可以为您管理消息传递所需的协议和基础设施。除了实时消息和通知之外,Firebase Cloud Message还支持数据传输,使得开发者可以将自定义数据传递到移动应用程序中,以实现更灵活的应用程序功能。它还提供了一种管理后台,让开发者可以定制和管理通知和消息,以适应不同的应用程序需求。总之,Firebase Cloud Message是一个十分方便易用的消息传递服务,可以帮助开发者提高应用程序的交互性和用户体验。

在控制板中配置项目

Firebase的官网有专门的接收如何构建android 的应用,在这里可以进行参考。这里简单的梳理几个重要的步骤。

进入官网,创建一个项目:这里以FindMyKids为例。
在这里插入图片描述
点击进入项目中,创建一个安卓的应用,这个应用是指虚拟的一个应用,不是手机上的app。

在这里插入图片描述
在这个过程中,我们会看到android端的应用如何接入Firebasesdk。这个可以了解下,最后会得到一个关键的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可以用来做测试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值