我有一个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
}),
});
}
其他信息:
答案 0 :(得分:0)
我知道这是一个古老的问题,但是由于尚未得到回答,因此我将收集解决此问题的常用步骤。
如果通过TestFlight进行测试或从App Store进行实际安装时收到的状态为“不确定”,则需要配置推送通知证书进行生产。我确定您还会收到一封电子邮件,内容是有关 ITMS-90078:缺少推送通知权利的信息。
您需要做两三件事...
为了解决此问题,您需要为您的“启用通知” 在应用商店上的应用。
- 登录到https://developer.apple.com/
- 转到“证书,标识符和配置文件”部分
- 在左列的“标识符”部分中选择“应用ID”
- 选择您的应用ID,对其进行编辑并选中“推送通知”。保存更改
- 为生产推送服务生成证书:转到“证书”部分,然后按照助手为您的应用添加“ Apple Push Notification Service SSL(沙盒和生产)”证书。敏锐的读者会注意到,expo不需要此证书,因为它使用密钥直接与Apple对话
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