我们在Azure Notification Hub中使用安装模型向iOS设备发送消息。 InstallationId是在移动应用程序安装到设备后首次运行时创建的。移动应用程序还从APNS请求PushToken。然后移动应用程序使用InstallationId和PushToken调用后端Web服务,后者调用NotificationHubClient.CreateOrUpdateInstallationAsync()
方法在Notification Hub中注册安装。
注册后,解决方案运行良好。移动应用按预期接收推送通知。
如果我从移动设备中删除该应用并再次安装,则会出现问题。当然,在这种情况下,会生成新的InstallationId,并从APNS请求新的PushToken。 NotificationHubClient.CreateOrUpdateInstallationAsync()
方法很好地注册了新安装。此外,我可以向移动应用程序发送推送消息,并按预期收到。但是在发送第一条消息并等待几分钟后,设备停止接收消息。设备不会收到任何以下推送消息。
问题不在APNS中,因为我可以通过APNS服务将推送消息直接发送到移动应用程序,移动应用程序会收到它们。但设备不会接收Azure通知中心发送的消息。
每次都不会发生此问题。有时删除和安装移动应用程序不会导致问题。
有人看到这个问题吗?怎么解决?任何解决方法?
更新 经过进一步分析后,我发现了以下结果:
我们完全重新创建了通知中心,并按照推荐的方式上传了有效的沙盒证书,但问题仍然存在;
问题发生时,Azure Monitor页面(在Classic Portal中)显示“无效通道错误”和“APNS过期通道错误”统计指标中的数字。
我们监控了PushChannelExpired
个安装字段,发现它的更改次数与预期不符。以下是示例:
InstallationId = 1, PushChannelExpired = False
。
InstallationId = 1, PushChannelExpired = False
;
InstallationId = 2, PushChannelExpired = False
。
InstallationId = 1, PushChannelExpired = False
;
InstallationId = 2, PushChannelExpired = True
。
InstallationId = 1, PushChannelExpired = True
;
InstallationId = 2, PushChannelExpired = True
。
因此,似乎问题可能与PushChannelExpired
参数有关,可以传递给NotificationHubClient.CreateOrUpdateInstallationAsync()
方法。现在我们总是将null传递给这个参数。
我只找到了这个参数的一个简短描述here:“如果更改了pushChannel,则将expiredPushChannel设置为true。”
您是否认为可以修复配置PushChannelExpired
参数的问题?如果是,该参数的行为是什么?