HttpNotificationChannel.Find始终返回null

时间:2015-04-17 19:23:14

标签: windows-phone-8 push-notification

经过一些神奇的转变(我真的错过了这个时刻),我的应用程序现在拒绝按名称找到现有的推送频道。 运行后运行 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)上进行了测试

1 个答案:

答案 0 :(得分:2)

这是Windows Phone 8.1中的已知模式。由于它在幕后使用WNS而不是MPNS,因此无论何时启动应用程序,您都需要始终询问新的渠道uri。如果您在Windows Phone 8.0中运行相同的代码,您将获得预期的行为。