React native 使用推送通知的Expo react本机裸工作流

React native 使用推送通知的Expo react本机裸工作流,react-native,push-notification,expo,React Native,Push Notification,Expo,首先,我非常感谢你的帮助。 我正在尝试使用expo bare工作流实现expo推送通知。当我运行应用程序时,它会给我这样的错误,所以我无法获取令牌。 错误[类型错误:null不是对象(计算'\u ExponentNotifications.default.getExponentPushTokenAsync')] 这是我的密码: 从“世博会”导入{Notifications}; 从“expo Permissions”导入*作为权限; 从“expo常量”导入常量; export const getT

首先,我非常感谢你的帮助。 我正在尝试使用expo bare工作流实现expo推送通知。当我运行应用程序时,它会给我这样的错误,所以我无法获取令牌。 错误
[类型错误:null不是对象(计算'\u ExponentNotifications.default.getExponentPushTokenAsync')]

这是我的密码:

从“世博会”导入{Notifications};
从“expo Permissions”导入*作为权限;
从“expo常量”导入常量;
export const getToken=async()=>{
if(常量.isDevice){
const{status:existingStatus}=wait Permissions.getAsync(Permissions.NOTIFICATIONS);
设finalStatus=existingStatus;
如果(现有状态!=“已授予”){
const{status}=wait Permissions.askAsync(Permissions.NOTIFICATIONS);
最终状态=状态;
}
如果(最终状态!=“已批准”){
log(“无法获取推送通知的推送令牌!”);
返回;
}
token=等待通知。getExpoPushTokenAsync();
}
否则{
log(“必须使用物理设备进行推送通知”);
}
返回令牌;
};

为了展开我的一些评论,我在Expo managed上的设置与您的设置类似,但我退出了。根据,裸工作流有点不同,因此我的工作流设置如下:

// 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 })
}


为了扩展我的评论,我在Expo managed上的设置与您的设置类似,但我退出了。根据,裸工作流有点不同,因此我的工作流设置如下:

// 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 })
}


您需要安装expo notifications软件包:

expo-install-expo-notifications
也不要忘记将
cd
放入
ios
文件夹并运行
pod-install
以正确链接软件包

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

import*作为来自“世博会通知”的通知

然后,要获得世博会代币,您可以执行以下操作:

Notifications.getExpoPushTokenAsync({experienceId:'@your\u username/your\u app\u slug})

这将解析为包含以下对象格式的expo令牌的承诺:

{“数据”:“ExponentPushToken[ID],“类型”:“expo”}


注意:世博会通知中的大多数方法支持与世博会通知中的不同。您应该查看更多详细信息。

您需要安装世博会通知软件包:

expo-install-expo-notifications
也不要忘记将
cd
放入
ios
文件夹并运行
pod-install
以正确链接软件包

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

import*作为来自“世博会通知”的通知

然后,要获得世博会代币,您可以执行以下操作:

Notifications.getExpoPushTokenAsync({experienceId:'@your\u username/your\u app\u slug})

这将解析为包含以下对象格式的expo令牌的承诺:

{“数据”:“ExponentPushToken[ID],“类型”:“expo”}


注意:世博会通知中的大多数方法支持与世博会通知中的不同。您应该查看更多详细信息。

Bare workflow使用expo notifications软件包-我遵循了您评论的说明,先生。也许我可以试试你的方式,你分享下面的代码,我会通知你回来。谢谢您的帮助,先生。Bare工作流使用expo notifications软件包-我遵循了您评论的说明,先生。也许我可以试试你的方式,你分享下面的代码,我会通知你回来。谢谢您的帮助,先生。先生,您能解释一下我如何获得experienceId吗?它在哪里?现在我正确获得了expo代币,但当我尝试使用expo工具发送推送通知时,它会说“InvalidCredentials:无法检索收件人应用程序的FCM服务器密钥。确保已按照Expo FCM文档的指示提供服务器密钥。“我将FCM凭据上载到expo。我不知道为什么会出现此错误。对于android,您需要按照指南设置Firebase消息密钥,并通过expo凭据管理器上载。我将FCM密钥上载到expo。现在我得到了世博代币,然后我通过世博工具发送了通知,但我没有收到通知。非常感谢你们对daybreaker的支持。我所做的解决方案是删除expo推送通知,而不是expo,我决定使用react原生firebase云消息传递库。我遵循react native firebase安装,所有链接都工作正常。世博会快把我累死了,在未来的项目中我将永远不会使用世博会:)先生,你能解释一下我如何获得experienceId吗?现在我正确地获得了世博会令牌,但当我尝试使用世博会工具发送推送通知时,它说“InvalidCredentials:无法检索收件人应用程序的FCM服务器密钥。确保已按照Expo FCM文档的指示提供服务器密钥。“我将FCM凭据上载到expo。我不知道为什么会出现此错误。对于android,您需要按照指南设置Firebase消息密钥,并通过expo凭据管理器上载。我将FCM密钥上载到expo。现在我得到了世博代币,然后我通过世博工具发送了通知,但我没有收到通知。非常感谢你们对daybreaker的支持。我所做的解决方案是删除expo推送通知,而不是expo,我决定使用react原生firebase云消息传递库。我遵循react native firebase安装,所有链接都工作正常。世博会正在折磨着我,在未来的项目中我将永远不会使用世博会:)