1

我正在 Windows Phone 8.1(不是 silverlight)中开发一个应用程序,它使用 WNS 来接收原始推送通知。

当我通过 Visual Studio 运行我的应用程序时(通过物理设备,而不是在模拟器中),我总是收到推送通知(应用程序在前台,在后台,手机锁定......)所以我认为我的代码可以接收推是正确的。

我的问题是当我在不使用 Visual Studio 的情况下运行我的应用程序时。如果我按下设备上的“应用程序图标”来启动应用程序并将其保持在前台,我会收到推送通知。但是如果我进入手机菜单,或者锁定设备(没有杀死应用程序),我不会收到推送通知,但服务器说 WNS 已发送成功。如果我再次将应用程序置于前台,我会再次收到推送通知......

所以,总结一下:通过 Visual Studio 初始化应用程序,我总是收到 WNS 通知。通过设备初始化应用程序,仅在前台应用程序接收 WNS。服务器总是成功发送 WNS。

这是我接收 WNS 的代码:

public static void OnPushNotificationReceived(PushNotificationChannel channel, PushNotificationReceivedEventArgs e)
{
    Debug.WriteLine("Received WNS notification");

    string notificationContent = String.Empty;
    switch (e.NotificationType)
    {
        case PushNotificationType.Badge:
            Debug.WriteLine("Badge notifications not allowed");
            return;
        case PushNotificationType.Tile:
            Debug.WriteLine("Tile notifications not allowed");
            return;
        case PushNotificationType.Toast:
            Debug.WriteLine("Toast notifications not allowed");
            return;
        case PushNotificationType.Raw:
            notificationContent = e.RawNotification.Content;
            break;
    }

    processWnsNotification(notificationContent);
}

//Show local toast notification
private static void processWnsNotification(string notification)
{
    ToastTemplateType toastTemplateXml = ToastTemplateType.ToastText01;
    XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplateXml);

    XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
    toastTextElements[0].AppendChild(toastXml.CreateTextNode("New message"));

    ToastNotification toast = new ToastNotification(toastXml);

    if(toastNotifier == null)
    {
        toastNotifier = ToastNotificationManager.CreateToastNotifier();
    }
    toastNotifier.Show(toast);
}

任何人都知道发生了什么或我做错了什么?我认为这可能是一个配置问题......但我一直在研究属性和配置文件,但没有成功。

非常感谢!!乔治。

4

1 回答 1

1

这是预期的行为,并且有很好的记录,您的应用程序只有在未暂停或background task注册可以处理原始通知的情况下才会收到原始推送通知。

你会在 Visual Studio 打开时收到它们,因为当附加调试器时,应用程序不会挂起。要调试应用程序的暂停,请转到View->Toolbars并启用Debug Location工具栏,然后启动您的应用程序,然后Suspend从框中选择选项Lifecycle Events。您会注意到您的代码没有执行(使用断点进行测试)。

通知可能由您的服务器发送,但不会被您的手机接收。您可能不检查您的推送请求的响应,但应该有一些迹象表明客户端不可用或类似的东西(状态代码表明可能)。

于 2015-11-13T18:51:28.293 回答