iPhone推送通知在沙箱中工作,但不在生产模式下工作

时间:2012-01-03 02:01:12

标签: iphone apple-push-notifications production-environment

正如标题所说,我有一个内置APNS的应用程序。它在Sandbox模式下完美运行。但在生产模式下,它失败了。

似乎我在服务器上有正确的证书,因为我没有从APNS服务收到错误。一切似乎都很好。我正在使用Aldo Armiento的ApnsPHP。它具有内置功能,可以从APNS-Server中吐出结果。当我尝试将Sandbox与商店中的应用程序一起使用时,我得到 - 正如预期的那样 - 一个无效的令牌错误(因为来自沙箱和生产的令牌不同)。当我使用生产证书与商店中的应用程序时,我没有收到错误。没什么,nada,zilch - 似乎它发出了通知。唉,它没有到达我的手机。

显然,证书必须没问题。它连接到服务器,它发送通知,所有传递没有错误(我确实首先有错误的证书,所以我知道如果他们不正确会发生什么:)

如何找出bug隐藏的位置?

[编辑]这是我从APNS-Service获得的内容:

Tue, 03 Jan 2012 03:13:55 +0100 ApnsPHP[13049]: INFO: Trying ssl://gateway.push.apple.com:2195...
Tue, 03 Jan 2012 03:13:56 +0100 ApnsPHP[13049]: INFO: Connected to ssl://gateway.push.apple.com:2195.
Tue, 03 Jan 2012 03:13:56 +0100 ApnsPHP[13049]: INFO: Sending messages queue, run #1: 1 message(s) left in queue.
Tue, 03 Jan 2012 03:13:56 +0100 ApnsPHP[13049]: STATUS: Sending message ID 1 [custom identifier: Message-Badge-000] (1/3): 107 bytes.
Tue, 03 Jan 2012 03:13:56 +0100 ApnsPHP[13049]: INFO: Disconnected.

5 个答案:

答案 0 :(得分:10)

以下是您可以在最后检查的三种情况: -

  1. 确保您在服务器端使用了正确的生产证书。因为我们需要为生产和沙箱创建两个不同的证书。确保您在服务器上使用正确的证书。

  2. 第二,您可以检查您是否在服务器端使用了正确的网关和端口号。由于生产和沙箱的网关是不同的。用于生产的网关是: - gateway.push.apple.com。并且您在服务器上使用正确的密码作为您在服务器上使用的证书。

  3. 第三,您可以检查设备上的通知是否已启用。您还需要在iPhone上启用它。确保您的设备上有。

  4. 让我知道它是否适合你。

答案 1 :(得分:7)

对我而言,我奋斗了好几天。使用正确的生产证书和密钥,并正确的网关将消息发送到我正在开发的iPhone,它成功发送到沙箱模式,但生产模式失败。这是因为还有两种设备令牌,测试iPhone设备令牌是沙盒令牌,不能在生产模式下使用。最好使用其他设备的令牌来测试生产APN。

详细解释为here

  

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

答案 2 :(得分:1)

请参阅https://stackoverflow.com/a/11623162/496222

中的回答

简而言之:确保两个SSL证书都在一个单独的PEM文件中。拥有包含沙盒和生产证书的单个PEM文件将导致任一环境失败。

答案 3 :(得分:0)

另请检查您的App ID是否已启用推送通知

答案 4 :(得分:0)

这解决了我的问题,请确保为kGGLInstanceIDAPNSServerTypeSandboxOption设置正确的值。 对于开发模式设置为YES和对于生产模式'否'