Expo react-native 裸工作流使用推送通知
Posted
技术标签:
【中文标题】Expo react-native 裸工作流使用推送通知【英文标题】:Expo react-native bare workflow using Push notifications 【发布时间】:2020-06-02 19:14:44 【问题描述】:首先,我将非常感谢您的帮助。
我正在尝试使用 expo-bare 工作流来实现 expo 推送通知。当我运行应用程序时,它给了我这样的错误,所以我无法获得令牌。
错误[TypeError: null is not an object (evaluating '_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;
;
【问题讨论】:
裸工作流使用 expo-notifications 包 - github.com/expo/expo/tree/master/packages/expo-notifications 我按照您评论的指示进行操作,先生。也许我可以尝试你在下面分享代码的方式,我会通知你。谢谢你的帮助先生。 【参考方案1】:你需要安装expo通知包:
expo install expo-notifications
也不要忘记将cd
放入ios
文件夹并运行pod install
以正确链接包。
接下来,您需要更改导入和使用通知的方式,例如:
import * as Notifications from 'expo-notifications';
然后要获得博览会令牌,您可以执行以下操作:
Notifications.getExpoPushTokenAsync(experienceId:'@your_username/your_app_slug')
这将解析为包含您的 expo 令牌的承诺,其对象格式如下:
"data": "ExponentPushToken[ID]", "type": "expo"
注意:来自 expo 的通知中的大多数方法支持与 expo-notifications 中的不同。详情请查看here。
【讨论】:
【参考方案2】:为了扩展我的评论,当我参加世博会时,我的设置与您的设置相似,但我退出了。根据their docs,裸工作流有点不同,所以我的设置是这样的:
// 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 )
【讨论】:
先生,您能否解释一下我如何获得 experienceId 它在哪里? 现在我正确获得了 expo 令牌,但是当我尝试使用 expo 工具发送推送通知时,它显示“InvalidCredentials:无法检索收件人应用程序的 FCM 服务器密钥。确保您提供了服务器密钥按照 Expo FCM 文件的指示。”我将我的 FCM 凭据上传到世博会我不知道为什么会出现此错误。 对于 android,您需要按照指南设置 Firebase 消息传递密钥,并通过 expo 凭据管理器上传 我将我的 FCM 密钥上传到了展会。现在我得到了 expo 令牌,然后我通过 expo 工具发送了通知,但我没有收到通知。 非常感谢您的支持。我完成的解决方案是删除世博会推送通知,而不是世博会,我决定使用 react-native-firebase 云消息传递库。我遵循 react-native-firebase 安装,everythink 运行良好。世博会害死我,在未来的项目中我永远不会使用世博会:)以上是关于Expo react-native 裸工作流使用推送通知的主要内容,如果未能解决你的问题,请参考以下文章
expo-updates 如何在反应原生裸工作流应用程序的不同版本中工作?
Expo / React Native:弹出到裸工作流后找不到图像文件