0

我们的应用程序现在使用生产证书进行 iOS 推送通知。

我们已经经历了几轮推动工作,然后他们就停止工作。通常,“停止工作”与某些服务器故障有关。但是,我们使用的服务器说我们仍在起诉我制作证书时生成的相同 p12,但他们从 Apple 收到错误代码 8,这意味着它是一个无效令牌。

我重新生成证书并“弄脏”配置文件/标识符重新加载服务器上的 p12,一切正常......一段时间。然后他们就神奇地开始收到“错误代码 8”,我们必须重新开始。

今天我注意到我们应用程序的先前版本仍然可以正常工作,但当前版本不能。它们都使用相同的配置文件和/或企业分发配置文件构建,都使用相同的应用程序 ID 证书,都加载到 TestFlight(仅用于信息目的)并且在其中具有相同的推送相关代码。

奇怪的是,当我使用旧版本时,我会取回一个 4xxxxx... 设备令牌(始终相同),而当我使用新版本时,我始终会从 Apple 取回一个 5xxxxx... 设备令牌(始终如一一样的)。

我知道以前的版本之前获得了 5xxxx... 设备令牌,因为我在相当一致的基础上进行了检查。

但是,我注意到我们的一些测试人员注册的设备令牌比他们说的设备多,所以这个问题可能已经持续了很长时间,我错误地认为这是另一个问题。

是什么导致设备令牌具有一致但不同的数字?

设备令牌的结构是什么?

有谁知道为什么完全相同的配置文件/标识符会突然停止为完全相同的推送证书工作?

谢谢

4

1 回答 1

0

设备令牌很少更改。我知道它们会改变的唯一情况是当您升级 iOS 版本或从备份恢复设备时。因此,您为不同构建的同一设备获得不同令牌这一事实可能意味着其中一个构建使用沙盒证书,另一个使用生产证书。我能想到的唯一其他解释是,为了测试旧版本,您从备份中恢复了设备,从而更改了其设备令牌。

从您的问题描述来看,您的数据库似乎包含沙盒设备令牌和生产设备令牌的混合。它们混合不好。沙盒令牌在生产环境中无效,反之亦然。

您应该清除您的数据库并开始从您的用户那里收集您的设备令牌,或者您应该找到所有导致无效令牌响应的令牌并将它们删除。

来自 Apple 的技术说明

最常见的问题是无效的设备令牌。如果令牌来自沙盒环境,例如当您在内部测试开发构建时,您无法将其发送到生产推送服务。每个推送环境都会为同一设备或计算机颁发不同的令牌。如果您确实将设备令牌发送到错误的环境,推送服务会将其视为无效令牌并丢弃通知。

注意:建议您为每个推送环境运行一个单独的提供程序实例,以避免将设备令牌发送到错误环境的问题。

于 2013-05-07T10:44:55.050 回答