在iOS独立应用中从未“授予”通知权限

时间:2019-07-09 15:20:56

标签: ios react-native apple-push-notifications react-native-ios

我现在已经研究并尝试了一些方法,但是我无法访问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。尤其是因为我不知道还能采取什么措施以及如何正确整合它。

0 个答案:

没有答案