1

我正在测试设备已经卸载应用程序的情况。

当我尝试通过 JavaPNS 向卸载应用程序的 iPhone 推送通知时,我获得了成功,但在设备中没有收到任何消息。

为什么即使设备上不再安装相关应用程序,JavaPNS 仍返回成功?我该如何解决这个问题?

        for (PushedNotification notification : notifications) {
            if (notification.isSuccessful()) {
                //success
            } else {
                iPhoneFailedPushed += 1;
                String deviceId = notification.getDevice() != null ? notification.getDevice().getDeviceId() : "";
                String exception = notification.getException() != null ? notification.getException().getMessage() : "";
                /* Add code here to remove invalidToken from database */
                if (notification.getResponse() != null)
                {
                    //show error code
                }
                else
                {
                    //show exception                
                }
                //log fail token
            }
        }
4

1 回答 1

1

在这种情况下,您将永远不会收到错误响应数据包,因为这是一个有效的设备令牌(卸载应用程序不会改变它)。检测应用程序已卸载的唯一方法是使用反馈服务。

从 APNS 文档:

如果提供者尝试向应用程序发送推送通知,但该应用程序不再存在于设备上,则设备会将该事实报告给 Apple Push Notification Service。这种情况经常发生在用户卸载应用程序时。如果设备报告应用程序的交付尝试失败,APNs 需要某种方式通知提供者,以便它可以避免向该设备发送通知。这样做可以减少不必要的消息开销并提高整体系统性能。

为此,Apple Push Notification Service 包含一个反馈服务,APN 会不断更新每个应用程序的失败交付尝试设备列表。设备由以二进制格式编码的设备令牌标识。提供商应定期查询反馈服务以获取其应用程序的设备令牌列表,每个设备令牌都由其主题标识。然后,在验证应用程序最近没有在识别的设备上重新注册后,提供商应该停止向这些设备发送通知。

于 2013-01-04T15:12:29.607 回答