Windows phone 8 推送通知空通道 uri

Posted

技术标签:

【中文标题】Windows phone 8 推送通知空通道 uri【英文标题】:Windows phone 8 push notification null channel uri 【发布时间】:2013-08-07 21:47:29 【问题描述】:

我知道这已被多次提出,但找不到答案。

我正在尝试使用以下代码在我的应用中设置推送通知,但是我遇到了频道 uri null 问题。

我已经在 4 个不同的设备 + 模拟器上尝试了该应用程序,所有设备都在相同的网络条件下(工作 WiFi - 家庭 WiFi - 3G),其中 2 个设备是 Lumia 920,两者都无法获取通道 uri,而其他 2 个设备HTC 8X 和 Lumia 820 可以成功获取频道 uri 并注册推送。

模拟器也可以成功获取频道uri。

在其中一台 Lumia 920 上,它设法获得了频道 uri,但我再次卸载并安装了该应用程序,从那时起就无法获得任何频道 uri。

以下是我的场景:

1- 安装在 3G 上的 Lumia 920 Black 工作正常,卸载/重新安装后停止在任何连接上工作(3G - 工作 WiFi - 家庭 WiFi) 2- Lumia 920 Yellow 安装在 3G 上 - 工作 WiFi - 家庭 WIfi 从未设法获得频道 uri 3- HTC 8X on 3G - 工作 WiFi - 家庭 WiFi 在所有 3 个网络上都运行良好 4- Lumia 820 和 HTC 8X 一样好用

请注意,其他应用上的推送通知在所有 4 台设备上都可以正常工作。

对于频道 null uri 的任何反馈/建议,我将不胜感激

下面是我使用的代码,和MSDN提供的代码是一样的

  public MainPage()
    
        /// Holds the push channel that is created or found.
        HttpNotificationChannel pushChannel;

        // The name of our push channel.
        string channelName = "ToastSampleChannel";

        InitializeComponent();

        // Try to find the push channel.
        pushChannel = HttpNotificationChannel.Find(channelName);

        // If the channel was not found, then create a new connection to the push service.
        if (pushChannel == null)
        
            pushChannel = new HttpNotificationChannel(channelName);

            // 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 toast 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()));

        
    

【问题讨论】:

在 Lumia 820 上也遇到此问题。如果 URI 为空,已尝试处理和重新创建 HttpNotificationChannel。没什么区别。 URI 以 null 开头,并且没有引发 ChannelUriUpdated。 我现在正在恢复我的 lumia 920 black,希望如果它在恢复时没有变砖,我会对其进行测试并在此处发布我的结果...如果有任何解决方案请帮助 好的,所以在我的 lumia 920 变砖并设法修复它之后,我可以很高兴地说它从第一次启动就成功地获取了一个频道 uri,并且推送工作正常......任何人都有任何想法为什么在恢复之前无法获取频道 uri? 似乎用户注意到了 WP8 通知的问题。搜索“windows phone 通知问题”。 有时当您使用 PNS 开发应用程序并对其进行大量调试时,您必须等待才能继续。 【参考方案1】:

我也遇到过同样的问题。并通过将我的 HTC windows 手机设置为正确的日期和时间来解决它。一旦我自动设置了日期和时间,我的混合应用程序 wp8 成功注册了 pushplugin 并接收了 MPNS Channeluri。

【讨论】:

【参考方案2】:

ChannelUri 为空,因为我正在开发的新手机无法正确设置日期和时间。一旦我将时间切换为手动设置,然后修复它的时间、日期和地区,然后将其切换回自动,一切正常,例如 ssl 证书、Windows 手机更新,最重要的是 ChannelUri ;)

【讨论】:

【参考方案3】:

尝试进入设置>“手机+SIM”并关闭“数据连接”选项,这有时会奏效吗?

您是否尝试过更改设置 > 数据感知中的选项?那里有限制背景数据的选项?

是否启用了省电模式?这会在电池电量不足等情况下限制使用。

如上所述,您是否检查过设备上的日期和时间?可能是日期和时间的自动设置引起的。您可以手动修复此问题,然后切换回自动。它有效。

【讨论】:

【参考方案4】:

尝试使用本地 wifi 连接而不是手机数据连接。根据此处的 cmet 之一禁用电话“数据连接”将达到此结果。虽然我试过这个但失败了,但它让我注意到我的手机没有连接到我们的 wifi 路由器。

注意:在我的情况下,我们的小区覆盖范围很差,因此我们使用特殊的沃达丰路由器,通过我们的固网互联网连接重定向我们所有的手机数据、通话等。一旦我绕过那个路由器,我就会收到一个 ChannelUri。我还在工作中尝试了使用不同手机信号塔的手机/应用程序,这很好。

【讨论】:

【参考方案5】:

我尝试手动设置日期,但没有效果。最终对我有用的是在没有 SIM 卡的情况下实际启动手机,关闭,重新插入 SIM 并重新启动。这让我再次获得了 ChannelUri。

怀疑这可能与建议toggling the SIM's data connection的TripVoltage的建议有关。

【讨论】:

以上是关于Windows phone 8 推送通知空通道 uri的主要内容,如果未能解决你的问题,请参考以下文章

在创建通知通道 Windows Phone 7 时获取 MPNS 返回到推送客户端的 URI

Windows phone 8 推送通知

Pushwoosh 为 windows Phone 8.1 推送 Toast 通知

Windows Phone 8 上的推送通知处理程序

通过asp.net windows phone 8发送推送通知

Windows Phone 8 推送通知 (MPNS) 服务器代码