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....' 异常。我们让它与 android 和 ios 一起使用,但我在使用 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的主要内容,如果未能解决你的问题,请参考以下文章
通过asp.net windows phone 8发送推送通知
Windows Phone 8 推送通知 (MPNS) 服务器代码
如何发送推送通知 windows phone 8 应用程序?