苹果推送通知不在生产中

时间:2013-03-24 06:07:55

标签: iphone ios push-notification apple-push-notifications

我们完全被困,请帮忙。

我和我的团队制作了一个iPhone应用程序,这是我们第一次尝试使用iOS。

一切都很好,直到我们提交我们的应用程序并在app-store上可用 - 推送通知服务无效。我在网上搜索并尝试通过人们的建议仔细检查我们的应用程序,但我找不到有什么问题。所以这个问题发布在这里。

这些是我们所做的:

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

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

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

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

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

  6. 我们在步骤5中从AppId进行了另一个名为“appMaster”的生产配置,并将分发方法设置为“App Store”。下载并重建应用程序。这个被提交给苹果公司,并在app-stroe上活跃起来。

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

  8. 我们从App Store安装了该应用。遗憾的是,通知从未发出。

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

    欢迎任何想法。

    请成为我们的救星。感谢。

1 个答案:

答案 0 :(得分:29)

上述评论不正确。应用程序ID在软件包ID之前有一个前缀:

  

应用程序ID由应用程序的前缀为的包ID组成   Apple生成的十个字符的代码。团队管理员必须输入   捆绑ID。对于证书,它必须包含特定的捆绑包   ID;您不能使用“通配符”应用程序ID。

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

  

验证配置文件文件中的权利是否为   正确。为此,请在文本编辑器中打开.mobileprovision文件。   该文件的内容以XML格式构成。在权利中   字典找到aps-environment密钥。为了发展   配置文件,该键的字符串值应该是   发展;对于分发配置文件,字符串值   应生产

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

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

编辑:

有关设备令牌的一些引用:

来自Local and Push Notification Programming Guide

  

请注意生产环境中的设备令牌和   开发(沙箱)环境中的设备令牌是不一样的   值。

来自Technical Note TN2265

  

处理格式错误的通知

     

如果推送服务,简单的二进制接口将断开连接   以某种方式收到不正确的通知。你的提供者   可能会将此视为EPIPE或管道错误,以响应发送a   通知。另一方面,增强的二进制接口将   发送错误响应,其中包含有关内容的更详细信息   在断开连接之前通知错误。确定   您的提供商正确捕获并处理这些条件。

     

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

最后,this article很好地解释了当某些通知无效时(最常见的原因是设备令牌无效)向Apple发送多个通知,可能导致某些有效通知无法到达好。