如果用户清除通知并且app在后台android中,则处理FCM数据消息

时间:2018-01-24 03:43:37

标签: android firebase firebase-realtime-database firebase-cloud-messaging

标题基本上都说明了一切。我有一个使用FCM的应用程序。如果应用程序位于前台,或者应用程序位于后台并且用户单击通知,我可以很好地接收数据消息。但是,用户不小心清除通知的情况又如何呢?或者当用户不是通过通知而是通过屏幕上的快捷方式图标打开应用程序时呢?就我而言,我无法在两种情况下访问数据消息。此外,如果应用程序当前没有运行,接收方将如何获取数据消息呢?我四处寻找答案,但对于我的第一个问题并没有多大帮助。第二个问题似乎是由于"白名单"我认为应用只允许做类似的事情。我怎么能安全地避开这个?

更新: 来自index.js的代码

const functions = require('firebase-functions');

//Create and Deploy Your First Cloud Functions
//https://firebase.google.com/docs/functions/write-firebase-functions

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

exports.sendNotification = functions.database
.ref("shareWorkout/{senderToReceiver}/{workoutName}")
.onWrite(event => {
 var request = event.data.val();

 var payload = {
    //notification:{
     //   title: "Workout received",
     //   body: request.id.concat(' sent you a workout')
     //},
     data:{
         senderId: request.id,
         workoutName: request.workoutName
         //workout: request.workout
     }
 };

 admin.messaging().sendToDevice(request.token, payload)

})

1 个答案:

答案 0 :(得分:0)

简单的方法是您需要更改服务器端只需要从通知有效负载中删除通知类,只需添加数据密钥并将所有数据放入数据中,

请记住,不要放置通知密钥,这样做,您会在FCM类的onMessageReceived方法中始终收到通知数据,该方法会扩展FirebaseMessagingService,所以现在您可以将通知存储在您想要的地方数据库或文件,您也可以稍后访问它。 (总是意味着当你访问你的应用程序时)