在 Windows phone silverlight 8.1 上接收 WNS 推送通知

Receive WNS push notfication on Windows phone silverlight 8.1

我有 windows phone 8.1 silverlight 应用程序,我想在其中使用新框架 WNS 接收通知。

我在 package.appxmanifest 中:<identity name="4657xxxxxxx" publisher="CN=xxxxx" version="1.0.0.0"/> 并将其添加到移动服务中心。

为此,我删除了对 MPNS 使用的旧引用,并为 WNS 添加了以下内容:

using Windows.UI.Notifications;

using Windows.Networking.PushNotifications;

using Windows.UI.StartScreen;

这导致了一种获取 channelURI 的新方法:

 public static PushNotificationChannel CurrentChannel { get; private set; }

    public async static Task<bool> UploadChannel()
    {
        bool newChannel = false;
        var channel = await Windows.Networking.PushNotifications.PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
        var settings = Windows.Storage.ApplicationData.Current.LocalSettings.Values;
        object oldChannel;
        settings.TryGetValue("channelURI", out oldChannel);
        if ((oldChannel as PushNotificationChannel).Uri != CurrentChannel.Uri)
        {
            settings.Add("channelURI", CurrentChannel);
            newChannel = true;
        }
        try
        {
            await App.MobileService.GetPush().RegisterNativeAsync(channel.Uri);
        }
        catch (Exception exception)
        {
            CurrentChannel.Close();
            HandleRegisterException(exception);
        }

        CurrentChannel.PushNotificationReceived += CurrentChannel_PushNotificationReceived;
        return newChannel;
    }
    private static void HandleRegisterException(Exception exception)
    {
        MessageBox.Show("error - retry pushchannel");
    }

此外,我删除了基于 microsofts update infoID_CAP_PushNotification 我没有收到频道 我收到错误消息:

The application does not have the cloud notification capability. (Exception from HRESULT: 0x803E0110)

解决方案 搜索错误和 found this link,这可以通过访问 package.appxmanifest 并启用 Internet(客户端和服务器)来解决,如下面的答案所述。

错误 2 那么 UploadChannel() 函数应该可以工作了。然而,Register API 调用 await App.MobileService.GetPush().RegisterNativeAsync(channel.Uri); 导致服务器出错:

Message='Could not register with the 'mpns' platform. Error received: 'Unsupported channel uri: 'https://db3.notify.windows.com . . . .

这个错误是有道理的,但我不知道如何解决它。

埃克斯特拉 在服务器上,我可以订阅 URI,并接收通知。但不是在客户端。这是应该的还是?

添加 internetClient 功能应该可以解决此错误。

创建通知渠道导致 WPN_E_CLOUD_INCAPABLE 错误 原因:您的应用尚未在其应用清单 (package.appxmanifest) 中声明互联网功能。 修复:确保您的应用程序清单已声明互联网功能。在 Visual Studio 清单编辑器中,您会在 Capabilities 选项卡下找到此选项作为 Internet (Client)。

在客户端:

理想情况下,要使用 WNS,您应该从 WMAppManifest.xml 中删除所有对 MPNS 的引用,并将 Windows 商店提供的信息添加到您的 package.appxmanifest。

我了解到您正在从 WP8 迁移到 WP8.1。因此,在您的 package.appxmanifest 中,编辑代码使其看起来像这样:

<Identity Name="4657xxxxxxx" Publisher="CN=xxxxx" Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="xxxx" PhonePublisherId="00000000-0000-0000-0000-000000000000" />

注意:PhonePublisherId 中的 0 是有意的。我不知道为什么,但如果我不提供它们,应用程序将无法运行。

您正在正确执行频道 uri 请求:

PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
string channelUri = channel.Uri;

您还应该在 Package.appxmanifest 中设置 Internet(客户端和服务器) 功能。

要在客户端接收通知,您应该按照此处所述拦截收到的通知: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj709907.aspx

在服务器端:

出现“不支持的频道 URI”错误是因为您正在使用 MPNS 方法在您的 Azure 服务器中处理 URI。

使用 WNS 的正确方法请参考此处:http://azure.microsoft.com/en-us/documentation/articles/mobile-services-dotnet-backend-windows-universal-dotnet-get-started-push/

Azure Mobile 的 .NET 客户端 SDK 当前不支持在 Windows Phone 8.1 Silverlight 应用程序中使用 WNS。您必须使用 MPN 或将您的项目更改为非 silverlight 项目类型。

参考(见 Elio 的回复):https://social.msdn.microsoft.com/Forums/azure/en-US/1aa29977-a26d-4054-89b2-c853cbd35c18/wns-for-windows-phone-silverlight-81-apps-with-azure-mobile-services?forum=azuremobile

我不确定他们是否会更新它以支持它,因为 Silveright for 8.1 主要是为了向后兼容现有的应用程序,并且没有多少人使用移动服务,因为它是更新的。

就我而言,select 我的项目设置中的 ARM 平台成功了。我在 "Any CPU".