我已经在NodeJS中实现了firebase管理员SDK,并尝试从服务器发送推送通知。我的问题是我没有在我的通知(帐户和余额)中获取数据部分。它仅显示通知部分(标题和正文)。
我已经实现了这样的服务器端代码:
const admin = require("firebase-admin");
const serviceAccount = require("./my_service_account.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<myapp name>.firebaseio.com"
});
var payload = {
notification: {
title: "Hello",
body: "How are you."
},
data: {
account: "Savings",
balance: "$3020.25"
}
};
admin.messaging().sendToDevice(registrationToken,payload)
.then((response) =>{
console.log("Response", response);
}).catch((error) => {
console.log("Error", error);
});
在客户端,我在下面这样做:
public class MessagingReceive extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
if(remoteMessage.getData().size() > 0){
Map<String, String> data = remoteMessage.getData();
handleData(data);
}
}
private void handleData(Map<String,String> data){
String title = data.get("account");
String body = data.get("balance");
Intent intent = new Intent(MessagingReceive.this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
notificationBuilder.setContentTitle(title);
notificationBuilder.setContentText(body);
notificationBuilder.setAutoCancel(true);
notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
notificationBuilder.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0,notificationBuilder.build());
}
}
有人告诉我如何在通知中获取数据部分。任何帮助将不胜感激。
谢谢
根据在Android应用程序中接收消息部分中的处理消息
在后台接收时同时包含通知和数据有效负载的消息。在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动意图的额外内容中传递。
现在,根据具有可选数据有效载荷的通知消息
接收在后台时,应用会在通知同时包含通知和数据有效负载的消息时的应用行为取决于应用本质上是在后台还是前台,以及它在接收时是否处于活动状态。
- 托盘中接收通知有效负载,并且仅在用户点击通知时处理数据有效负载。
- 在前台时,应用会收到一个消息对象,其中包含两个有效负载。
因此,在应用程序在后台期间,payload
中的notification
obj可用于构建标准通知(标题,正文)。
例如,当用户点击通知时获取payload
data
对象由intent
实现。
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
String account;
String balance;
String body = remoteMessage.getNotification().getBody();
String title = remoteMessage.getNotification().getTitle();
if(remoteMessage.getData().size() > 0){
Map<String, String> data = remoteMessage.getData();
account = data.get("account");
balance = data.get("balance");
}
handleData(title,body,account,balance);
}
private void(String body , String title , Stirng account , String balance){
Intent intent = new Intent(MessagingReceive.this,MainActivity.class);
intent.putExtra("account",account);
intent.putExtra("balance",balance);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent =
PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
// rest of your code
}