Javascript 尝试获取推送通知的expo设备令牌时出错消息
我正在尝试在iOS上获得推送通知。我是这样做的:Javascript 尝试获取推送通知的expo设备令牌时出错消息,javascript,react-native,expo,Javascript,React Native,Expo,我正在尝试在iOS上获得推送通知。我是这样做的: import * as Permissions from 'expo-permissions'; import Notifications from 'expo'; async componentDidMount() { await Permissions.getAsync(Permissions.NOTIFICATIONS) .then((response) => response.status ===
import * as Permissions from 'expo-permissions';
import Notifications from 'expo';
async componentDidMount() {
await Permissions.getAsync(Permissions.NOTIFICATIONS)
.then((response) =>
response.status === 'granted'
? response
: Permissions.askAsync(Permissions.NOTIFICATIONS)
)
.then(async(response) => {
if (response.status !== 'granted') {
this.setState({
pushStatus: false
})
return Promise.reject(new Error('Push notifications permission was rejected'));
}
const token = (await Notifications.getExpoPushTokenAsync()).data;
console.log(token);
return token;
})
.then(token => {
Firebase.firestore().collection('users').doc(Firebase.auth().currentUser.uid).set({
token: token,
pushStatus: this.state.pushStatus
}, { merge: true })
})
.catch((error) => {
console.log('Error while registering device push token', error);
});
}
但在iOS上运行时,我遇到以下错误:
Error while registering device push token [TypeError: undefined is not an object (evaluating '_expo.default.getExpoPushTokenAsync')]
我通过扫描iPhone上的二维码来运行它,这将打开expo应用程序并运行该应用程序。当我接受推送通知的权限时,我得到了错误
我怎样才能解决这个问题
编辑:将expo SDK从39更新到40,然后像这样导入通知,这样做可以实现以下目的:
import * as Notifications from "expo-notifications";
根据文档,在导入
通知时,您应该使用expo通知
,而不仅仅是expo
。
此外,进口声明应如下所示:
import*作为来自“世博会通知”的通知
当您从世博会导入时,请认为您正在以通知的名义导入所有世博会功能/实用程序/等
我认为这就是为什么它在对象上抛出未定义的。我还可以做些什么让我知道
--
编辑:
在彻底搜索之后,问题是SDK和通知库之间不兼容
对于expo通知
0.82 SDK 40是必需的,否则抛出问题中列出的错误和此答案的注释将不起作用。我知道这一点,并且正在使用我正在使用的,因为当我import*作为“expo通知”的通知时
I getTypeError:undefined不是一个对象(计算'\u ServerRegistrationModule.default.getregistrationfoasync')
。很多关于堆栈溢出的答案要么推荐其中一种,要么推荐另一种,但我这样做是唯一一种不引发错误的方法。您使用哪个SDK?在终端中键入expo cli--version告诉我4.0.17实际上im在39上,我应该升级到40吗?expo SDK位于您的package.json上的expo键下。另外,您是否已登录expo cli?如果没有,请在测试推送通知之前尝试登录。有时这才是真正的问题