您好我使用简单的firebase通知控制台发送推送通知,但是当我的应用程序关闭时,我只能获得默认的通知方式。有人可以展示如何使应用程序中的自定义通知样式关闭。这是我的onMessageReceived
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(this.getClass().getSimpleName(), "onMessageReceived");
String message = remoteMessage.getData().get("image");
Log.d(this.getClass().getSimpleName(), "From: " + remoteMessage.getFrom());
//Check if the message contains data
if(remoteMessage.getData().size()>0){
Log.d(this.getClass().getSimpleName(), "Message data: " + remoteMessage.getData());
}
//Check if the message contains notification
if(remoteMessage.getNotification() != null){
Log.dthis.getClass().getSimpleName(), "Message body: "+remoteMessage.getNotification().getBody());
sendNotification(remoteMessage.getNotification().getBody());
}
}
这是我的发送通知
private void sendNotification(String body) {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingintent = PendingIntent.getActivity(this, 0/*Request code*/, intent, PendingIntent.FLAG_ONE_SHOT);
//set sound of notification
Uri notificationSoound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notifiBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Firebase Cloud Messaging")
.setContentText(body)
.setAutoCancel(true)
.setSound(notificationSoound)
.setContentIntent(pendingintent);
NotificationManager noticationmessanger = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
noticationmessanger.notify(0/*Id of notification*/,notifiBuilder.build());
}
答案 0 :(得分:1)
使用FCM,您可以向客户端发送两种类型的消息:
通知消息,有时被视为"显示消息。" 数据消息,由客户端应用程序处理。
因此,如果您想自己处理消息,则需要仅从服务器发送数据属性作为通知的一部分。如果添加通知属性,firebase将自动处理它,您将无法自定义它。
答案 1 :(得分:0)
@Serg我最近实施了Firebase通知并遇到了同样的问题。当您的应用程序处于后台并通过firebase控制台发送通知时,您无法自定义通知。这是因为你的接收器的onMessageReceived方法不会被调用。要处理它,您需要通过PostMan(Firebase Rest客户端)发送通知。它允许您在后台或前台自定义通知。此外,您可以使用可以发送通知的内部API。
答案 2 :(得分:0)
这是我的firebase类
公共类MyFirebaseMessagingService扩展了FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
String myCustomKey = data.get("my_custom_key");
Log.d(Constants.TAG_FRAGMENT,"YESSSSSS" +myCustomKey);
}
}
这是YESSSSSS我没有得到
这是我的原始
{
"to": "/topics/my_topic",
"data": {
"my_custom_key" : "my_custom_value",
"other_key" : true
}
}
答案 3 :(得分:0)
在FirebaseMessagingService
中
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage == null)
return;
//create notification
if (remoteMessage.getNotification() != null) {
// Defualt notification genarate by system
}
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
try {
Map<String, String> data = remoteMessage.getData();
handleDataMessage(data);
} catch (Exception e) {
Log.e(TAG, "Exception: " + e.getMessage());
}
}
}
private void handleDataMessage(Map<String, String> data) {
// code of your custom notification
}
海报(供测试)
{
"registration_ids" : ["fsdfsa54sdf4asd"], // Your perticular user token id
"data" : {
"title" : "Testing",
"message" : "Hi ",
}
}
如果您使用主题,则替换
"registration_ids" : ["fsdfsa54sdf4asd"], // Your perticular user token id
以强>
"to": "/topics/my_topic"
如果您使用&#34;通知&#34;然后它由android defualt通知托盘处理。因此,每当你得到它时,都会使用数据消息手动处理通知。(对不起我的英文)
请参阅此link以获得更好的理解