WNS 通知:频道 URL 与调用方应用程序不兼容
WNS Notification : Channel URL incompatible with caller app
我目前正在为 Windows Phone 8.1.
开发基于 Cordova(版本 4.0.0)的移动应用程序
我实现了 API Java-WNS(来自 fernandospr 的 github)的 Java 代码,以向我的设备发送通知。
当我将通知消息推送到 WNS 时,出现此错误:
Client in-bound response
403
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-WNS-DEBUG-TRACE: DB5SCH101111133
Date: Fri, 22 Jan 2016 10:44:55 GMT
Content-Length: 0
X-WNS-STATUS: dropped
X-WNS-ERROR-DESCRIPTION: Channel URL incompatible with caller app
X-WNS-MSG-ID: 6D850FC61AE7FDB5
X-WNS-NOTIFICATIONSTATUS: dropped
以下是配置我的应用以接收通知的不同步骤:
- 我从 windows 开发人员仪表板注册了我的应用程序
- 我有一个 SID 包:ms-app://s-1-15-2-[...]-[...]-[...]-[...]-[ ...]-[...]-[...]-2403721117
- 我也有这样的客户机密(只是一个例子):Nk2C+pmadqcHNQR51lN6F7LGaJYUTRPb
这是我从 WNS 获得的频道 URI :
https://db5.notify.windows.com/?token=AwYAAAD8sfbDrL9h7mN%2bmwlkSkQZCIfv4QKeu1hYRipj2zNvXaMi9ZAax%2f6CDfysyHp61STCO1pCFPt%2b9L4Jod72JhIcjDr8b2GxuUOBMTP%2b6%2bqxEfSB9iZfSATdZbdF7cJHSRA%3d
- 最重要的是,我将我的应用关联到 Visual Studio 的 windows 商店。然后,包名称、发布者显示和发布者 ID 已添加到我的 appxmanifest.file
这是 appxmanifest.file(真实名称“package.phone.appxmanifest 来自 platforms/windows 文件夹和 cordova windows phone 项目):
<?xml version='1.0' encoding='utf-8'?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
<Identity Name="company-name.70**********2" Publisher="CN=02******-****-****-****-***********9" Version="1.1.0.0" />
<mp:PhoneIdentity PhoneProductId="06******-****-****-****-**********k" PhonePublisherId="s*******-****-****-****-***********5" />
<Properties>
<DisplayName>Demo Windows App Phone</DisplayName>
<PublisherDisplayName>My Company Name</PublisherDisplayName>
<Logo>images\StoreLogo.png</Logo>
</Properties>
<Prerequisites>
<OSMinVersion>6.3.1</OSMinVersion>
<OSMaxVersionTested>6.3.1</OSMaxVersionTested>
</Prerequisites>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="com.company-name.demo" StartPage="www/index.html">
<m3:VisualElements BackgroundColor="transparent" Description="CordovaApp" DisplayName="Demo Windows App Phone" ForegroundText="light" Square150x150Logo="images\Square150x150Logo.png" Square44x44Logo="images\Square44x44Logo.png">
<m3:DefaultTile Square71x71Logo="images\Square71x71Logo.png" Wide310x150Logo="images\Wide310x150Logo.png">
<m3:ShowNameOnTiles>
<m3:ShowOn Tile="square150x150Logo" />
<m3:ShowOn Tile="wide310x150Logo" />
</m3:ShowNameOnTiles>
</m3:DefaultTile>
<m3:SplashScreen Image="images\SplashScreenPhone.png" />
</m3:VisualElements>
<ApplicationContentUriRules>
<Rule Match="https://dev.company-name.fr/demo-windows-app/*" Type="include" />
</ApplicationContentUriRules>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClientServer" />
<DeviceCapability Name="webcam" />
<DeviceCapability Name="microphone" />
</Capabilities>
</Package>
从服务器端,我使用两个参数对 WNS 进行身份验证:
- SID 包
- 客户端密码
我检查了关于此错误的不同主题,最有用的答案是将应用关联到 windows 商店。但我一直都这样做,不为我工作。
如果我理解的很好的话,WNS平台只需要知道应用程序ID(SID包)就可以找到我的应用程序并向我的应用程序发送通知。我不需要通过 windows 商店部署我的应用程序。
您知道如何修复它吗?你认为我是忘记了什么还是做错了什么?
编辑:
我想我找到问题了!我正在处理它,当我解决我的问题时,我会回到这里 post 我的解决方案。
我找到了解决我的问题的方法。我很愚蠢,因为我没有看到我的应用程序与 windows 商店的关联与必须生成的 appx 存档之间的关系。我部署了错误的应用程序,这就是我从未收到通知的原因 windows。事实上,错误的 appx 从未关联到 windows 商店...
因此,这是部署链接到 windows 商店的 appx 存档的步骤(来自 Visual Studio 2015 RC):
- 转到项目选项卡并select windows 存储
- 单击创建应用包
- 按照不同的步骤生成带有 windows 商店信息关联的 appx 存档(其中一个步骤是将您的应用程序与 windows 商店相关联)
- 生成的 appx 存档存储到以下文件夹(在我的例子中):C:\Users\pcharpin\Documents\Visual Studio 2015\Projects\demo-app-windows\demo-app-windows\AppPackages\CordovaApp.Phone_1.1.0.0_arm_Test
- 要在您的远程设备上部署此存档,请使用 Windows Phone 应用程序部署 8.1 工具。 Select 目标为远程设备,select 也是应用程序包,即 CordovaApp.Phone_1.1.0.0_arm_Test。最后,单击部署,您的应用程序将部署到您的远程设备上。
- 您已准备好发送通知 windows 并将它们接收到您的 windows phone 设备
所以,不要忘记创建一个应用程序包以将其关联到 windows 商店并可以接收通知 windows。
您可以从 创建 Windows 8.1 应用程序 包(部署步骤除外)的文档中检索有关此的指南。
如果在关联应用程序后通知仍然不起作用,请仔细检查以下配置。
- 转到您帐户的 Windows 开发中心 -> 仪表板
- Select 你的应用 -> 服务 -> 推送通知
- 点击"Live Services site"link
下面"Package SID"有"Application Identity"的配置,比如
<身份名称="09FSERVSD.YourAppName" 发布者="CN=xxxxxx"/>
在文本编辑器中打开您的应用程序 appxmanifest 并确保在 Identify 标记中添加相同的名称。
理想情况下,通过 VS 工具关联应用程序应该使用 "Name" 和 "Publisher" 更新此条目。但在我的例子中,它只更新了 "Publisher",我必须手动设置这个值才能让它工作。这样 WNS 就会知道目标应用程序与关联的应用程序相同,通知应该通过。
希望这对那些在测试 WNS 时遇到错误 "Channel URL incompatible with caller app" 的人有所帮助。
感谢大家,
在我的例子中,Publisher
字段(在 package.windows10.appxmanifest
、package.windows.appxmanifest
和 package.phone.appxmanifest
中)默认为 CN=$username$
。
<Identity Name="com.CordovaApp" Publisher="CN=$username$" Version="2.2.11.0" />
这样设置后,一切顺利:
<Identity Name="COM.CordovaApp" Publisher="CN=11111111-2222-3333-444444444444" Version="2.2.11.0" />
如果您在正确设置后继续收到错误消息 "X-WNS-ERROR-DESCRIPTION: Channel URL incompatible with caller app",请尝试从项目目录中删除 *_TemporaryKey.pfx 文件。
我目前正在为 Windows Phone 8.1.
开发基于 Cordova(版本 4.0.0)的移动应用程序我实现了 API Java-WNS(来自 fernandospr 的 github)的 Java 代码,以向我的设备发送通知。
当我将通知消息推送到 WNS 时,出现此错误:
Client in-bound response
403
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-WNS-DEBUG-TRACE: DB5SCH101111133
Date: Fri, 22 Jan 2016 10:44:55 GMT
Content-Length: 0
X-WNS-STATUS: dropped
X-WNS-ERROR-DESCRIPTION: Channel URL incompatible with caller app
X-WNS-MSG-ID: 6D850FC61AE7FDB5
X-WNS-NOTIFICATIONSTATUS: dropped
以下是配置我的应用以接收通知的不同步骤:
- 我从 windows 开发人员仪表板注册了我的应用程序
- 我有一个 SID 包:ms-app://s-1-15-2-[...]-[...]-[...]-[...]-[ ...]-[...]-[...]-2403721117
- 我也有这样的客户机密(只是一个例子):Nk2C+pmadqcHNQR51lN6F7LGaJYUTRPb
这是我从 WNS 获得的频道 URI :
https://db5.notify.windows.com/?token=AwYAAAD8sfbDrL9h7mN%2bmwlkSkQZCIfv4QKeu1hYRipj2zNvXaMi9ZAax%2f6CDfysyHp61STCO1pCFPt%2b9L4Jod72JhIcjDr8b2GxuUOBMTP%2b6%2bqxEfSB9iZfSATdZbdF7cJHSRA%3d
- 最重要的是,我将我的应用关联到 Visual Studio 的 windows 商店。然后,包名称、发布者显示和发布者 ID 已添加到我的 appxmanifest.file
这是 appxmanifest.file(真实名称“package.phone.appxmanifest 来自 platforms/windows 文件夹和 cordova windows phone 项目):
<?xml version='1.0' encoding='utf-8'?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
<Identity Name="company-name.70**********2" Publisher="CN=02******-****-****-****-***********9" Version="1.1.0.0" />
<mp:PhoneIdentity PhoneProductId="06******-****-****-****-**********k" PhonePublisherId="s*******-****-****-****-***********5" />
<Properties>
<DisplayName>Demo Windows App Phone</DisplayName>
<PublisherDisplayName>My Company Name</PublisherDisplayName>
<Logo>images\StoreLogo.png</Logo>
</Properties>
<Prerequisites>
<OSMinVersion>6.3.1</OSMinVersion>
<OSMaxVersionTested>6.3.1</OSMaxVersionTested>
</Prerequisites>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="com.company-name.demo" StartPage="www/index.html">
<m3:VisualElements BackgroundColor="transparent" Description="CordovaApp" DisplayName="Demo Windows App Phone" ForegroundText="light" Square150x150Logo="images\Square150x150Logo.png" Square44x44Logo="images\Square44x44Logo.png">
<m3:DefaultTile Square71x71Logo="images\Square71x71Logo.png" Wide310x150Logo="images\Wide310x150Logo.png">
<m3:ShowNameOnTiles>
<m3:ShowOn Tile="square150x150Logo" />
<m3:ShowOn Tile="wide310x150Logo" />
</m3:ShowNameOnTiles>
</m3:DefaultTile>
<m3:SplashScreen Image="images\SplashScreenPhone.png" />
</m3:VisualElements>
<ApplicationContentUriRules>
<Rule Match="https://dev.company-name.fr/demo-windows-app/*" Type="include" />
</ApplicationContentUriRules>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClientServer" />
<DeviceCapability Name="webcam" />
<DeviceCapability Name="microphone" />
</Capabilities>
</Package>
从服务器端,我使用两个参数对 WNS 进行身份验证:
- SID 包
- 客户端密码
我检查了关于此错误的不同主题,最有用的答案是将应用关联到 windows 商店。但我一直都这样做,不为我工作。
如果我理解的很好的话,WNS平台只需要知道应用程序ID(SID包)就可以找到我的应用程序并向我的应用程序发送通知。我不需要通过 windows 商店部署我的应用程序。
您知道如何修复它吗?你认为我是忘记了什么还是做错了什么?
编辑:
我想我找到问题了!我正在处理它,当我解决我的问题时,我会回到这里 post 我的解决方案。
我找到了解决我的问题的方法。我很愚蠢,因为我没有看到我的应用程序与 windows 商店的关联与必须生成的 appx 存档之间的关系。我部署了错误的应用程序,这就是我从未收到通知的原因 windows。事实上,错误的 appx 从未关联到 windows 商店...
因此,这是部署链接到 windows 商店的 appx 存档的步骤(来自 Visual Studio 2015 RC):
- 转到项目选项卡并select windows 存储
- 单击创建应用包
- 按照不同的步骤生成带有 windows 商店信息关联的 appx 存档(其中一个步骤是将您的应用程序与 windows 商店相关联)
- 生成的 appx 存档存储到以下文件夹(在我的例子中):C:\Users\pcharpin\Documents\Visual Studio 2015\Projects\demo-app-windows\demo-app-windows\AppPackages\CordovaApp.Phone_1.1.0.0_arm_Test
- 要在您的远程设备上部署此存档,请使用 Windows Phone 应用程序部署 8.1 工具。 Select 目标为远程设备,select 也是应用程序包,即 CordovaApp.Phone_1.1.0.0_arm_Test。最后,单击部署,您的应用程序将部署到您的远程设备上。
- 您已准备好发送通知 windows 并将它们接收到您的 windows phone 设备
所以,不要忘记创建一个应用程序包以将其关联到 windows 商店并可以接收通知 windows。
您可以从 创建 Windows 8.1 应用程序 包(部署步骤除外)的文档中检索有关此的指南。
如果在关联应用程序后通知仍然不起作用,请仔细检查以下配置。
- 转到您帐户的 Windows 开发中心 -> 仪表板
- Select 你的应用 -> 服务 -> 推送通知
- 点击"Live Services site"link
下面"Package SID"有"Application Identity"的配置,比如
<身份名称="09FSERVSD.YourAppName" 发布者="CN=xxxxxx"/>
在文本编辑器中打开您的应用程序 appxmanifest 并确保在 Identify 标记中添加相同的名称。
理想情况下,通过 VS 工具关联应用程序应该使用 "Name" 和 "Publisher" 更新此条目。但在我的例子中,它只更新了 "Publisher",我必须手动设置这个值才能让它工作。这样 WNS 就会知道目标应用程序与关联的应用程序相同,通知应该通过。
希望这对那些在测试 WNS 时遇到错误 "Channel URL incompatible with caller app" 的人有所帮助。
感谢大家,
在我的例子中,Publisher
字段(在 package.windows10.appxmanifest
、package.windows.appxmanifest
和 package.phone.appxmanifest
中)默认为 CN=$username$
。
<Identity Name="com.CordovaApp" Publisher="CN=$username$" Version="2.2.11.0" />
这样设置后,一切顺利:
<Identity Name="COM.CordovaApp" Publisher="CN=11111111-2222-3333-444444444444" Version="2.2.11.0" />
如果您在正确设置后继续收到错误消息 "X-WNS-ERROR-DESCRIPTION: Channel URL incompatible with caller app",请尝试从项目目录中删除 *_TemporaryKey.pfx 文件。