Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试获取推送通知的expo设备令牌时出错消息_Javascript_React Native_Expo - Fatal编程技术网

Javascript 尝试获取推送通知的expo设备令牌时出错消息

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 ===

我正在尝试在iOS上获得推送通知。我是这样做的:

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 get
TypeError:undefined不是一个对象(计算'\u ServerRegistrationModule.default.getregistrationfoasync')
。很多关于堆栈溢出的答案要么推荐其中一种,要么推荐另一种,但我这样做是唯一一种不引发错误的方法。您使用哪个SDK?在终端中键入expo cli--version告诉我4.0.17实际上im在39上,我应该升级到40吗?expo SDK位于您的package.json上的expo键下。另外,您是否已登录expo cli?如果没有,请在测试推送通知之前尝试登录。有时这才是真正的问题