【问题标题】:iPhone push-notification works in sandbox but not in production modeiPhone 推送通知在沙盒中有效,但在生产模式下无效
【发布时间】:2012-01-03 02:01:11
【问题描述】:

正如标题所说,我有一个内置 APNS 的应用程序。它确实在沙盒模式下完美运行。但是在生产模式下,它就惨败了。

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

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

任何想法如何找出错误隐藏的位置?

[编辑] 这是我从 APNS 服务返回的内容:

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.

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    让我知道它是否适合你。

    【讨论】:

    • 谢谢 - 但我检查了所有这些。一切都按照应有的方式进行设置。如前所述,我没有从推送服务中得到任何错误,它出现在消息通过时......非常奇怪。
    • 您是否尝试再次创建生产证书并将其放在您的服务器上?
    • 真丢脸 :) 那是证书。我为另一家公司开发,原来的开发人员离开了——他的证书似乎仍然有效(不过我用我的代替了它)。所以证书是有效的,它对应用程序有效。但是二进制文件是用我的私钥编译的,这一定造成了混乱。感谢您的帮助!
    • 我也遇到了这个问题...我在开发中收到推送通知,但它们不适用于实时/生产。你能详细说明一下最后的评论吗? “二进制文件是用我的私钥编译的”??我使用具有推送通知权限的分发配置文件签署代码,但我的生产 ssl .pem 密钥与构建应用程序无关。 (对吧?)
    • 原来 - 我和你有同样的问题。它在 dev/adHoc 模式下工作,但来自应用商店的分发拒绝接收推送通知。看来,iPhone 不再将其凭据发送到托管 PHP 脚本以发送 PN 的服务器。当我使用 Cordova 和 IBM-Bluemix 的一些插件开发它时,我不知道会出现什么问题......
    【解决方案2】:

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

    详细解释是here

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

    【讨论】:

    • 这个人做对了..感谢您分享此信息。
    • 第二,你是正确的。谢谢!在沙盒 (api.sandbox.push.apple.com) 请求中使用设备令牌后,请确保重启手机并重新安装应用程序以获取新设备令牌,然后再在生产环境中进行测试 (api.push .apple.com)。
    【解决方案3】:

    https://stackoverflow.com/a/11623162/496222中查看答案

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

    【讨论】:

      【解决方案4】:

      请同时检查您的 App Id 是否启用了推送通知

      【讨论】:

        【解决方案5】:

        这解决了我的问题,确保为kGGLInstanceIDAPNSServerTypeSandboxOption 设置正确的值。 开发模式设置为 YES,生产模式设置为“否”。

        【讨论】:

        【解决方案6】:

        您好,您是否尝试检查您的权利清单?改变 将 Entitlements.plist 中的 APS 环境设置为“生产”。 see the photo screenshot here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-01
          • 2013-01-11
          相关资源
          最近更新 更多