未定义不是对象(评估 '_PushTokenManager.default.getDevicePushTokenAsync [REACT NATIVE EXPO]

Bet*_*gro 5 android push-notification react-native expo

无法使用 expo-notifications api 上的 getExpoPushTokenAsync() 函数获取令牌。以下功能与Expo文档完全相同:

import Constants from "expo-constants";
import * as Notifications from "expo-notifications";
import * as Permissions from "expo-permissions";

async function registerForPushNotificationsAsync() {
    let token;
    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') {
        alert('Failed to get push token for push notification!');
        return;
    }
    token = (await Notifications.getExpoPushTokenAsync()).data;
    console.log(token);
    } else {
        alert('Must use physical device for Push Notifications');
    }

    if (Platform.OS === 'android') {
    Notifications.setNotificationChannelAsync('default', {
        name: 'default',
        importance: Notifications.AndroidImportance.MAX,
        vibrationPattern: [0, 250, 250, 250],
        lightColor: '#FF231F7C',
    });
    }

    return token;
}
Run Code Online (Sandbox Code Playgroud)

世博会:~37.0.3 App.json:

"expo": {
        "android": {
          "useNextNotificationsApi": true
        }
      }
Run Code Online (Sandbox Code Playgroud)

似乎在调用该函数时,收到了下一个警告:

[Unhandled promise rejection: TypeError: undefined is not an object (evaluating '_PushTokenManager.default.getDevicePushTokenAsync')]
Run Code Online (Sandbox Code Playgroud)

小智 4

确保您从“expo”导入 {Notifications},而不是从“expo-notifications”导入其他方式。遇到了同样的问题,但后来尝试从“世博会”导入它并且成功了。 看看这张图片