如何删除Android上的React Native Firebase通知点击操作?

时间:2019-04-15 13:59:48

标签: android react-native push-notification foreground react-native-firebase

我正在使用react-native-firebase在我的应用程序中设置前台和后台推送通知。我根据文档进行了设置:https://rnfirebase.io/docs/v4.3.x/notifications/receiving-notifications#App-in-Foreground-and-background

该应用程序具有一个firebase.messaging().onMessage()侦听器,当它在前台收到通知时,我使用firebase.notifications.displayNotification(notification)来显示该通知。

然后onNotificationOpened侦听器会收到通知,并将用户导航到其他屏幕。

问题在于,从onNotificationOpened接收到的通知对象具有操作android.intent.action.VIEW,该操作每次单击都会启动MainActivity。我不知道此操作字符串来自何处,因为客户端应用程序和后端均未设置任何点击操作。 另外,这个android.intent.action.VIEW恰好是我的MainActivity的意图过滤器动作。

我不希望ContentIntent操作绑定到通知,我希望我的应用处理导航到正确组件的操作。

还有一个问题,单击通知会卸载并重新装入我的主要组件,从而导致通知侦听器被删除。

我尝试在AndroidManifest中设置MainActivity android:launchMode=singleTop,但该活动仍会重新启动。我也尝试使用singleTasksingleInstancestandard

这是我的显示通知功能,称为onMessage

export async function displayNotification(message: RemoteMessage) {
  try {
    const notification = new firebase.notifications.Notification();

    const { title, message: messageBody, ...messageData } = message.data;

    notification
      .setNotificationId(message.messageId)
      .setTitle(title)
      .setBody(messageBody)
      .setData({
        ...messageData
      })
      .setSound('default');

    if (isAndroid) {
      // Build a channel for notifications on Android

      const channel = await createAndroidChannel();

      notification.android
        .setBigText(messageBody)
        .android.setChannelId(channel.channelId)
        .android.setAutoCancel(true) // Remove on press
    }

    await notifications.displayNotification(notification);
    return notification;
  } catch (error) {

  }
}

预期结果是:用户在前台有应用程序>用户收到推送通知>点击通知>不重新启动主要活动,但需要时通过onNotificationOpened侦听器重定向到特定屏幕

实际结果是:用户单击前台通知后>重新启动了“主要活动”,并且重新安装了“主屏幕”,从而导致了通知侦听器被删除。

1 个答案:

答案 0 :(得分:0)

这里的问题是,当您的应用程序处于前台或墨水后台时,已经有一个实例正在运行。因此,当您按下通知时,它将再次创建mainActivity的另一个实例并重新启动它。要解决此问题,您必须了解android的启动模式

Please refer to this link for description

尝试在AndroidManifest.xml文件中将launchMode设置为singleTop。然后重新安装并测试该应用程序。这应该可以解决您的问题。