Mat*_*asS 5 silverlight silverlight-3.0 push-notification windows-phone-7 mpns
更新:情节变浓.我更改了我的频道名称,它突然正常工作(这意味着我的推送服务不是问题,因为我从Microsoft推送通知服务器获得了相同的HTTP响应).
但是,对我来说,这不是一个解决方案.我怎样才能测试这个并知道我的用户是否正在获得他们的推送通知,如果我得到相同的响应,当它不像我那样工作时?
[原始帖子]
我一直试图将推送通知发送到我的Windows Phone 7设备,但我遇到了很大的问题,我找不到任何答案.我将从c#代码开始.
我使用以下C#代码设置推送通知.
private HttpNotificationChannel channel;
private static string PUSH_CHANNEL = "MySpecialPushChannel";
private Uri PushUri = null;
private bool IsPushRegistered = false;
public void StartPushSubscription()
{
try
{
channel = HttpNotificationChannel.Find(PUSH_CHANNEL);
}
catch
{}
if (channel != null)
{
PushUri = channel.ChannelUri;
if (!channel.IsShellTileBound)
channel.BindToShellTile();
}
else
{
channel = new HttpNotificationChannel(PUSH_CHANNEL);
channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(channel_ChannelUriUpdated);
channel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(channel_HttpNotificationReceived);
channel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(channel_ErrorOccurred);
try
{
channel.Open();
channel.BindToShellTile();
}
catch (Exception err)
{
channel = null;
IsPushRegistered = false;
// Code to try again
}
}
}
void channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
PushUri = e.ChannelUri;
IsPushRegistered = true;
}
Run Code Online (Sandbox Code Playgroud)
我遵循标准的WP7推送结构:
好的......到目前为止一切顺利.没有错误,我得到我的Uri,把它发送到我的服务就好了.我将我的应用程序固定到开始屏幕,我的服务向Uri发送推送请求(仅发送计数,以便我在右上角得到一个小推送计数).我通过以下方式获得HTTP 200状态:
DeviceConnectionStatus =>已连接
NotificationStatus =>已收到
SubscriptionStatus =>有效
然后......没什么.我的应用程序上没有显示推送状态.我现在已经在我的设备上,在模拟器中,在另一台设备上以及使用多个服务器上尝试了它,结果总是相同的.一切看起来都在起作用,除了它不起作用的事实.
然而,对我来说,这不是一个解决方案。如果我在它不工作时得到与正常工作时相同的响应,我将如何测试这一点并知道我的用户正在收到他们的推送通知?
答案是,你不能。这是 WP7 处理通知方式的限制。
对于 Tile 和 Toast 等结构化通知,如果您收到 Connected/Active/Received/200 响应,则可以知道 MPNS 接受了您的通知请求。但是,这并不意味着您已经发送了有效的 XML 负载。
处理解析 XML 的组件是推送客户端,它是在手机上运行的进程,用于接受推送通知并将其发送给适当的应用程序、显示 toast 等。
如果您发送了无效的 XML,则完全没有迹象表明您已经这样做了。最多,如果您尝试再次将通知发送到同一推送通道 URI,您将收到 404 响应。显然,获取特定应用程序的无效 XML 有效负载会导致该应用程序的推送通道关闭,从而要求您再次执行整个过程。
我在与我们的服务器团队进行调试时发现了这一点,并尝试让手机显示备用活动磁贴。我能为您提供的唯一建议是对您的 XML 进行四重检查。
对于具有无效 XML 的 Toast 通知,您将在推送通知通道的错误事件处理程序中收到错误,因为您可以在应用程序处于活动状态时发送/接收 Toast 通知。
如果 Microsoft 的任何人正在阅读本文,请提供有关推送通知系统中可能的错误状态的更全面的文档。我们还需要一个用于 Tile 通知的事件处理程序,或者至少允许我们在应用程序位于前台时接收 Tile 通知并触发通知通道错误事件,以便我们可以知道我们的 XML 有效负载无效。
特别是如果您的 Web 服务不是使用 WCF、.NET、Azure 等构建的,那么在 WP7 上使用推送通知就像盲目徘徊。
异常消息的文档不应显示为“ ”InvalidOperationException(Failed to open channel):“当通知通道打开失败时引发此异常。请尝试再次打开通知通道。” (参考)
| 归档时间: |
|
| 查看次数: |
1644 次 |
| 最近记录: |