1

我目前正在为 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(真正的名称是来自平台/windows 文件夹和 cordova windows phone 项目的“package.phone.appxmanifest”):

<?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 商店部署我的应用程序。

你知道如何解决它吗?你认为我忘记了什么或做错了吗?

编辑 :

我想我找到问题了!我正在努力,当我解决我的问题时,我会回到这里发布我的解决方案。

4

4 回答 4

6

我找到了关于我的问题的解决方案。我很愚蠢,因为我没有看到我的应用程序与 Windows 商店的关联与必须生成的 appx 存档之间的关系。我部署了错误的 appx,这就是我从未收到通知窗口的原因。事实上,错误的 appx 从未与 windows 商店相关联......

因此,以下是部署链接到 windows 商店的 appx 存档的步骤(来自 Visual Studio 2015 RC):

  • 转到项目选项卡并选择 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工具。选择目标作为远程设备并选择应用程序包CordovaApp.Phone_1.1.0.0_arm_Test。完成后,单击部署,您的应用程序将部署在您的远程设备上。
  • 您已准备好发送通知窗口并将其接收到您的 windows phone 设备

所以,不要忘记创建一个应用程序包,将其与 windows 商店相关联,并可以接收通知窗口。

您可以从创建 Windows 8.1 应用程序包的文档中检索有关此内容的指南(部署步骤除​​外)。

于 2016-01-25T16:17:35.650 回答
4

如果关联应用程序后通知仍然不起作用,请仔细检查以下配置。

  1. 转到您帐户的 Windows 开发中心 -> 仪表板
  2. 选择您的应用程序 -> 服务 -> 推送通知
  3. 单击“实时服务站点”链接
  4. 在“Package SID”下方有“Application Identity”的配置,例如,

    <Identity Name=" 09FSERVSD.YourAppName " Publisher="CN=xxxxxx"/>

  5. 在文本编辑器中打开您的应用程序 appxmanifest,并确保在识别标签中添加了相同的名称。

理想情况下,通过 VS 工具关联应用程序应使用“名称”和“发布者”更新此条目。但在我的情况下,它只更新了“Publisher”,我必须手动设置这个值才能让它工作。这样,WNS 将知道目标应用程序与关联的应用程序相同,并且通知应该通过。

希望这对那些在测试 WNS 时遇到错误“通道 URL 与调用者应用程序不兼容”的人有所帮助。

于 2016-06-14T22:29:21.203 回答
2

谢谢大家,

在我的情况下,Publisher默认为.package.windows10.appxmanifestpackage.windows.appxmanifestpackage.phone.appxmanifestCN=$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" />
于 2016-09-01T09:43:42.797 回答
0

如果您在正确设置后继续收到错误消息“X-WNS-ERROR-DESCRIPTION: Channel URL incompatible with caller app”,请尝试从项目目录中删除 *_TemporaryKey.pfx 文件。

于 2016-09-23T13:27:52.750 回答