FireBaseCloudMessage总结
公司有需求所以自己百度了FirebaseCloudMessage的用法,自己不知道走了多少坑,现在记录下来,给网友借鉴。
第一步,你需要一步能装上谷歌框架四部曲的手机,装完之后还需要*,保证可以接收到firebase console 发送过来的通知。(可以下载SSH工具进行*)
第二步,需要一个谷歌账号,登陆上FireBase 网站(https://console.firebase.google.com),新建一个project,进行注册。
1、填写信息
2、上面步骤完成后,下载google-services.json,放到你的Android project项目的根目录;
第三步,在自己的Android项目上进行部署
1、修改gradle文件
在项目级的build.gradle文件中的dependencies节点中添加下面代码
classpath 'com.google.gms:google-services:3.0.0'
在应用级的build.gradle文件中添加依赖
compile 'com.google.firebase:firebase-messaging:10.0.2'
将下面的代码放到文件的最后一行
apply plugin: 'com.google.gms.google-services'
2.创建service服务进行接受console 发来的信息
FCMMessagingService.java
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import java.util.Random;
public class FCMMessagingService extends FirebaseMessagingService {
private static final String TAG ="123" ;
Context context = this;
/**
* 收到通知
* @param remoteMessage
*/
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
notification(context, getString(R.string.app_name), remoteMessage.getNotification().getBody());
}
@Override
public void onDeletedMessages() {
super.onDeletedMessages();
}
@Override
public void onMessageSent(String s) {
super.onMessageSent(s);
}
@Override
public void onSendError(String s, Exception e) {
super.onSendError(s, e);
}
protected void notification(Context iContext, String iTitle, String iMessage)
{
NotificationManager notificationManager = (NotificationManager) iContext.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(getApplicationContext());
int notificationIcon = R.drawable.ic_launcher_background;
CharSequence notificationTitle = iTitle;
long when = System.currentTimeMillis();
Intent intent = new Intent(this, MainActivity.class);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
int requestCode, notificationId;
final Random random = new Random(System.currentTimeMillis());
requestCode = random.nextInt();
notificationId = random.nextInt();
PendingIntent contentIntent = PendingIntent.getActivity(iContext, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent)
.setSmallIcon(notificationIcon).setTicker(notificationTitle)
.setContentTitle(notificationTitle)
.setContentText(iMessage)
.setWhen(when).setAutoCancel(true);
Notification notification = builder.getNotification();
notification.defaults = Notification.DEFAULT_ALL;
notificationManager.notify(notificationId, notification);
}
}
FCMIntanceIDService.java
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import java.util.Random;
public class FCMMessagingService extends FirebaseMessagingService {
private static final String TAG ="123" ;
Context context = this;
/**
* 收到通知
* @param remoteMessage
*/
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
notification(context, getString(R.string.app_name), remoteMessage.getNotification().getBody());
}
@Override
public void onDeletedMessages() {
super.onDeletedMessages();
}
@Override
public void onMessageSent(String s) {
super.onMessageSent(s);
}
@Override
public void onSendError(String s, Exception e) {
super.onSendError(s, e);
}
protected void notification(Context iContext, String iTitle, String iMessage)
{
NotificationManager notificationManager = (NotificationManager) iContext.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(getApplicationContext());
int notificationIcon = R.drawable.ic_launcher_background;
CharSequence notificationTitle = iTitle;
long when = System.currentTimeMillis();
Intent intent = new Intent(this, MainActivity.class);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
int requestCode, notificationId;
final Random random = new Random(System.currentTimeMillis());
requestCode = random.nextInt();
notificationId = random.nextInt();
PendingIntent contentIntent = PendingIntent.getActivity(iContext, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent)
.setSmallIcon(notificationIcon).setTicker(notificationTitle)
.setContentTitle(notificationTitle)
.setContentText(iMessage)
.setWhen(when).setAutoCancel(true);
Notification notification = builder.getNotification();
notification.defaults = Notification.DEFAULT_ALL;
notificationManager.notify(notificationId, notification);
}
}
3.在AndroidManifests.xml进行注册
4.在MainActivity中使用
(这里使用的是通过主题进行接受信息,在console中发布一条通知,所有注册了这个主题的Android手机都可以收到通知)
5.最后,通过console 发送通知 来测试点击notification 填写信息进行发送通知
发送成功后如果接受到会统计到数量。
总结:
1、打开控制台(https://console.firebase.google.com),新建项目
2、集成android项目
3、弹出的窗口中输入项目的包名路径
4、第一次创建项目需下载google-services.json 文件,替换掉app路径下的(切换project模式)
测试:
1、打开控制台
2、点击左下角的 message cloud
3、对应多个 android 客户端的选择主题模式(输入名称,例如:news)发送,其他内容自定义
4、在项目 的MainActivity 中 修改 进行注册监听的 主题名称
FirebaseMessaging.getInstance().subscribeToTopic("news")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
String msg = "success";
if (!task.isSuccessful()) {
msg = "fail";
}
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
}
5、进行发送
注意:手机端必须*成功,打开这个app,看进行注册监听有没有成功,成功提示Success,即可以收到信息;