设备无法接收C# Windows推送通知,因为通道URL不兼容。

10

经过多个小时的尝试,我仍然无法向我的应用程序发送推送通知。这是我到目前为止所做的:

  • https://appdev.microsoft.com 上激活服务。

  • 获得了SID,我们称之为ms-app://s-1-23-4-12345678901-...-12345678901

  • 收到了客户端秘钥,我们称之为12Lwq7526OqNY8iN-aLkwds23451345

  • 在我的应用程序中,我在某个时刻实现了以下内容(简化):

    PushNotificationChannel channel = null;
    channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    System.Diagnostics.Debug.WriteLine(channel.Uri);
    
  • 这将打印出这种类型的URL:

    https://db3.notify.windows.com/?token=AgY7AABrfRCVgRV%2ba4DwoDjC2omrnOVwCkdhCrrzlJi6UpIwHzcig6%2fG5xZfnDqU0%2fXoE848ddiqyTaTlSSltp2Dn9Z3qaPsMAyh7kS%2bmlis1%2bwoh%2b%2b4DsAK1yeV1d9G1rUIuFs%3s
    
  • 我已经将正确的软件包名称、发布者显示名称和发布者ID添加到我的Package.appxmanifest文件中。

  • 因此,我认为我已准备好测试推送通知。使用我自己实现的PushSharp,Fiddler的输出如下:

    请求

    POST https://db3.notify.windows.com/?token=AgY7AABrfRCVgRV%2ba4DwoDjC2omrnOVwCkdhCrrzlJi6UpIwHzcig6%2fG5xZfnDqU0%2fXoE848ddiqyTaTlSSltp2Dn9Z3qaPsMAyh7kS%2bmlis1%2bwoh%2b%2b4DsAK1yeV1d9G1rUIuFs%3s HTTP/1.1
    X-WNS-Type: wns/toast
    Authorization: Bearer EgAC4AA1hAZAQMAklDAAEgAAAUe8/AGsK8a/yk78/WEDQf+KUld/nYIvJ51OIoCPgAfwqbl0oo1sPDLhd9ChiO/iLFVzwlTPE3trp9oTkJxNXi0yUrf+FKjRciq7Utek9B/4dxH9lFNy0R5iwdMS0xNS0yLTIyNDgyMDE1NzEtMjczODcxMjkyMy0yMzM3MbsS59ZuQmXCIAFoOiAAAAAAAgzMOTB7OuFIezrhS60gEAAoANS45LjYuMTBiPoPMh3Nj5MAEOp0RhrcMUx6D50AtDuzWE1AAAAAABeAG1zLWiwcDovL3MtTk2Nzk3LTEzOTYwNDkxODYtMjEyODYwMTQ3MS04MDg1MDg2ODUtMzY3NjQyNTk3OQA=
    Content-Type: text/xml
    Host: db3.notify.windows.com
    Content-Length: 138
    
    <toast>
      <visual>
        <binding template="ToastText01">
          <text id="1">This is a test</text>
        </binding>
      </visual>
    </toast>
    

    答案

    HTTP/1.1 403 Forbidden
    Content-Length: 0
    X-WNS-ERROR-DESCRIPTION: Channel URL incompatible with caller app
    X-WNS-MSG-ID: 5FC550364E079585
    X-WNS-DEBUG-TRACE: DB3WNS4011533
    Date: Mon, 23 Dec 2013 23:58:22 GMT
    
  • 我迄今为止找到的 Channel URL incompatible with caller app 这篇文章并没有真正帮到我

我使用 http://31daysofwindows8.com/push 的网络服务时也遇到了相同的错误。我该怎么办?可能出了什么问题?请注意,该应用程序尚未发布到商店,我正在本地的 Windows 8.1 安装上进行测试。

4个回答

22

哇,这太不可思议了。我差点疯了,但是这里有解决方案(和解释):

在 Windows App 仪表板中,它说你可以手动或自动设置应用程序标识。我选择手动设置(我是说,为什么不呢?)。但那是个错误。我引用来自microsoft.com仪表板的话:


