开发者问题收集

使用推送通知展示 react-native 裸工作流程

2020-06-02
8172

首先,我将非常感谢您的帮助。 我正在尝试使用 expo-bare 工作流实现 expo 推送通知。当我运行应用程序时,它给了我这样的错误,所以我无法获取令牌。 错误 [TypeError:null 不是对象(评估'_ExponentNotifications.default.getExponentPushTokenAsync')]

这是我的代码:

import { Notifications } from "expo";
import * as Permissions from "expo-permissions";
import Constants from "expo-constants";

export const getToken = async () => {
  if (Constants.isDevice) {
    const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS);
    let finalStatus = existingStatus;
    if (existingStatus !== "granted") {
      const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
      finalStatus = status;
    }
    if (finalStatus !== "granted") {
      console.log("Failed to get push token for push notification!");
      return;
    }
    token = await Notifications.getExpoPushTokenAsync();
  }
  else {
    console.log("Must use physical device for Push Notifications");
  }
  return token;
};
2个回答

您需要安装 expo 通知包:

expo install expo-notifications 另外,不要忘记 cd 进入 ios 文件夹并运行 pod install 以正确链接包。

接下来,您需要更改导入和使用通知的方式,例如:

import * as Notifications from 'expo-notifications';

然后要获取 expo 令牌,请执行以下操作:

Notifications.getExpoPushTokenAsync({experienceId:'@your_username/your_app_slug'})

它将解析为包含您的 expo 令牌的承诺,其对象格式如下:

{"data": "ExponentPushToken[ID]", "type": "expo">

注意: expo 的通知与 expo-notifications 中的通知不同。您应该查看 此处 了解更多详细信息。

Luthfulahi
2020-06-25

为了扩展我的评论,我在 Expo 管理时有一个与您类似的设置,但我将其弹出。根据 他们的文档 ,裸工作流程略有不同,因此我的设置如下:

// at the top:

import * as Notifications from 'expo-notifications';

// --------

// inside the code:

let settings = false

settings = Notifications.getPermissionsAsync()

if (!settings.granted) {
  settings = Notifications.requestPermissionsAsync()
}

if (settings.status === 1 || settings.status === 'granted') {
  const experienceId = '@proj/example' // (see docs on using expo credentials:manager)
  const token = Notifications.getExpoPushTokenAsync({ experienceId })

  const resp = api.sendNotificationToken({ token: token.data })
}

daybreaker
2020-06-04