经过一些神奇的转变(我真的错过了这个时刻),我的应用程序现在拒绝按名称找到现有的推送频道。 运行后运行 HttpNotificationChannel.Find 不断返回 null
这个问题的主要奥秘是我的代码(下面列出的)是大约一年前写的,上次我检查过,工作正常。
我唯一的假设是,在应用程序终止后,意外调用了 UnbindToShellToast 并删除了推送渠道。我已经仔细检查了所有内容,并从我的代码中删除了任何单个 UnbindToShellToast 调用,并且每次运行时仍会返回 null 。
那么,我的问题是什么?也许我正在为Windows手机开发?
_httpChannel = HttpNotificationChannel.Find(ChannelName);
if (_httpChannel == null)
{
_httpChannel = new HttpNotificationChannel(ChannelName);
}
_channelUri = Observable.Create<string>(observer =>
{
if (_httpChannel != null && _httpChannel.ChannelUri != null && _httpChannel.ChannelUri.OriginalString.IsNotEmpty())
{
observer.OnNext(_httpChannel.ChannelUri.OriginalString);
}
else
{
observer.OnNext(string.Empty);
}
return Observable.FromEventPattern<NotificationChannelUriEventArgs>(_httpChannel, "ChannelUriUpdated")
.Select(i => i.EventArgs.ChannelUri.OriginalString).Subscribe(observer);
});
if (_httpChannel.ChannelUri == null)
{
try
{
_httpChannel.Open();
}
catch (Exception ex)
{
Debug.WriteLine("PushChannel Open failed: " + ex.Message);
}
}
if (!_httpChannel.IsShellToastBound)
{
try
{
_httpChannel.BindToShellToast();
}
catch (Exception ex)
{
Debug.WriteLine("PushChannel BindToShellToast failed: " + ex.Message);
}
}
此代码在Lumia 1520(8.10.14234.375)上进行了测试
答案 0 :(得分:2)
这是Windows Phone 8.1中的已知模式。由于它在幕后使用WNS而不是MPNS,因此无论何时启动应用程序,您都需要始终询问新的渠道uri。如果您在Windows Phone 8.0中运行相同的代码,您将获得预期的行为。