Android Firebase接入(五)-- Firebase推送通知(Cloud Message)

Firebase Cloud Message(FCM)可以帮助Android App实现消息推送功能,并且可以在推送通知中携带参数,当用户点击推送通知时,推送中携带的参数信息将传递到主Activity的getIntent中。

官方文档:https://firebase.google.com/docs/cloud-messaging/android/client

一、配置Android应用并下载google-service.json文件:

Firebase控制台新建项目(需要使用Google账户登录),配置好Android应用后下载google-service.json文件,将google-service.json文件添加到项目的app目录下即可。

(1)添加项目时填写项目名称、项目id使用默认的就可以、选择国家、底部的两个勾选项要么都选,要么都不选,表示是否和Google分享你的app分析数据,最后点击创建项目即可。

(2)Firebase的项目不止是为Android打造的,可以在项目中添加Android应用,IOS应用,网页应用。那么我们先要为这个项目添加一个Android应用:




选择“将Firebase添加到您的安卓应用”,然后填写app包名,app别名可以选填,调试签名证书SHA1,调试签名证书SHA1可以通过命令行获取:

Mac环境:

keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore


Windows环境:

keytool -exportcert -list -v \
-alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore


输入命令行后需要输入密钥库口令,默认的密钥库口令是android

获取正式签名证书SHA1的命令行:

keytool -exportcert -list -v \
-alias <your-key-name> -keystore <path-to-production-keystore>


在<your-key-name>填入密钥名,<path-to-production-keystore>填入密钥路径,然后输入密钥库口令即可获取SHA1。

4.添加好Android应用后,下载google-service.json文件,添加到项目的app目录下

二、添加CloudMessage依赖:

1.项目级的build.gradle中,添加:

classpath 'com.google.gms:google-services:4.0.1'



2.app模块下的build.gradle中,添加:

dependencies {
    ...
    implementation 'com.google.firebase:firebase-core:15.0.0'
    implementation 'com.google.firebase:firebase-messaging:17.0.0'

}
apply plugin: 'com.google.gms.google-services'




3.AndroidManifest中添加:

<service
    android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

并新建MyFirebaseMessagingService继承自FirebaseMessagingService,新建MyFirebaseInstanceIDService继承自FirebaseInstanceIdService即可。

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
}
public class MyFirebaseMessagingService extends FirebaseMessagingService {
}

动图演示:



这样就完成了Android端的集成。运行程序并将程序退出到后台,只有app在后台运行时才能收到推送通知。

4.打开Firebase控制台,转到Cloud Message模块,点击发送您的第一条消息:



在消息文字中填入推送的通知内容,消息标签可以不填,目标是用来选择发送给哪些设备的,我们这里选择我们的应用,这样安装了我们的app的用户都能收到此消息。


点击高级选项,可以自定义消息标题,通知渠道是Android8.0以上新推出的功能,可以不填,自定义数据中可以输入键值对。当用户点击通知进入app时,这些键值对会发送到主Activity的getIntent中。声音可以选择启动或停用,指的是用户收到通知时是否有声音提示。编辑好这些内容后,点击发送消息,安装了此app的Android设备就可以收到这条推送了(需要在真机运行,Android模拟器无法收到推送)。


Android设备接收到消息:


5.在主Activity中将键值对打印出来:编辑MainActivity:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = getIntent();
        if(intent!=null&&intent.hasExtra("键")){
            Log.d(TAG, "intent: "+intent.getStringExtra("键"));
        }
    }
}

运行并退出app到后台 --> 在Firebase控制台发送一条推送 --> 点击推送进入app,Log控制台可以看到:


6.Firebase也可以给单个设备发送消息,这个功能在调试的时候非常有用,谁都不希望自己测试推送时发送的消息发给所有人。在程序中获得Firebase 的token id并将其打印出来:

Log.d(TAG, "Firebase Token: "+ FirebaseInstanceId.getInstance().getToken());


在Firebase控制台发送推送时选择单个设备,将设备的Firebase token id填入,这样就可以把推送消息只发送给这一个设备了。


猜你喜欢

转载自blog.csdn.net/AlpinistWang/article/details/80865330
今日推荐