在 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 info 的 ID_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 项目类型。
我不确定他们是否会更新它以支持它,因为 Silveright for 8.1 主要是为了向后兼容现有的应用程序,并且没有多少人使用移动服务,因为它是更新的。
就我而言,select 我的项目设置中的 ARM 平台成功了。我在 "Any CPU".
我有 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 info 的 ID_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 项目类型。
我不确定他们是否会更新它以支持它,因为 Silveright for 8.1 主要是为了向后兼容现有的应用程序,并且没有多少人使用移动服务,因为它是更新的。
就我而言,select 我的项目设置中的 ARM 平台成功了。我在 "Any CPU".