苹果推送通知在生产中不工作(apple push notification not working

2019-07-22 23:48发布

我们完全stucked,请帮助。

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

一切都很好,直到我们提交了我们的应用程序和应用程序商店面世 - 推送通知服务无法正常工作。 我在网上搜索周围,试图通过人的建议我们的应用程序仔细检查,但我找不到什么是错的。 所以这个问题是张贴在这里。

这是我们所做的事情:

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

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

  3. 我们创建了一个名为发展从上面的appid“AppMasterPushTest”的供应。 此配置是内部测试,车队的每个人都安装了它自己的MAC地址。

  4. 我们的服务器是由Java实现,并使用了Java的APN包。 在测试过程中,我们下载了发展的认证文件,并写出来的.p12文件,并通过使用封装的API推我们的信息的“沙盒”服务器 - withSandboxDestination()与.p12文件。 测试去罚款,通知被接收。

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

  6. 我们做了另一供应从的AppId在步骤5中名为“appMaster”生产,具有设置为“应用程序商店”分配方法。 下载它,并重建应用程序。 这一个被提交给苹果,并在App-Stroe的去活。

  7. 服务器端,我们下载了认证,为生产和再次写出来的.p12文件。 withProductionDestination(),与刚刚被写出来的.p12 - 并提出方案,通过使用API​​,推送消息给生产服务器。

  8. 我们安装从App Store中。 可悲的是,该通知从未交付。

是不是有什么我们错过了什么? 顺便说一句,我们在STEP5创建的ID是看起来像“XXX.com.company.appname”,但在应用程序的包标识,我们只是没有设置前缀“com.company.appname”的一部分。 被这可能是什么问题?

任何想法表示欢迎。

请我们的救星。 谢谢。

Answer 1:

上述评论是不正确。 该应用程序ID具有包ID之前的前缀:

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

你应该检查你的provisioning profile,以确保它包含正确的APS权利:

验证在预配置配置文件的权利是正确的。 要做到这一点,打开一个文本编辑器中文件名为.mobileprovision。 该文件的内容的XML结构。 在应享权利字典查找APS-环境的关键。 对于一个开发配置文件时,该键的字符串值应当是发展; 对于发行配置文件,该字符串值应为生产

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

你应该事先把它释放到应用商店的即席供应配置文件测试您的应用程序。 的自组织轮廓的工作原理与生产推动环境。

编辑:

关于设备令牌一些报价:

从本地和推送通知编程指南 :

需注意的是,在生产环境中的设备标识,并在开发盒(sandbox)环境中的设备标识是不一样的价值。

从技术说明TN2265 :

处理格式不正确的通知

如果推送服务收到的通知是在某些方面不正确的简单的二进制接口断开连接。 你的供应商可以响应于发送通知认为这是一个EPIPE或破损管道错误。 在另一方面,增强二进制接口将发送什么是错的丢弃连接之前通知的详细信息的错误响应。 要确保你的供应商渔获物和妥善处理这些条件。

最常见的问题是一个无效的设备令牌。 如果令牌从沙盒环境,比如当你正在测试在内部开发版本的来了,你不能将它发送到生产推送服务。 每个推环境下会发出相同的设备或计算机不同的令牌。 如果你发送一个设备令牌到错误的环境,推送服务会认为这是一个无效的令牌,并丢弃通知。

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



文章来源: apple push notification not working in production