Azure 通知中心和 Apple APNS 推送通知取消注册设备
Posted
技术标签:
【中文标题】Azure 通知中心和 Apple APNS 推送通知取消注册设备【英文标题】:Azure Notification Hub and Apple APNS Push Notifications unregistering devices 【发布时间】:2016-11-10 16:50:28 【问题描述】:我目前正在使用 Xamarin Unified ios 项目在 VS 中构建应用程序。应用程序的一项要求是使用推送通知。问题是我们的测试设备/应用程序在第一次注册时没有任何问题,我们可以在 azure 门户和 azure 服务总线中看到注册事件。我还使用 VS 中的“服务总线资源管理器”应用程序和服务器资源管理器功能确认了初始注册。
发送测试推送通知时出现问题。根据我也有权访问的所有日志,消息已成功推送到苹果 APNS 服务器,我看不到任何失败作为 PNS 请求的一部分返回。但是,一旦完成,设备注册就会被删除,并且通知永远不会到达测试设备。
我的理解是,Azure 应用程序中心会自行处理 PNS 拒绝以整理设备注册。这本身并不是一个糟糕的想法,但由于缺乏日志记录,很难确定根本原因。我为此做了很多荒谬的谷歌搜索,很多人建议使用的苹果证书存在问题。我已经删除、重新创建、辞职、验证了 APNS 证书和配置文件,直到我用完组合。这些都没有解决问题。
为了使问题更加混乱,如果我使用诸如“http://pushtry.com”或“http://pushwatch.com”之类的服务并上传证书和设备令牌,它将允许我成功向设备推送通知。
我是否遗漏了一些明显的东西?或者通知中心是否难以为 APNS 设置和调试?
您可以提供的任何帮助将不胜感激,我会发布一些代码,但我知道设备注册了正确的设备令牌,我认为此时没有必要,但请随时告诉我.非常感谢。
【问题讨论】:
【参考方案1】:还需要注意的是,如果您使用的是 Azure 通知中心 APNS,如果应用程序模式未设置为生产环境,它将取消注册设备。部署到应用商店后,您需要将 Azure 通知中心中的“应用程序模式”从沙盒切换到生产。否则您的设备注册将被取消注册。
我在沙盒和生产环境中使用相同的令牌/密钥,没有任何问题。
【讨论】:
【参考方案2】:经过许多工时和运气而非任何逻辑过程,我们确定“Azure 通知中心”有一个内置验证器,用于传递给 APNS 的苹果设备令牌。因此,即使有多个示例和答案建议向通知中心提交不带空格或符号的设备令牌,这实际上是错误的方法。设备令牌应始终以“原样”状态提交到“Azure 通知中心”,无需在 Xamarin.IOS 应用程序内进行任何验证。尽管这似乎是一件容易被忽视的事情,但在 google 上有很多相互矛盾的证据,而且 Azure 的文档对提交的设备令牌的格式几乎没有说明。无论如何,希望有一天这会对其他人有所帮助。
-- 编辑--
来自 Apple 的设备令牌格式:
许多在线资源建议将其传递到通知中心的格式为:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 没有空格或 ''
但是,它应该传递到通知中心,因为它是从 Apple 接收的。
【讨论】:
您好,我在通知中心团队工作。我们不验证句柄并按原样传递它。您的问题听起来更面向生产/开发使用。每个集线器都可以声明为 prod 或 dev,并且知道如何与 apns 的 prod 或 dev 端点通信。以下组合应该有效:1. prod/test 统一 apns 证书、prod 配置文件、prod hub 2. prod/test 统一 apns 证书、dev 配置文件、dev hub 你能确认这两个都不起作用吗? Hubs 在 apns 返回无效令牌/过期令牌错误后删除注册,这意味着如果将开发设备令牌传递给 prod apns 端点,端点将拒绝它并导致设备删除。反之亦然。 大家都非常清楚,您大概可以从我的原始帖子中确定,但是据说上述答案正是导致能够成功发送测试通知并解决 Azure 问题的场景通知中心取消注册设备。 大家好,我正在尝试以“原样”状态在集线器中注册设备令牌,但从通知集线器得到相同的响应。当我发送测试通知时,它会从通知中心删除注册。以上是关于Azure 通知中心和 Apple APNS 推送通知取消注册设备的主要内容,如果未能解决你的问题,请参考以下文章
APNS Apple 推送通知服务未收到来自 Apple 的成功消息
适用于 Apple 和 Android 的 Azure 通知中心