首先让我说我现在一直在寻找解决方案几个小时。我已经阅读了几乎所有关于此的SO问题,但没有一个解决方案有效。我还阅读了关于这个主题的官方苹果文档以及其他一些教程。基本上我是这样说的,以避免明显的建议(确保它不是“沙盒”等)。
我在配置门户中为我的应用程序提供了dev和prod推送通知证书。我已经按照步骤使用苹果公司自己的文档创建了一个dev和prod的pem文件。
我有与此应用相关联的开发和临时分发配置文件。
我可以使用dev配置文件直接从xcode到设备构建我的应用程序,或者使用ad hoc分发配置文件将其存档(然后我使用beta构建器安装到设备上)。
无论是使用dev配置文件直接构建还是使用ad hoc配置文件(通过beta版本构建器),推送通知在使用sandbox + dev pem文件时都能正常工作。但是一旦我使用prod服务器+ prod pem文件进行测试,就不会发送推送通知。
我有两个用于测试的php脚本,一个用于dev,一个用于prod。它们基本相同,除了服务器URL(沙箱vs而不是沙箱)和引用的pem文件(dev或prod)。
我觉得奇怪的是,即使使用临时构建,我仍然可以使用沙箱和开发人员发送推送通知,这是正常的吗?
从开发到生产时,我还有什么可以做的吗?我觉得我此刻已经尝试了一切。我已多次重新生成证书和配置文件。我遵循几乎完全相同的程序来生成开发和prod pem文件和我的PHP脚本和几乎相同(对于prod和dev)。
我不知道这是服务器问题还是客户端(app)问题?我可能会遗忘某个地方吗?
我希望有人可以对此有所了解,因为它开始让我发疯!
干杯。
答案 0 :(得分:11)
嗯,我发现了问题,这是我的一个愚蠢的错误。我会在这里分享以防其他人犯同样的错误。
我不知道的关键是dev和prod(对于同一设备)的设备令牌是不同的。我正在使用我在dev中测试时获得的设备令牌来测试产品。这在dev中运行良好,但是当我切换到prod时,我在php脚本中保留了相同的设备令牌(假设,错误地,设备令牌对于同一设备是相同的)但是在prod中注册的实际设备令牌是不同。
在实践中,这不会发生,因为设备令牌被发送到服务器,但是当我测试时,我使用的是硬编码设备令牌,因为我不想涉及服务器。
希望这会让某人感到沮丧。
答案 1 :(得分:0)
类似的问题发生在我身上,我将推送通知添加到现有的应用程序,通过使用Xcode运行到我的设备进行测试并且运行良好,但是当创建存档并通过iTunes安装时,它没有收到推送通知。 问题是当我添加推送通知的权限时,我的配置文件已经过时(无效),所以我不得不生成一个新的配置文件,应用到我的iTunes /手机,现在当我安装应用程序时,它运行良好。