1

当我想处理应用程序在后台时收到的通知时,我遇到了问题。我确实收到了通知,当我点击通知时,应用程序打开但是 FCM.on 方法根本没有执行,它似乎没有处理回调。

当应用程序处于前台时,一切正常,并且它处理通知没有任何问题。

这是 react-native 中的代码

FCM.on(FCMEvent.Notification, notif => {
      switch(notif.fcm.action){
        case 'fcm.ACTION.HANDLEMESSAGE':
          var data = {
            thread: notif.pk,
            message: JSON.parse(notif.message)
          }

          this.props.dispatch(fcmMSG(data));
          this.props.dispatch(addNotification(notif.pk, notif.job_id));
          break;

        case "fcm.ACTION.HANDLEAPPLICATION":
          axios.get(newServerURL + "/jobs/companyJobDetails/" + notif.recruitJobId + "/")
              .then((response) => {
                  var jobMainRecruits = response.data;
                  const {navigator} = this.refs;
                  navigator.push({
                  jobMainRecruits,
                  });
            })
              .catch((error) => {
                  console.log("ERROR")
            });        
          break;

        default:
      }
    });  
FCM.getInitialNotification().then(notif => {
      switch(notif.fcm.action){
        case 'fcm.ACTION.HANDLEMESSAGE':

          const { navigator } = this.refs;

          var thread = {
            candidate: notif.candidate,
            company: notif.company,
            candidate_avatar: notif.candidate_avatar,
            candidate_first_name: notif.candidate_first_name,
            candidate_last_name: notif.candidate_last_name,

            job_id: notif.job_id,
            pk: notif.pk,
            subject: notif.subject,
            message: JSON.parse(notif.message)
          }

          navigator.push({
            thread,
          });

          break;
        case "fcm.ACTION.HANDLEAPPLICATION":
          axios.get(newServerURL + "/jobs/companyJobDetails/" + notif.recruitJobId + "/")
              .then((response) => {
                  var jobMainMessages = response.data;
                  const {navigator} = this.refs;
                  navigator.push({
                  jobMainMessages,
                  });
            })
              .catch((error) => {
                  console.log("ERROR")
            });          
          break;

        default:

      }
    })

编辑:这是我在后端的代码

push_service = FCMNotification(api_key=FCM_API_KEY)
                    registration_id = token.token
                    message_title = jobInfo.title
                    message_body = "New application"
                    message_icon = 'ic_launcher'
                    sound = 'Default'
                    color = '#362F64'
                    click_action='fcm.ACTION.NEWJOBAPPLICATION'
                    data_message = {'recruitJobId': self.request.data['job'], 'message_title': message_title, 'message_body': message_body}
                    result = push_service.notify_single_device(click_action=click_action, registration_id=registration_id, message_title=message_title, message_body=message_body, message_icon=message_icon, sound=sound, data_message=data_message, color=color)

提前感谢您的帮助。

4

1 回答 1

1

初始通知包含启动应用程序的通知。如果用户通过单击横幅启动应用程序,则横幅通知信息将在这里而不是通过 FCM.on 事件。有时Android会在应用程序进入后台时终止活动,然后在运行JS之前恢复它广播通知。你可以 FCM.getInitialNotification()用来捕捉那些错过的事件。资源

FCM.getInitialNotification().then(notif => {
    // do some logic here
   // I usually add this function inside my root page
});
于 2017-10-03T13:51:50.920 回答