推送通知时的 MPNS 错误请求 (WP 8.1)

Posted

技术标签:

【中文标题】推送通知时的 MPNS 错误请求 (WP 8.1)【英文标题】:MPNS bad request when push notification (WP 8.1) 【发布时间】:2016-01-11 17:23:19 【问题描述】:

我目前正在为 Windows Phone 8.1 开发基于 Cordova(版本 4.0.0)的移动应用程序。

我从 API Java-MPNS(来自 notnoop 的 github)实现了 Java 代码,以向我的设备发送通知。

当我将通知消息推送到 MPNS 时,我收到此错误:

HTTP/1.1 400 错误请求 [Content-Length: 0, X-WNS-MSG-ID: 50267BB8627BC17D, X-WNS-DEBUG-TRACE: DB5SCH101121935, Strict-Transport-Security: max-age=31536000 ; includeSubDomains, WWW-Authenticate: Bearer, Date: Thu, 07 Jan 2016 09:13:01 GMT] org.apache.http.conn.BasicManagedEntity@1ab5b13

Windows Phone 8 的推送通知服务响应代码文档中,此错误代码表示 XML 文档或通知 URI 格式不正确。

这是我的通知 URI:

https://db5.notify.windows.com/?token=AwYAAAC%2fHaOBh3zOgFjUbZuCSMgzXY29aQDT9wKfpkiPsd85WKBA8muqx4is4r1nBVXQOtRKqe5cc%2fxat7hq6sZBruvm6nQF7p9Sl71TIiqnGvlrdDDw6v0anax4bXUCtflPwEc%3d

这是 XML 文档(由 Java-MPNS 从 Java 类 TileNotification 生成):

<?xml version="1.0" encoding="utf-8"?>
    <wp:Notification xmlns:wp="WPNotification">
        <wp:Tile>
            <wp:Count>1</wp:Count>
            <wp:Title>Demo App Windows</wp:Title>
            <wp:BackContent>New notification</wp:BackContent>
        </wp:Tile>
    </wp:Notification>

当我比较 How to send and receive Tile notifications for Windows Phone 8 文档中的 XML 文档和 XML 文档时,我没有发现任何差异或错误。关于我的通知 URI,我认为链接是正确的。

但是,http://db3.notify.live.net 和 https://db5.notify.windows.com 有什么区别?

有没有人已经在使用这个 API 了?你知道如何解决它吗?

【问题讨论】:

【参考方案1】:

*.notify.live.net 是 MPNS 频道 URI,而 *.notify.windows.com 是 WNS 频道 URI。您正在获取 WNS 频道 URI(也就是您的应用设置为使用 WNS),但您正在尝试使用 MPNS。 400 是因为 WNS 要求您使用 OAuth 进行身份验证。

我会仔细检查您是否真的想在新应用中使用 MPNS 而不是 WNS。 MPNS 在这一点上被认为是遗留的。如果您想在某个时候将您的应用程序移植到 Windows 构建 UWP,则需要切换到 WNS。更多细节/指导可以在这里找到:https://msdn.microsoft.com/en-us/library/windows/apps/dn642085(v=vs.105).aspx

如果您确实需要使用 MPNS,请确保您使用 MPNS API 来请求您的频道:https://msdn.microsoft.com/en-us/library/windows/apps/microsoft.phone.notification(v=vs.105).aspx,而不是 WNS API:https://msdn.microsoft.com/en-us/library/windows/apps/hh465412.aspx。

【讨论】:

感谢您的帮助!我想从您的解释中获得更多信息。我使用的 Java API 仅支持 MPNS。但是,我怎么知道我的 Windows Phone 是 Silverlight 或 Universal 的目标?我正在使用 Cordova 开发一个混合移动应用程序。问题来自我用来获取通道 URI 的 API javascript(API 的名称是 phonegap-plugin-push 以支持 Cordova)。然后这个插件使用 WNS。当我的移动应用程序将在 Windows Store 中时,我应该使用 Azure 通知平台吗? 您好 Paulo,我不熟悉 Cordova,但我假设您在项目的某个地方有一个 WMAppManifest.xml?如果是这样,您能否在 XML 编辑器中打开它并检查 NotificationService 属性。如果值为“MPN”,那么您正在使用 MPNS,并且应该使用 Windows.Phone.Notification API。如果值显示“WNS”,那么您应该使用 Windows.UI.Notifications 要回答有关使用 Azure 通知中心的问题,您不需要使用它。您可以直接在 WNS/MPNS API 之上构建或使用各种其他服务来帮助您推动跨平台(Parse、Urban Airship、Pushwoosh 等) 谢谢你们的回答! @MattHidinger 是的,当然,我的科尔多瓦项目中有一个 WMAppManifest.xml 文件。该文件的名称不同,但没关系。所以,我检查了这个文件,但我没有找到这个属性。我想我必须在这个文件中添加这个属性?我检查了文档,我想我把这个属性“ID_CAP_PUSH_NOTIFICATION”作为 appmanifest 文件中的功能。 [StaceyHanson]:好的,我可以继续使用Java API。感谢您提到的不同服务。 @PauloDev 你能在哪里解决这个问题?我有同样的问题,我也在开发一个 Cordova 应用程序

以上是关于推送通知时的 MPNS 错误请求 (WP 8.1)的主要内容,如果未能解决你的问题,请参考以下文章

注册无配额推送通知

PushSharp 是不是支持 windows phone 8.1 推送通知?

Windows Phone 8 推送通知 (MPNS) 服务器代码

推送通知的 WNS 或 MPNS?

MPNS 推送通知通道从不返回 HTTPS URI

在创建通知通道 Windows Phone 7 时获取 MPNS 返回到推送客户端的 URI