使用Firebase云消息传递在Android中推送通知
这篇文章介绍了如何在Android中发送推送通知 。 过去,我们曾经使用Google Cloud消息传递服务在Android中发送推送通知。 最近,它引入了一种使用Firebase发送推送数据的新方法。 即使基本原理保持不变,Firebase还是引入了一些有趣的新功能。 Firebase支持其他服务,例如:
- 认证方式
- 远程配置
- 崩溃报告
这篇文章将逐步介绍如何从Firebase控制台向应用程序发送推送通知。
什么是推送通知?
在深入研究如何在Android中发送通知的细节之前,弄清什么是推送通知很有用。 使用Android推送通知,我们的应用可以将新事件通知用户。 即使我们的应用程序不在前台运行,也会发生这种情况。 使用此服务,我们可以在发生新事件时将数据从服务器发送到我们的应用程序。 保持连接到服务器(拉方法)以询问是否有新事件,这种范例的效率要高得多。
使用推送通知,我们可以使用户了解事件,而不会耗尽智能手机的电池。 当用户收到通知时,该通知将作为自定义图标显示在状态栏中。 发送推送通知时可以使用不同的范例:
消息到单个设备
给主题的消息(向订阅了特定主题的多个设备发送相同的消息。这实现了模型发布者/订阅者)
发送给群组的消息(多个设备共享用于识别智能手机的相同密钥)
设置Firebase云消息传递项目
现在是时候开始了! 创建一个帐户以访问Firebase控制台并定义一个项目:
然后:
创建项目后,必须添加应用程序的程序包名称。 请注意,在Android Studio和Firebase控制台中使用相同的程序包名称:
在此过程结束时,将在Firebase上配置您的项目,并准备开发Android应用程序。 最后,您将获得一个必须在应用程序模块级别复制的json文件。
如何使用Firebase实施Android推送通知
现在,我们可以开发与Firebase集成的Android应用。 第一步,我们必须将Firebase添加到我们的应用程序并修改gradle文件。 在项目级别,让我们将gradle fille修改为:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.3' classpath 'com.google.gms:google-services:3.0.0' }}
并使用模块名称(通常命名为app):
....dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.google.firebase:firebase-messaging:9.4.0'}apply plugin: 'com.google.gms.google-services'
在这种情况下,我们添加了消息传递依赖性。 一旦配置了gradle文件,下一步就是创建我们的应用程序。 在MainActivity
我们添加一个Button以获取当前token
。 此令牌很重要,因为我们在Firebase控制台中使用它来设置正确的目标设备。
让我们假设,我们已经在Activity类中定义了包含按钮的布局:
Button btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String tkn = FirebaseInstanceId.getInstance().getToken(); Toast.makeText(MainActivity.this, "Current token ["+tkn+"]", Toast.LENGTH_LONG).show(); Log.d("App", "Token ["+tkn+"]"); } }); }
请注意,我们使用FirebaseInstanceId单例来获取当前实例,然后获取当前令牌。 生成令牌可能需要一段时间,因此您可以在开始时获取一个空值。
此外,我们可以使用扩展FirebaseInstanceIdService的自定义服务来监视令牌创建过程,并在令牌可用时得到通知。 在这种情况下,我们重写onTokenRefresh
方法。
public class FireIDService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { String tkn = FirebaseInstanceId.getInstance().getToken(); Log.d("Not","Token ["+tkn+"]"); }}
在这种方法中,我们只记录令牌,但是它可以在真实应用中用于将令牌发送到服务器,以便服务端将其存储。
不要忘记在Manifest.xml
声明此服务。
..
最后,我们实现了处理传入的推送通知的服务:
public class FireMsgService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); Log.d("Msg", "Message received ["+remoteMessage+"]"); // Create Notification Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 1410, intent, PendingIntent.FLAG_ONE_SHOT); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_stat_name) .setContentTitle("Message") .setContentText(remoteMessage.getNotification().getBody()) .setAutoCancel(true) .setContentIntent(pendingIntent); }}
在onMessageReceived
方法中,我们仅显示包含已发送消息的通知。
运行该应用程序,我们将在以下视频中显示结果:
在本文的最后,您了解了如何在带Firebase的Android中使用推送通知。
翻译自: https://www.javacodegeeks.com/2016/09/push-notification-android-using-firebase-cloud-messaging.html
更多相关文章
- 【Android(安卓)开发教程】Toast通知
- Android设置通知栏/状态栏透明改变通知栏颜色和app最上部分颜色
- [置顶] Android(安卓)跨进程通信Aidl的使用及注意事项
- Titanium 使用刘明星的Jpush module做android端的消息推送
- Android(安卓)通知Notification的两种实现方法
- Android点击通知栏,不启动新的activity
- android 通知 Notification
- Android自定义Toast 解决关闭通知 Toast无法弹出
- Android(安卓)APP 版本更新通知代码