我将ParseServer和Back4App一起用于安卓和iOS应用程序。我在服务器上实现了一个云功能,通过Parse发送推送通知,它对Android应用程序有效,没有任何问题(用于调试和生产apks)。
使用iOS版本,我目前遇到了以下问题:我创建了一个APN身份验证密钥,并将其上传到Back4App。在这个过程中,我指出这个键是用于调试应用程序的,并且通过云函数向我的iOS调试设备发送推送通知就像一个魅力,不管哪个设备触发了云函数。这足以促进发展。
我需要能够将通知推送到这两种设备类型,以便在我最近开始的一个开放测试中与我的TestFlight测试人员一起进行故障排除。
对于所有的TestFlight测试设备,推送通知并没有被传递--这并不奇怪,因为APN密钥仅被上传到Back4App进行调试应用程序。
因此,我重新上传了APN密钥,并指出它是一个生产应用程序,现在向TestFlight测试人员发送推送通知是有效的,但是将推送通知发送到我的iOS调试测试设备则不起作用。
我试图通过将Xcode中的构建方案从Debug更改为Release来解决这一问题--但是在我的iOS调试设备上发布了一个版本,推送通知仍然没有传递到所述设备。我可以从我的分析仪表板中看到,它们正在被发送,但是它们没有被交付。
我正在使用Notification扩展,并将构建模式设置为在那里发布,但没有效果。
将Back4App上的APN身份验证密钥更改为Debug只允许我在调试设备上再次接收推送通知。
我尝试更改APN身份验证密钥(用于调试和生产,因为我不能在Back4App上同时选择),然后强制退出应用程序,重新启动它以获得保存到ParseServer的新APN令牌,然后发送测试通知,也没有效果。我在我的调试设备和TestFlight设备上都尝试过这一点,而且总是我的调试设备(直接从Xcode获得应用程序)或TestFlight设备能够接收推送通知,而不是两者兼而有之。
我并没有尝试使用APN证书,因为我读到有两个不同的证书用于生产和调试应用程序。虽然这个选项在Back4App中是可能的,但仍然存在一个大问题--如何在iOS中只使用一个APN身份验证密钥实现对调试和生产应用程序的推送通知?更具体地说,您是如何在Back4App上做到这一点的?
或者除了旧的APN证书之外,还有其他方法来解决这个问题吗?由于APN身份验证密钥被确定为未来,我宁愿用它来实现它,而不是使用旧的APN证书。
任何帮助都是非常感谢的,谢谢提前!
发布于 2022-03-09 21:54:50
我找到了一个解决办法,是什么导致了这个问题:
使用APN身份验证密钥进行推送通知更容易实现,而且更方便,因为密钥不会过期,可以跨多个应用程序使用,并且不需要生成独立的开发和生产证书。
但是: APN身份验证密钥只能用于开发推送通知或生产推送通知(这显然是苹果的意图)。
无论是将构建设置为发布还是调试,直接从Xcode获得任何生成的绑定物理设备总是将APN环境标志设置为development --即使在构建之前手动将APN环境标志设置为production也没有效果,它似乎在构建时被重置,默认为开发。这意味着我的调试测试设备(物理连接到Xcode)只能接收开发推送,这解释了我描述的问题。
当存档构建并将其上载到TestFlight时,APN环境标志将自动设置为生产;因此,所有TestFlight测试人员只接收生产推送通知。
为了解决这个问题,我将我的调试测试设备注册为TestFlight测试器,这样我就可以从那里下载我的最新版本并利用生产推送的优势。我将这个特定的测试设备注册为它自己的组,这样我只能用该设备测试构建,而我不想立即在我的第二个(真)测试器组中向所有其他TestFlight用户发布该设备。
这是否意味着我总是需要存档任何新的构建并通过TestFlight将其推送到我的测试设备上来尝试新的东西?
不,只适用于需要推送通知的东西。对于其他所有内容,我仍然直接从Xcode获得最新版本,因为所有本地存储的数据(比如登录的Parse用户或安装数据)都在我的设备上持续存在,无论我是直接从Xcode还是通过TestFlight自动更新安装新版本。
这样,我就可以像往常一样工作,只需对任何与推送通知相关的特性采取额外的TestFlight步骤。
https://stackoverflow.com/questions/71366433
复制相似问题