2013-03-24 147 views
23

我们完全被困住了,请帮忙。苹果推送通知不生产

我和我的团队做了一个iPhone应用程序,这是我们第一次在iOS上尝试。

一切都很好,直到我们提交我们的应用程序,并成为应用程序商店可用 - 推送通知服务不起作用。我搜索了网络,并试图通过人们的建议仔细检查我们的应用程序,但我找不到错在哪里。所以这个问题在这里发布。

这是我们所做的事情:

  1. 我们构建应用程序,假设它的命名 “AppMaster”。

  2. 我们在iOS Provisioning Portal上创建了名为“pushtest”的AppId。此ID在开发和生产上启用了推送通知。

  3. 我们从上面的appId创建了名为“AppMasterPushTest”的开发配置。此配置供内部测试,团队中的每个人都将其安装在他们的Mac上。

  4. 我们的服务器是由Java实现的,我们使用了java-apn包。在测试过程中,我们下载了用于开发的认证文件并写出了.p12文件,并通过使用该包的api - 带有该.p12文件的withSandboxDestination()将我们的消息推送到“沙箱”服务器。测试进行得很顺利,收到通知。

  5. 我认为我们已经做好准备了,所以我们创建了另一个名为“AppMaster”的AppId,并且只为生产启用了推送通知。此ID用应用程序的包标识符编写。

  6. 我们在步骤5中从AppId制作了名为“appMaster”的另一个配置文件,分配方法设置为“App Store”。下载它并重建应用程序。这一个被提交给苹果公司,并在应用程序上运行。

  7. 服务器端,我们下载了生产认证并再次写出.p12文件。并使程序通过使用api-withProductionDestination()将消息推送到生产服务器,并将.p12写出。

  8. 我们从App Store安装了应用程序。可悲的是,通知从未交付。

有什么我们错过了?顺便说一句,我们在步骤5中创建的id看起来像“XXX.com.company.appname”,但在应用程序的捆绑标识符中,我们只设置了“com.company.appname”部分而没有前缀。这可能是问题吗?

欢迎任何想法。

请成为我们的保护者。谢谢。

+1

你自己说过。推送应用程序ID和实际的包ID应该是相同的。您的证书也可能存在问题。确保您的主要分发证书和推送证书使用相同的SSH RSA密钥对进行签名。 – 2013-03-24 06:16:07

+0

您可以尝试从.p12创建一个pem文件,然后尝试通过PHP发送推送。这里是链接 - http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 – 2013-03-24 19:15:02

+0

谢谢你们。关于应用ID,我认为Eran是对的。而我们的服务器是纯java的,添加一个php工具将会是太多工作。 – 2013-03-25 07:58:35

回答

28

上面的注释不正确。该应用程序ID具有前缀捆ID前:

的应用程序ID由具有 苹果生成的10字符代码前缀的应用程序包的ID。小组管理员必须输入 套件ID。对于证书,它必须包含特定的软件包ID;你不能使用“通配符”应用程序ID。

您应该检查你的供应配置文件,以确保它包含正确的APS权利:

验证在预配置配置文件的资格是 正确。为此,请在文本编辑器中打开.mobileprovision文件。 该文件的内容采用XML结构。在授权 字典中找到aps-environment密钥。对于开发配置文件 ,此密钥的字符串值应为 开发;对于分发配置文件,字符串值 应该是生产

发送推送通知到生产APNS服务器(在沙箱环境中工作的设备令牌在生产环境中不起作用)时,应确保使用生产设备令牌。

在将应用程序发布到应用程序商店之前,您应该使用AdHoc配置配置文件测试您的应用程序。 AdHoc配置文件与生产推送环境配合使用。

编辑:

一些报价关于设备令牌:

Local and Push Notification Programming Guide

注意到,在生产环境中的设备令牌和 设备令牌发展(沙盒)环境不一样 的值。

Technical Note TN2265

处理畸形通知

简单的二进制接口,如果推送服务 收到的通知是在某些方面不正确断开连接。您的供应商 可能会将此视为发送 通知时发出的EPIPE或管道故障错误。另一方面,增强的二进制接口 会发送一个错误响应,其中包含有关删除连接之前通知错误的更多详细信息 。请确保您的提供商 正确捕获并处理这些条件。

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

最后,this article是如何发送多个通知苹果时,有些通知是无效的(最常见的原因是无效的设备令牌)的一个很好的解释,可能会导致一些有效的通知,不也到达的。

+1

感谢Eran,我们检查了我们的配置文件,它确实有“aps-environment”键,其值为“生产”。现在我不确定设备令牌,但是对于我自己的iphone,我们的系统确实显示出两个不同的标记。仍然在努力... – 2013-03-25 07:55:41

+4

@HetfieldJoe如果你有两个相同设备的标记,只有其中一个将用于生产环境。如果您尝试发送给他们,如果您首先发送了错误的令牌(这将关闭连接),他们可能会同时失败。 – Eran 2013-03-25 13:41:07

+1

这是一个新想法。将检查它 – 2013-03-26 08:14:49