手动设置应用程序标识值

在文本编辑器中打开应用程序的 AppManifest.xml 文件,并使用此处显示的值设置 element 的这些属性。

<Identity Name=" MyName.MyApp " Publisher="CN=*******-****-****-****-************" />

这种方法没有让我收到推送通知!

对于我来说,唯一能够获得推送通知的方式是:尝试通过 Visual Studio 自动设置应用程序标识符,方法是调用以下菜单:

项目 -> 商店 -> 将应用与商店关联...

这解决了我的问题。



6
你是我的英雄!我试了将近两天才让这个工作起来。我很高兴最终找到那篇文章,20秒后它就运行了。非常感谢你! - christoph
嗨,我在我的Visual Studio 2012中找不到“PROJECT -> STORE -> ASSOCIATE APP WITH THE STORE..”选项。有人可以帮忙吗? - Naitik
1
@Naitik 在此选项可用之前,您需要使用创建应用程序的 Microsoft 帐户登录 VS。您还需要在 VS 解决方案资源管理器中选择应用程序项目。如果您选择了根解决方案,则此选项将不可用。 - robasaurus
感谢@robasaurus的回复,我开始使用vs2013并获得了这个选项。 - Naitik

3

由于客户不愿意提供他们的凭据,我无法使用“关联应用程序”的方法。

对我有帮助的是从应用程序的.csproj文件中删除以下两个元素:

<PackageCertificateKeyFile>...</PackageCertificateKeyFile>
<PackageCertificateThumbprint>...</PackageCertificateThumbprint>

您可以通过将文件拖入文本编辑器或卸载项目(右键单击)并使用xml编辑器进行编辑(同样在上下文菜单中)来实现此操作。

当我们将应用程序与测试应用程序关联并按照andreas所述仅设置标识时,这些元素可能已经进入其中,并保留在那里。

<Identity Name="..." Publisher="CN=..." />

更新:刚刚发现这样做可能会破坏构建软件包的msbuild脚本。然而,在Visual Studio中首次构建应用程序包会创建这些元素的新版本,然后对我起作用。


很好地发现,<PackageCertificateKeyFile>标签阻止了其他开发人员使用错误信息从令牌提供程序获取的令牌是错误的调试我们的解决方案时接收通知。 - Milen
删除了<PackageCertificateKeyFile>和<PackageCertificateThumbprint>并手动编辑了Package.appxmanifest文件后,我的应用程序仍然出现403禁止错误。除上述操作外,还需要做些什么吗? - Tulika
@Tulika 这就是我们需要的全部,抱歉。我建议你找第二个人来检查你的身份标签。 - Markus Bruckner

1

在使用Cordova for Windows时,我发现即使“将应用与商店关联…”,推送消息仍无法传递。

问题是应用仍然使用默认的CordovaApp_TemporaryKey.pfx。

当我将新的CordovaApp.Windows_StoreKey.pfx复制到CordovaApp_TemporaryKey.pfx后,消息就成功传递了。


你从哪里获取这个“新”的pfx文件的? - Dean Martin
将应用与商店关联的过程完成后,您可以开始为您的应用编写代码并进行测试。确保您的代码符合所选平台的要求,并遵循最佳实践和安全性标准。在开发过程中,您可能需要使用各种工具和框架来简化任务并提高效率。一旦您的应用程序准备好发布,您可以将其提交到相应的应用商店进行审核和发布。 - Daniel
你知道新的pfx文件是在哪个目录下创建的吗? - Rence
这是最好的答案! - phemt.latd

1

MS文档对我来说是一场噩梦,最终我发现需要做的是:

右键单击您的Windows商店应用程序解决方案 ->“商店” ->“将应用与商店关联...” ->选择您的应用程序名称并按照步骤操作直到出现“成功”消息 ->重新构建和运行

尽管严格按照文档手动编辑清单,但显然不够完整。


1
这不就是我下面精确发布的内容吗?;-o - andreas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接