使用推送通知展示 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