推送通知的实施和测试良好,但是最近遇到了一个奇怪的问题,即它在IT环境中停止了推送通知,并在UAT中正常工作。
在两种环境(IT和UAT)中使用相同的APS证书,并且应用程序也具有相同的APS证书。
在移动设备中生成的设备令牌已在各自的环境中的两个用户中注册。
当我们尝试从UAT服务器推送通知时,它是成功的;当我们尝试从IT服务器推送通知时,响应为“ BadDeviceToken”
"message": "Notification failed for the devices XXXXXXXXXX8275A19D4EE30C73C18CFEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX : reason -BadDeviceToken"
试图解决:
1)删除并重新安装该应用程序,并首先进行IT和UAT测试。但结果相同–在UAT中可以正常工作,但在IT中却不能。
2)两台服务器上的经过验证的APS证书相同。
3)测试了一个旧的iOS版本,在早期的IT上,推送通知在该版本上运行良好。但结果相同–在UAT中可以正常工作,但在IT中却不能。
期望是推送通知应该在两种环境下都有效。
答案 0 :(得分:0)
警告:主要问题之一是误导性术语,例如生产,开发,环境上。 在本文的后面,我将把您的“ IT和UAT环境”称为后端(开发后端,生产后端)。 环境一词将用于APNS生产与沙盒环境。另外, development 不仅是dev后端,而且还是可以用来归档iOS版本的方法。
问题是您的应用所在的APNS环境(沙盒与生产环境)与后端向其发送请求的环境不一致。
考虑以下示例:
您拥有开发和生产后端。 开发后端将APNS请求发送到沙盒环境。 生产后端将APNS请求发送到生产环境。 通常是这样的。
接下来,您要构建与开发后端通信的应用程序。 如果您进行开发构建(使用开发方法存档的构建版本),则您的应用将处于沙盒模式,并且由于您的开发后端将APNS请求发送到沙盒,因此推送通知将正在工作。 但是,如果您构建AdHoc / Appstore版本,则您的应用将处于生产模式,并且推送通知将停止工作。
现在,如果您要构建与生产后端通信的应用程序,则可以采用另一种方法。 AdHoc / Appstore版本将正常运行,开发版本将无法正常运行。
总而言之,应该使用与环境( Production )相对应的适当方法( AppStore / AdHoc 与 Development )构建您的应用程序相对于沙盒),您的后端向其发送APNS请求。