Windows Phone 8 推送通知 - 不支持的频道 uri

Posted

技术标签:

【中文标题】Windows Phone 8 推送通知 - 不支持的频道 uri【英文标题】:Windows Phone 8 Push Notification - Unsupported channel uri 【发布时间】:2014-09-25 13:25:10 【问题描述】:

所以我试图让推送通知在 Azure 和 windows phone 8 上工作,但我得到一个 Unsupported channel uri: 'http://s.notify....' 异常。我们让它与 androidios 一起使用,但我在使用 windows phone 时遇到了问题。因此,在 windows phone 上首先调用的代码如下所示。这给了我一个如下所示的 Uri:

http://s.notify.live.net/u/1/db3/HmQAAABvGpd1XkjaC-XkYBpLYRrzC_DuH5ahcYzhdl8bT38ZJwNhI7_RGjG2ggirG0P1LJ2e6QAYm0uslRnGqcaImzdq/cHYtZGV2ZWxvcC1tZXNzYWdlcw/7A7WUjse3k2tlLMokVXD6g/rJ4ipeALhkNuxmeeJAAdsrrKRhY

我得到这个代码的方法是用这个代码:

HttpNotificationChannel pushChannel;

        // Try to find the push channel.
        pushChannel = HttpNotificationChannel.Find(App.HubName);

        // If the channel was not found, then create a new connection to the push service.
        if (pushChannel == null)
        
            pushChannel = new HttpNotificationChannel(App.HubName, App.ServiceName);

            // Register for all the events before attempting to open the channel.
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

            // Register for this notification only if you need to receive the notifications while your application is running.
            pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

            pushChannel.Open();

            // Bind this new channel for Tile events.
            pushChannel.BindToShellToast();
        
        else
        
            // The channel was already open, so just register for all the events.
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

            // Register for this notification only if you need to receive the notifications while your application is running.
            pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

            // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point.
            System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
            MessageBox.Show(String.Format("Channel Uri is 0", pushChannel.ChannelUri.ToString()));
        

之后,我将 pushChannel.ChannelUri 发送到服务器以创建我的设备的后端注册。调用时出现错误(Unsupported channel uri):

var registrationDescription = await _hub.CreateOrUpdateRegistrationAsync(registration);

报名来源:

RegistrationDescription registration = new WindowsTemplateRegistrationDescription(request.Handle, request.Template);

Handle是我发给服务器的请求Uri,模板是xml模板。

现在我不知道出了什么问题,并且因为这个错误而变得有点疯狂。特别是因为代码适用于 android 和 ios 但不适用于 wp8。我也尝试过使用 PushNotificationChannelManager,但它只是在执行 CreatePushNotificationChannelForApplicationAsync 调用时崩溃。

提前致谢

【问题讨论】:

【参考方案1】:

在 WinPhone 8.0 之前,该平台的推送通知由“MPNS”(Microsoft 推送通知系统)完成。在 Windows Phone 8.1 上,现在有两个选项:如果您正在构建新的通用或“商店”版本,您将使用与常规 Windows 商店应用程序(WNS - Windows 通知系统)相同的版本。您正在做的是在同一代码中混合两个版本的通知。当您使用 HttpPushNotification 类(来自 Microsoft.Phone.Notification 命名空间)创建通知通道时,您使用的是 MPNS 注册。如果是这种情况,那么您不应该使用WindowsTemplateRegistrationDescription 类;相反,请使用MpnsTemplateRegistrationDescription 之一。

【讨论】:

【参考方案2】:

如果您在手机模拟器中运行代码: 模拟器不支持接收推送消息 - 您必须使用“真实”电话。

【讨论】:

您好,谢谢您的提示。起初我使用的是模拟器。现在我在一个真实的设备上。但问题不在于接收,而是我们自己的后端和 azure 通知中心之间的注册。 那不正确 - Windows Phone 模拟器能够接收推送通知。 @carlosfigueira:奇怪 - 因为通过电话 8.1 不断告诉我在每个程序开始时 您需要更新应用清单以允许推送通知。我刚刚尝试在 WinPhone8.1 项目中按照azure.microsoft.com/en-us/documentation/articles/… 的教程进行操作,结果很好。

以上是关于Windows Phone 8 推送通知 - 不支持的频道 uri的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 8 上的推送通知处理程序

通过asp.net windows phone 8发送推送通知

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

如何发送推送通知 windows phone 8 应用程序?

使用 Azure 在 Windows phone 8 中推送通知

Windows Phone 8 推送通知 - 不支持的频道 uri