Windows Phone 7 推送通知
Posted
技术标签:
【中文标题】Windows Phone 7 推送通知【英文标题】:Windows Phone 7 Push Notification 【发布时间】:2013-11-18 07:05:43 【问题描述】:我正在开发一个启用推送通知的应用程序。我有一个向我发送通知的网络服务。为了在我的 WP7 应用程序中实现推送通知,我编写了以下代码。
从下面的代码创建了一个 Uri
channel = new HttpNotificationChannel("Diary");
channel.ShellToastNotificationReceived += channel_ShellToastNotificationReceived;
channel.ChannelUriUpdated += channel_ChannelUriUpdated;
channel.ErrorOccurred += channel_ErrorOccurred;
channel.Open();
channel.BindToShellToast();
channel.BindToShellTile();
通过调用上述方法,我得到了一个 uri http://dm2.notify.live.net/throttledthirdparty/01.00/AQHhBKglq-YiSoltOFnZwEWxAgAAAAADBwAAAAQUZm52OkJCMjg1QTg1QkZDMkUxREQFBlVTU0MwMQ
这是我应该给我的网络服务团队的 Uri。
但是每次我打开我的应用程序时,我的频道 uri 都会发生变化。为什么这是动态的?请让我直接告诉我我是朝着正确的方向前进还是应该在某个地方注册我的应用程序以获取 uri?
【问题讨论】:
当您尝试获取该网址时,您是在调试模拟器还是您的原始设备? 我在我的 WP7 设备上试过.. 我找到了。当我启动应用程序时,我总是关闭通道,因此它正在创建一个新的通道 uri。但我有第二个问题。我将 uri 提供给了 Web 服务。他们发送了通知。但是 channel_ShellToastNotificationReceived 没有触发。 您是否有一些额外的代码要分享,例如 XML 模板和定义 ShellToastNotificationReceived 的类? 如果您的应用在后台,它不会触发。 【参考方案1】:如果您的应用程序在前台,然后您发送通知,则只会触发 channel_ShellToastNotificationReceived
事件。
如果您的应用程序未在前台运行,则不会触发此事件,而不是此应用程序导航到您在通知"<wp:Param>/Home.xaml</wp:Param>"
(此处为 Home.xaml)的有效负载中提到的页面(如果您提供了该页面) .
如果您没有在<wp:Param>
中传递任何东西,那么下面编写的代码将运行:
// 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);
pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived);
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()));
此代码必须在您编写的代码的 else 部分。 如果您提供更多代码(例如有效负载和为接收通知而编写的代码),我们可以提供更多帮助。
【讨论】:
以上是关于Windows Phone 7 推送通知的主要内容,如果未能解决你的问题,请参考以下文章
应用程序未运行时的 Windows Phone 7 推送通知
在创建通知通道 Windows Phone 7 时获取 MPNS 返回到推送客户端的 URI