Android 集成FireBase CloudMessage&Notification
来源:互联网 发布:网约车软件 编辑:程序博客网 时间:2024/04/26 04:52
忙活了大半天,终于集成了FireBase notification其实集成这个notification我并没有写代码,而且也不需要写代码,只是在这个过程中遇到了些坑,把这些东西记录下来,分享给那些能够用到的小伙伴,我想把整个FireBase中所有的功能都集成上来,只是为了学习一下.
这个notification是集成FireBase全家桶的第一个小功能,先看下集成后的效果图
这个是界面是下拉的通知栏,这个标题FCM Message 内容为hellow firebase是从FireBase控制台发出的,集成这个notification是和集成极光推送是差不多的,下面开始介绍如何集成.
1要详细阅读官方文档,要详细阅读官方文档,要详细阅读官方文档: https://firebase.google.com/docs/android/setup
2准备工作
一: studio安装google play service
二 studio创建项目
三 在你的手机上安装:google paly;google service,并且保证能科学(fan)上网(qiang)
2 在FireBase官网上注册你的应用,填写相关的信息 官网地址:https://console.firebase.google.com/
一: 填写信息:包名,项目名,sha1值等
填写完成sha1后这是要下载google-service.json这个文件,下载完成后需要把这个文件放到app/目录下也就是项目根目录
3把CloudMessage SDK集成到项目中 官网地址:https://firebase.google.com/docs/cloud-messaging/android/client
在清单文件中添加响应的服务
并在项目种创建相应的服务
public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFirebaseMsgService"; /** * Called when message is received. * * @param remoteMessage Object representing the message received from Firebase Cloud Messaging. */ // [START receive_message] @Override public void onMessageReceived(RemoteMessage remoteMessage) { // Check if message contains a notification payload. if (remoteMessage.getNotification() != null) { String body = remoteMessage.getNotification().getBody(); Log.d(TAG, "Message Notification Body: " + body); sendNotification(body); } private void sendNotification(String messageBody) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_notifications_black_24dp) .setContentTitle("FCM Message") .setContentText(messageBody) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); }}
public class AppFireBaseInstanceIDService extends FirebaseInstanceIdService{ @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate: id服务已经启动"); } @Override public void onTokenRefresh() { super.onTokenRefresh(); String token = FirebaseInstanceId.getInstance().getToken(); if (token != null) { Log.d(TAG, "onTokenRefresh: "+token); } }}
在project build.grandle添加依赖
在app build.grandle文件添加相应的依赖
添加完成后,基本就可以了,这里由于我漏掉了某些依赖,给我报了个错
FATAL EXCEPTION: main
E/AndroidRuntime(18680): java.lang.NoSuchMethodError: No static method zzb(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Lcom/google/android/gms/common/internal/zzaa; or its super classes (declaration of 'com.google.android.gms.common.internal.zzaa' appears in /data/app/***/base.apk)
E/AndroidRuntime(18680): at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
E/AndroidRuntime(18680): at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
E/AndroidRuntime(18680): at android.app.ActivityThread.installProvider(ActivityThread.java:5159)
E/AndroidRuntime(18680): at android.app.ActivityThread.installContentProviders(ActivityThread.java:4754)
E/AndroidRuntime(18680): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4694)
E/AndroidRuntime(18680): at android.app.ActivityThread.access$1600(ActivityThread.java:150)
E/AndroidRuntime(18680): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
E/AndroidRuntime(18680): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(18680): at android.os.Looper.loop(Looper.java:148)
E/AndroidRuntime(18680): at android.app.ActivityThread.main(ActivityThread.java:5423)
E/AndroidRuntime(18680): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(18680): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
E/AndroidRuntime(18680): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
这个错误我找了很久没有找到答案,后来发现是因为google service并没有启动起来,导致初始化失败,并且一开始我没有依赖firebase-core这个
在启动这个部署好的项目前要确保google play能正常联网使用,就行了
说明:由于测试项目使用的firebase集成会和Google Paly服务关联,在此版本需要统一,如下。测试项目使用的firebase是9.6.1那么Google Paly service服务也是只能比9.6的要高,我的是10.2的,否则firebase会无法使用。亲测!在此说明真机也是一样!
在这里如果你的应用启动成功了,控制台会有log提示
最后一步:使用控制台给自己发notification
发布成功后会有统计信息
当然我想把FireBase的大部分功能都集成上来
最后贴上项目的地址:https://github.com/tianyalian/FireBaseAllDemo.git
- Android 集成FireBase CloudMessage&Notification
- Firebase 集成 <iOS + Android>
- Firebase快速集成-Android篇
- Android 集成FireBase Realtime DataBase实现聊天
- 集成Firebase的Analytics功能
- 集成Firebase收集崩溃日志
- Firebase Android 使用整理
- Android Firebase 服务简介
- Android使用firebase
- Android使用Firebase
- Get start-新建工程,集成firebase、admob
- firebase推送 修改系统默认notification样式(稀有)
- android云后端之FireBase配置
- google firebase sdk android lib download
- 如何使用Firebase创建Android聊天应用程序
- Android使用Firebase无法获取ArrayList数据
- Android Google广告开发 Firebase、AdMob
- 【Android】Firebase配置与使用(上)
- 1083. List Grades (25)-PAT甲级
- 一道关于逆序对的题目
- XMPP 状态码 (部分)
- XMPP协议 好友管理(协议)
- openfire+smack添加好友申请及好友对申请响应监听
- Android 集成FireBase CloudMessage&Notification
- xmpp好友关系状态log
- 129.拦截黑名单的电话
- 新工作,新希望
- Android 开源项目汇总
- 自定义圆区别颜色
- ART模式和Dalvik模式的异同
- redis 数据结构笔记
- 对事物的理解