Устройство не получает С# Windows Push Notifications, потому что канал несовместим

После многих часов пробной версии я все равно не могу отправить push-уведомления в свое приложение. Это то, что я сделал до сих пор:

  • Активируйте услугу в 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
    
  • Я добавил правильное имя пакета, отображаемое имя издателя и идентификатор издателя в файл Package.appxmanifest

  • Итак, я думал, что готов тестировать push-уведомления. Используя мою собственную реализацию push sharp, выход 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
    
  • Я нашел этот пост URL-адрес канала, несовместимый с приложением-телефоном, который пока не помогал

Я получаю ту же ошибку, используя веб-службу http://31daysofwindows8.com/push. Что я могу сделать здесь? Что могло пойти не так? Обратите внимание, что это приложение еще не было опубликовано в магазине, и я тестирую свою локальную установку Windows 8.1.

Ответ 1

Ничего себе, это невероятно. Я почти сходил с ума, но вот решение (и объяснение):

В панели управления приложениями Windows говорится, что вы можете установить личность своего приложения вручную или автоматически. Я решил сделать это вручную (я имею в виду, почему бы и нет?). Но это была ошибка. Я цитирую панель инструментов microsoft.com:


Установить значения идентификатора вашего приложения вручную

Откройте файл AppManifest.xml приложения в текстовом редакторе и установите эти атрибуты элемента, используя значения, показанные здесь.

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

Этот метод не позволял мне получать push-уведомления!

Единственным способом получения push-уведомлений (для меня) было следующее: попытаться установить идентификатор приложения автоматически с помощью Visual Studio, вызвав это меню:

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

Это решило мою проблему.

Ответ 2

Мне не удалось использовать подход "Associate App", потому что клиенту было неудобно давать нам свои кредитные права.

Что сработало для меня, было удалить следующие два элемента из файла .csproj приложения:

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

Сделайте это, перетащив файл в текстовый редактор или выгрузив проект (используя правый клик) и отредактировав его с помощью редактора xml (снова в контекстном меню).

Эти элементы могли бы залезть, когда мы связали наше приложение с нашим тестовым приложением и остались там, когда мы удалили ассоциацию и просто установили идентификатор, как описано andreas.

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

Изменить: только что выяснили, что это может нарушить скрипты msbuild, которые создают пакеты. Однако создание пакетов приложений в Visual Studio создало новые версии этих элементов, которые затем работали для меня.

Ответ 3

MS-документы для меня - кошмар, наконец я нашел, что нужно сделать:

щелкните правой кнопкой мыши на вашем приложении для магазина Windows Store → "Сохранить" → "Связать приложение с магазином..." → выберите свое имя приложения и выполните действия, пока сообщение "успешно" → перестроить и запустить

Несмотря на редактирование манифест вручную, строго следуйте документам, но, по-видимому, он недостаточно завершен.

Ответ 4

Используя Кордову для Windows, я узнал, что даже после того, как "Associate App with Store...", Push Messages не удалось доставить.

Проблема заключалась в том, что приложение по-прежнему было назначено по умолчанию CordovaApp_TemporaryKey.pfx.

После того, как я скопировал новую версию CordovaApp.Windows_StoreKey.pfx для доставки сообщений CordovaApp_TemporaryKey.pfx.