我现在已经研究并尝试了一些方法,但是我无法访问expo令牌,因为据称未设置许可。到目前为止,我发现的所有内容对我都有很大帮助,但最终并不是答案。
我不得不说我是绝对的苹果菜鸟。我了解Linux系统,但是对于Apple设备,我几乎一无所知。
我正在编写一个应用程序,该应用程序应在收到邮件或数据库级别发生更改时通知用户。用户应该不能发送任何通知,而只能接收它们。一切都可以立即在Android上运行,但与以往一样,它使Apple变得比以前更难。
需求规范:
我的源代码基于Expo的示例。最终由Expo自动生成这些构建。
我前段时间曾手动尝试过,但是在此过程中我遇到了来自Apple的所有证书和密钥的麻烦。证书总是出错,这就是为什么我在某些时候允许它。我稍后会在这里再次尝试时将错误发布在这里。目前,我仍在等待Apple的考试结束。
如果在编译之前在Expo上测试了该应用程序,则读取expo令牌的效果很好。但是一旦构建完成,我将无法通过TestFlight和应用程序本身读取令牌。状态仍然是“不确定”。
因此,我研究并发现我缺少证书。现在,我有了Apple ID,iOS发行证书,Apple Push Services证书和Expo Push Notifications密钥。也是我需要的配置文件。而且尽管安装后我单击“允许”,但状态仍返回“未确定”。还设置了iPhone的设置,以便允许进行通知。
然后我尝试了命令“ expo build:ios --clear-push-cert”。结果相同。我已经更新了Node,NPM,Yarn和expo-cli。我发现的所有其他内容对我的情况不是很有帮助。有谁知道我的错误在哪里?
new Promise(async (resolve, reject) => {
const {status: existingStatus} = await Permissions.getAsync(Permissions.NOTIFICATIONS);
let finalStatus = existingStatus;
if (existingStatus !== 'granted') {
const {status} = await Permissions.askAsync(Permissions.NOTIFICATIONS);
finalStatus = status;
}
if ('granted' === finalStatus) {
if ('android' === Platform.OS) {
Expo.Notifications.createChannelAndroidAsync('test-members', {
name: 'Mail Service',
sound: true,
});
}
const token = await Notifications.getExpoPushTokenAsync()
token.then(resolve(token))
.catch(() =>
reject('Notifications allowed but there occurs an error at receiving the expo Token.'))
} else {
reject('Notifications not allowed')
}
}
)
编辑:同时,我发现我对APN和“推送通知密钥”有误解,只需要其中之一。但这仅意味着我又回来了。因为我只有钥匙,没有证书。
如果我想手动编译应用程序,Expo总是很难找到Apple ID的项目。所以我被卡住了。
我现在已切换到SDK版本33,但这似乎不是正确的解决方案。因为在“ iOS疑难解答”中,我已阅读以下内容: “注意:在我们完成将额外的身份验证层添加到Expo Push Notification Service的工作之前,临时客户端当前无法使用Push Notifications。” Expo编译应用程序时,将自动选择Ad hoc。尤其是因为我不知道还能采取什么措施以及如何正确整合它。