Expo Standalone iOS App返回“不确定”的权限,但在其他地方均可使用

时间:2019-04-09 19:39:52

标签: ios react-native push-notification expo

我有一个Expo应用,该应用没有在iOS上获得许可。我遵循expo guide,由expo生成我的证书,基本上完全使用push notification docs中的代码,在应用程序中允许推送通知,但是iOS始终返回“不确定”权限。在手机上的Expo应用程序中运行我的应用程序可以正常运行,Android可以运行,但不能实际运行iOS应用程序。据我所知,app.json中不需要有关通知的任何内容,对吗?

这里是注册功能,仅供参考:

export async function registerForPushNotificationsAsync() {
  const { status: existingStatus } = await Permissions.getAsync(
    Permissions.NOTIFICATIONS
  );
  let finalStatus = existingStatus;

  if (existingStatus !== 'granted') {
    const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
    finalStatus = status;
  }

  // Status is always 'undetermined' on iOS standalone app.
  if (finalStatus !== 'granted') {
    return;
  }

  // Get the token that uniquely identifies this device
  let token = await Notifications.getExpoPushTokenAsync();

  // POST the token to your backend server from where you can retrieve it to send push notifications.
  return fetch(settings.api_url + 'push-token', {
    method: 'POST',
    headers: {
      Accept: 'application/json',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      push_token: token,
      api_key: ui.user.api_key
    }),
  });
}

其他信息:

  • Expo SDK 32
  • iPhone XR

1 个答案:

答案 0 :(得分:0)

我知道这是一个古老的问题,但是由于尚未得到回答,因此我将收集解决此问题的常用步骤。

如果通过TestFlight进行测试或从App Store进行实际安装时收到的状态为“不确定”,则需要配置推送通知证书进行生产。我确定您还会收到一封电子邮件,内容是有关 ITMS-90078:缺少推送通知权利的信息。

您需要做两三件事...

首先,the things mentioned here

  

为了解决此问题,您需要为您的“启用通知”   在应用商店上的应用。

     
      
  1. 登录到https://developer.apple.com/
  2.   
  3. 转到“证书,标识符和配置文件”部分
  4.   
  5. 在左列的“标识符”部分中选择“应用ID”
  6.   
  7. 选择您的应用ID,对其进行编辑并选中“推送通知”。保存更改
  8.   
  9. 为生产推送服务生成证书:转到“证书”部分,然后按照助手为您的应用添加“ Apple Push Notification Service SSL(沙盒和生产)”证书。敏锐的读者会注意到,expo不需要此证书,因为它使用密钥直接与Apple对话
  10.   
     

TL; DR:在Apple Developer Portal中创建应用程序时,Expo需要启用“推送通知”服务

第二,我确定您已经发布了您的应用程序,因此您需要做的是更改 app.json 文件中的expo.ios.buildNumber,然后使用清除这样的配置文件参数:

expo build:ios --clear-provisioning-profile

通过这种方式,Expo将使用现在已在您的App ID标识符中激活的推送通知来生成构建。

最后,再次从Application Loader上载它。你应该没事的。

希望这会有所帮助。

重要。如果仅清除配置文件无效,请尝试使用命令expo build:ios -c

全部清除