文章目录
简介
Firebase Cloud Message(FCM)可以帮助App实现消息推送功能,并且可以在推送通知中携带参数,当用户点击推送通知时,推送中携带的参数信息将传递到启动Activity的getIntent中。
官方文档:https://firebase.google.com/docs/cloud-messaging/android/client
接入
一、配置Android应用并下载google-service.json文件
配置步骤见本系列第一篇文章:Android Firebase接入(序)–Firebase简介以及Firebase官方Demo的使用中的 “配置Android应用并下载google-service.json文件”
二、添加CloudMessage依赖
1.项目级的build.gradle中,添加:
classpath 'com.google.gms:google-services:4.1.0'
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'
三、添加两个Service
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>
新建MyFirebaseInstanceIDService继承自FirebaseInstanceIdService:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
}
新建MyFirebaseMessagingService继承自FirebaseMessagingService:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
}
动图演示:
这样就完成了Android端的集成。运行程序并将程序退出到后台,只有app在后台运行时才能收到推送通知。
四、发送推送消息
打开Firebase控制台,转到Cloud Message模块,点击发送您的第一条消息:
到达以下界面:
填入通知标题、通知文字,通知标签,点击下一步,到达以下界面:
定位是用来选择发送给哪些设备的,选择我们的应用,这样安装了我们的app的用户都能收到此消息,点击下一步,到达以下界面:
“发送安排”用来设置通知的频率,选择Now表示立即发送,除了Now之外还可以设置周期性通知,比如每天推送一次。我们选择Now,点击下一步,到达以下界面:
转化事件暂时不用,直接点击下一步,到达以下界面:
通知渠道是Android8.0以上新推出的功能,可以不填,自定义数据中可以输入键值对。当用户点击通知进入app时,这些键值对会发送到主Activity的getIntent中。声音可以选择启动或停用,指的是用户收到通知时是否有声音提示。编辑好这些内容后,点击审核,出现以下弹窗:
点击发布,安装了此app的Android设备就可以收到这条推送了。
注:
1.需要在真机运行,Android模拟器无法收到推送
2.app没有在前台运行时,才可以收到推送
收到推送消息的Android手机显示如下:
五、获取推送中携带的参数
前面已经说到,当用户点击推送通知时,推送中携带的参数信息将传递到启动Activity的getIntent中,我们可以在启动Activity中将键值对打印出来
1.编辑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("键"));
}
}
}
2.安装app并将app退到后台
3.在Firebase控制台发送一条推送 ,键值对填:“键”:“值”
4.点击推送进入app
Log控制台可以看到:
六、给单个设备发送推送
Firebase也可以给单个设备发送消息,这个功能在调试的时候非常有用。先在程序中获得设备的Firebase token id:
Log.d(TAG, "Firebase Token: "+ FirebaseInstanceId.getInstance().getToken());
在Firebase控制台发送推送时选择“在设备上测试”,
到达以下界面:
将设备的Firebase token id填入,点击“+”号,再点击测试。这样就可以把推送消息只发送给这一个设备了。