Device not receiving C# Windows Push Notifications because channel url incompatible

拥有回忆 提交于 2019-12-09 09:26:46

问题


After many hours of trial, I still fail to send push notifications to my app. This is what I did so far:

  • Activate the service at https://appdev.microsoft.com

  • Got the SID, lets call it ms-app://s-1-23-4-12345678901-...-12345678901

  • Received the client secret, lets call it 12Lwq7526OqNY8iN-aLkwds23451345

  • In my app I implented the following at some point (simplified):

    PushNotificationChannel channel = null;
    channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    System.Diagnostics.Debug.WriteLine(channel.Uri);
    
  • This prints an url of that kind:

    https://db3.notify.windows.com/?token=AgY7AABrfRCVgRV%2ba4DwoDjC2omrnOVwCkdhCrrzlJi6UpIwHzcig6%2fG5xZfnDqU0%2fXoE848ddiqyTaTlSSltp2Dn9Z3qaPsMAyh7kS%2bmlis1%2bwoh%2b%2b4DsAK1yeV1d9G1rUIuFs%3s
    
  • I added correct package name, publisher display name and publisher ID to my Package.appxmanifest file

  • So I thought I was ready for testing push notifications. Using my own implementation of push sharp, fiddler output is the following:

    Request:

    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>
    

    Answer

    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
    
  • I found this post Channel URL incompatible with caller app so far which was not really helping

I get the same error using the web service of http://31daysofwindows8.com/push. What can I do here? What could have gone wrong? Please note that this app has not been published yet to the store and I am testing on my local Windows 8.1 installation.


回答1:


Wow, this is unbelievable. I nearly went nuts, but here is the solution (and explanation):

In the windows app dashboard it says that you can set your app identity manually or automatically. I chose to do it manually (I mean, why not?). But that was a mistake. I quote from microsoft.com dashboard:


Set your app's identity values manually

Open your app's AppManifest.xml file in a text editor and set these attributes of the element using the values shown here.

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

This method did not let me receive push notifications!

The only way to get push notifications (for me) was the following: Try to set the app identity automatically by Visual Studio by calling this menu:

PROJECT -> STORE -> ASSOCIATE APP WITH THE STORE...

This solved my problem.




回答2:


I was unable to use the "Associate App" approach because the customer wasn't comfortable with giving us their credentails.

What worked for me was to remove the following two elements from the .csproj file of the app:

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

Do that by either dragging the file into a text editor or unloading the project (using right click) and editing it using the xml editor (again in the context menu).

These elements might have snuck in when we associated our app with our testing app and stayed there when we removed the association and just set the identity as described by andreas.

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

Edit: Just found out that doing this might break msbuild scripts that build packages. However, building app packages once within Visual Studio created new versions of these elements which then worked for me.




回答3:


MS documents are a nightmare for me, finally I found what need to do is:

right click on your windows store app solution -> "Store" -> "Associate App with the Store..." -> choose your app name and follow the steps until message "successfully" -> rebuild and run

Despite edit manifest manually by strictly follow the documents, but apparently it's not complete enough.




回答4:


Using Cordova for Windows, I found out, that even after "Associate App with the Store...", Push Messages failed to be delivered.

The issue was, that the App still had default CordovaApp_TemporaryKey.pfx assigned.

After I've copied new CordovaApp.Windows_StoreKey.pfx to CordovaApp_TemporaryKey.pfx message delivery succeed.



来源:https://stackoverflow.com/questions/20753313/device-not-receiving-c-sharp-windows-push-notifications-because-channel-url-inco

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!