不能打开"应用在后台时收到的通知

时间:2017-10-03 12:16:05

标签: android django react-native push-notification react-android

当我想要处理应用在后台时收到的通知时,我遇到了问题。我收到通知,当我点击通知时,应用程序打开但是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)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

初始通知包含启动通知的通知   应用程序。如果用户通过单击横幅,横幅来启动应用程序   通知信息将在这里,而不是通过FCM.on事件。   有时Android会在应用程序转到后台时杀死活动,并且   然后在JS运行之前恢复它的广播通知。您可以使用   FCM.getInitialNotification()捕获那些错过的事件。 source

FCM.getInitialNotification().then(notif => {
    // do some logic here
   // I usually add this function inside my root page
});