在裸露的工作流程上推送通知:getExpoPushTokenAsync无法解析

时间:2020-09-30 15:17:10

标签: ios react-native expo

在几个弹出的应用程序中,使用裸露的工作流程无法获得expo通知。在进行故障排除时,我使用一个干净的新项目测试了设置–这些是我采取的步骤:

  1. 使用npx react-native初始MyApp创建应用程序,然后启动它以确认基本设置。
  2. 已安装的Unimodule(https://docs.expo.io/bare/installing-unimodules/
    • npm install react-native-unimodules
    • npx pod-install
    • 复制了iOS的配置
  3. 已安装的博览会通知(https://docs.expo.io/push-notifications/push-notifications-setup/
  4. 在expo属性下的app.json中添加了slug和ios.bundleIdentifier。

完成这些步骤后,我一次(https://github.com/brentvatne/push-notif-example/blob/f3ad8240166c42863c23a4edff40c2cbae521e18/App.tsx#L5-L13)发布了该应用程序,因此expo知道了它,并添加了带有expo凭证:manager的APN按钮。列出上传的密钥时,它显示如下:

Push Notifications Key - Key ID: M9DFYLY3Q6
Apple Team ID: MAMAYY5H8H,  Apple Team Name: entrecode GmbH (Company/Organization)
not used by any apps

我不确定为什么会说“没有被任何应用程序使用”。是否有人遇到过类似的问题,并且知道如何解决?裸露的应用程序甚至有问题吗?

无论如何,我在App.js中添加:

async function registerForPushNotificationsAsync() {
  let token;
  if (Constants.isDevice) {
    console.log('get push permission');
    const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS);
    let finalStatus = existingStatus;
    if (existingStatus !== 'granted') {
      console.log(`ask push permission: ${existingStatus}`);
      const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS).catch((err) => {
        console.error(`Error in ask permission: ${err.message}`);
        throw err;
      });
      finalStatus = status;
    }
    if (finalStatus !== 'granted') {
      alert('Failed to get push token for push notification!');
      return;
    }
    // await Notifications.requestPermissionsAsync();
    console.log('getting expo push token');
    token = (
      await Notifications.getExpoPushTokenAsync({
        experienceId,
        development: true,
      }).catch((err) => {
        console.error(`Error in get expo token: ${err.message}`);
        throw err;
      })
    ).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;
}

我现在面临的问题是在我的iOS设备上授予推送权限后,Notifications.getExpoPushTokenAsync()(我在有无开发标志的情况下进行了测试)在console.log('getting expo push token');之后停止了。它既不解决也不拒绝。我在博览会论坛上找到的其他解决方案对我不起作用。

如果这很重要:我正在使用通过电缆连接的物理设备,并使用Xcode启动应用。

有没有人做到这一点并且可以分享成功集成的一些细节?

最好, 康

0 个答案:

没有答案