Как отправить другие данные, кроме заголовка и тела в службе сообщений Firebase?(Node.js, Android) - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над приложением для Android и, используя функцию на основе Node.js, отправляю уведомление на Android, а в Android функция onMessageReceived () используется для получения данных для отображения уведомлений.Теперь проблема, с которой я сталкиваюсь, заключается в том, что я хочу отправлять некоторые данные типа String параллельно с Title и Body.Какие изменения я должен сделать?Вот мой код Node.js

'use-strict'
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sendNotification = functions.firestore.document("Users/{user_id}/Notifications/{notification_id}").onWrite((change,context)=> {
const user_id = context.params.user_id;
const notification_id = context.params.notification_id;
console.log("User ID:"+user_id+" | Notification ID:"+notification_id);
return admin.firestore().collection("Users").doc(user_id).collection("Notifications").doc(notification_id).get().then(queryResult =>{
    const from_user_id = queryResult.data().from;
    const from_message = queryResult.data().Message;
    const from_data = admin.firestore().collection("Users").doc(from_user_id).get();
    const to_data = admin.firestore().collection("Users").doc(user_id).get();
    return Promise.all([from_data,to_data]).then(result =>{
        const from_name = result[0].data().Name;
        const to_name = result[1].data().Name;
        const token_id = result[1].data().Token_ID;
        const payload = {
            notification: {
                title: "Hey! "+from_name+" here",
                body: "Dear "+to_name+", "+from_message+", Will you help me?",
                icon: "default"
            }
        };
        return admin.messaging().sendToDevice(token_id,payload).then(result =>{
            return console.log("Notification Sent.");
        });
    });
});
});

А вот мой код Android:

public class FirebaseMsgService extends FirebaseMessagingService {


@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    String messageTitle = remoteMessage.getNotification().getTitle();
    String messageBody = remoteMessage.getNotification().getBody();
    Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.enough);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, getString(R.string.default_notification_channel_id))
            .setSmallIcon(R.drawable.logo)
            .setContentTitle(messageTitle)
            .setSound(sound)
            .setContentText(messageBody)
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(messageBody))
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);
    int mNotificationID = (int) System.currentTimeMillis();
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    mNotificationManager.notify(mNotificationID,mBuilder.build());
}
}

1 Ответ

0 голосов
/ 07 июня 2018

Хотя я знаю команду о nodejs (или js в целом), вчера я заработал на этом, передав объект data в полезную нагрузку.

Итак, запрос json, который делает Google (я используюGCM все еще, но я уверен, что FCM будет такой же или очень похожей полезной нагрузки) выглядит так:

{
  "to": "<GCM/FCM token>",
  "priority": "normal",
  "android_channel_id": -99,
  "data": {
    "title": "Some title",
    "body": "Some body",
    "more_data_one": "Some more data",
    "more_data_two": "Some more data, again!"
  }
}

Как-то, однако, если я отправлю и data и notification в полезной нагрузкеGCMServiceListener никогда не вызывается, и приложение просто отображает все, что находится в части notification полезной нагрузки.

Добавляя раздел data (и, следовательно, делая уведомление "тихим" уведомлением), вы отвечаете за перехват сообщения и его отображение с помощью построителя уведомлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...