背景
海外应用集成谷歌推送服务,可行性android,ios,web推送,发现微软推送等第三方都是依据FireBase进行,目前推送这一块是免费的。
谢谢先大家点赞收藏,请食用!
准备工作,
含有谷歌服务的安卓测试机,能科学上网推荐clash for android
1、创建应用软件,在AndroidManifest.xml 填写需要的权限,
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.INTERNET" />
应用内推送
1、集成 FireBase 应用内消息推送 在 AndroidStudio中操作
创建项目,连接到FireBase操作台
连接成功
添加谷歌服务到app
添加其他的必不可少的依赖:
//应用内消息
implementation 'com.google.firebase:firebase-inappmessaging-display'
implementation 'com.google.firebase:firebase-analytics'
//权限申请库
implementation 'com.github.getActivity:XXPermissions:18.63'
implementation platform('com.google.firebase:firebase-bom:32.8.0')
//端外消息
implementation 'com.google.firebase:firebase-messaging'
下载并添加应用的配置文件
在Maintivity中动态申请权限,以及检查是否有谷歌服务,
GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this);
XXPermissions.with(this)
// 申请单个权限
.permission(Permission.POST_NOTIFICATIONS)
// 申请多个权限
// 设置权限请求拦截器(局部设置)
//.interceptor(new PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
//.unchecked()
.request(new OnPermissionCallback() {
@Override
public void onGranted(List<String> permissions, boolean allGranted) {
toast("获取通知成功");
FirebaseAnalytics.getInstance(MainActivity.this).setAnalyticsCollectionEnabled(true);
FirebaseMessaging.getInstance().isAutoInitEnabled();
}
@Override
public void onDenied( List<String> permissions, boolean doNotAskAgain) {
if (doNotAskAgain) {
toast("被永久拒绝授权,请手动授予通知权限");
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(MainActivity.this, permissions);
} else {
toast("获取通知权限失败");
}
}
});
创建并依赖官方的Service
package com.example.firebasetest;
import android.util.Log;
import androidx.annotation.NonNull;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class MyFirebaseMessagingService extends FirebaseMessagingService{
@Override
public void onNewToken(@NonNull String token) {
// Log.e("TAG", "onNewToken: "+token );
super.onNewToken(token);
}
@Override
public void onMessageReceived(@NonNull RemoteMessage message) {
super.onMessageReceived(message);
Log.e("TAG", "From: :"+message.getFrom());
if(!message.getData().isEmpty()){
Log.e("TAG", "Message data payload: "+message.getData());
}
// Check if message contains a notification payload.
if (message.getNotification()!=null){
Log.e("TAG", "Message Notification Body:"+ message.getNotification().getBody());
}
}
@Override
public void onDeletedMessages() {
Log.e("TAG", "onNewToken:onDeletedMessages " );
super.onDeletedMessages();
}
}
在FirseBase 操作台配置应用 SHA1信息,如何拿到SHA1?
最最重要的一步,开启项目的api 服务,不然日志会提示,
去网站操作台发送消息
选择应用内消息
选择简单的顶部横幅类型,填写信息之后点击测试按钮
打印的InAppMessaging
拿到测试机器上的installation ID
操作步骤,点击测试按钮,手机推出app进程之后再次进入
应用外推送
拿到令牌:注意端内端外的令牌不一样
杀掉app进程,点击发送,
总结:
1、端内推送测试操作需要杀掉app再次打开会进行推送,端外推送直接杀掉app即可;
2、在网站上一定要打开google API服务,不然发送消息没反应;
3,要支持Google 服务,并且设备可以科学上网;