从冷启动(当应用被终止时)使用Expo读取推送通知

时间:2020-06-21 02:22:44

标签: android react-native push-notification expo

我有一个Expo独立应用程序,我正在从服务器发送推送通知。像这样,我的App.js componentDidMount中有一个通知侦听器。

componentDidMount = () => {
  this._notificationSubscription = Notifications.addListener(this._handleNotification);
}

当我的应用程序在前台或后台运行时,将调用处理程序。

但是,当我的应用程序未运行(甚至不在后台)并且传递了通知时,在点击通知时,应用程序会打开,但不会调用处理程序。

在我看来,听众注册“太迟了”。

我的通知有一个有用的有效负载,我想在应用程序中使用它,但是除非应用程序正在运行,否则在这种“冷启动”情况下它将丢失。

是否可以在冷启动时保留此通知数据并调用此侦听器?

3 个答案:

答案 0 :(得分:0)

当前无法使用Expo从“冷启动”中读取推送通知。


推送通知非常难以使用。

您的应用可以处于3种不同的状态,最重要的是,用户可以选择-或 –在以下任何状态下与收到的推送通知进行交互:

  1. 前景-您的应用已打开,并且当前在用户屏幕上。
  2. 背景-您的应用已打开,隐藏,设备已锁定。
  3. 已杀死”-您的应用程序完全没有打开,或者处于后台状态,有一段时间没有使用。

Expo处理以下内容:

              Foreground    Background   Killed
-------------------------------------------------
   Received    ✅ Yes        ❌ No        ❌ No
 Interacted    ✅ Yes        ✅ Yes       ❌ No

Expo SDK 38的一个公开问题在这里:https://github.com/expo/expo/issues/6943

如果世博团队发现了解决方法或解决了此问题,我会尽力使此答案保持最新。

答案 1 :(得分:0)

在 expo SDK 42 中,这是我们在应用程序处于后台时收到通知时运行任务的方式。

import * as TaskManager from 'expo-task-manager';
import * as Notifications from 'expo-notifications';

const BACKGROUND_NOTIFICATION_TASK = 'BACKGROUND-NOTIFICATION-TASK';

TaskManager.defineTask(BACKGROUND_NOTIFICATION_TASK, ({ data, error, executionInfo }) => {
  console.log('Received a notification in the background!');
  // Do something with the notification data
});

Notifications.registerTaskAsync(BACKGROUND_NOTIFICATION_TASK);

Expo 现在仅在应用被终止时没有任何侦听器。 enter image description here

答案 2 :(得分:-1)

似乎Expo 38 upgrade之后至少现在是一致的。

  1. 如果在后台运行时触发了通知, 立即呈现 该应用程序未获悉

  2. 如果在应用程序处于前台状态时触发了通知, 该应用程序不仅会立即收到有关此信息,而且… 它也可以在运行时决定是显示警告提示还是播放声音! (有关更多信息,请参见通知处理程序文档。)