Windows Phone 7 Push-уведомления не отображаются на моем телефоне - PullRequest
5 голосов
/ 12 мая 2011

ОБНОВЛЕНИЕ: сюжет утолщается.Я изменил название своего канала, и он неожиданно заработал (что означает, что это не проблема с моей службой push, так как я получаю тот же HTTP-ответ от сервера push-уведомлений Microsoft).

Для меня, однако, это не решение.Как я смогу это проверить, и ЗНАЮ, что мои пользователи получают свои push-уведомления, если я получаю тот же ответ, когда он не работает, как и я, когда он есть?

[ОРИГИНАЛЬНЫЙ ПОСТ]

Я пытался получать push-уведомления на свое устройство Windows Phone 7, но у меня очень большие проблемы, на которые я не могу найти ответы.Я начну с кода c #.

Я установил push-уведомления, используя следующий код C #.

private HttpNotificationChannel channel;
private static string PUSH_CHANNEL = "MySpecialPushChannel";
private Uri PushUri = null;
private bool IsPushRegistered = false;

public void StartPushSubscription()
{
    try
    {
        channel = HttpNotificationChannel.Find(PUSH_CHANNEL);
    }
    catch
    {}

    if (channel != null)
    {            
        PushUri = channel.ChannelUri;
        if (!channel.IsShellTileBound)
            channel.BindToShellTile();
    }
    else
    {
        channel = new HttpNotificationChannel(PUSH_CHANNEL);
        channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(channel_ChannelUriUpdated);
        channel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(channel_HttpNotificationReceived);
        channel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(channel_ErrorOccurred);

        try
        {
            channel.Open();
            channel.BindToShellTile();
        }
        catch (Exception err)
        {
            channel = null;
            IsPushRegistered = false;
            // Code to try again
        }
    }
}

void channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
    PushUri = e.ChannelUri;
    IsPushRegistered = true;
}

Я следую стандартной структуре push WP7:

  1. Найдите HttpNotificationChannel (или создайте новый)
  2. Зарегистрируйте обработчик событий, чтобы получить push-уведомление uri
  3. Откройте канал
  4. Привязать к плитке
  5. Обработка канала Uri (который мы отправляем нашему сервису, чтобы дождаться счастливого дня, когда мы отправляем push-уведомление

ОК ... пока все хорошо. Никаких ошибок я получаюмой Uri, отправьте его в мой сервис просто отлично. Я прикрепляю свое приложение к стартовому экрану, и мой сервис отправляет push-запрос в Uri (отправляя только счетчик, чтобы я получил небольшой номер счетчика в правом верхнем углу)Я получаю статус HTTP 200 со следующим:

DeviceConnectionStatus => Подключено

NotificationStatus => Получено

SubscriptionStatus => Активно

И затем... ничего. Нет статуса pushв моем приложении.Я сейчас попробовал это на своем устройстве, в эмуляторе, на другом устройстве, и с несколькими серверами, и результат всегда одинаков.Все выглядит так, как будто оно работает, за исключением того факта, что оно не работает.

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Для меня, однако, это не решение.Как я смогу это проверить, и ЗНАЮ, что мои пользователи получают свои push-уведомления, если я получаю тот же ответ, когда он не работает, как я, когда он есть?

Ответ таков, что выне может.Это ограничение того, как WP7 обрабатывает уведомления.

Для структурированных уведомлений, таких как Tile и Toast, если вы получите ответ Connected / Active / Received / 200, то вы можете знать, что MPNS принял ваш запрос на уведомление.Однако это не означает, что вы отправили действительную полезную нагрузку XML.

Компонентом, который обрабатывает синтаксический анализ XML, является Push-клиент, процесс, выполняющийся на телефоне, который принимает push-уведомления и передает их соответствующим приложениям,вывод тоста и т. д.

Если вы отправили недопустимый XML, это абсолютно не указывает на то, что вы это сделали.Самое большее, если вы попытаетесь отправить уведомление снова на тот же URI push-канала, вы получите 404 в ответ.По-видимому, получение недопустимой полезной нагрузки XML для конкретного приложения приводит к закрытию push-канала этого приложения, что требует от вас повторения всей процедуры.

Я обнаружил это при отладке с нашей командой серверов и при попытке получитьтелефон для отображения альтернативной живой плитки.Единственный совет, который я могу вам предложить, - это четырехкратная проверка вашего XML.

Вы получите ошибки в обработчике событий ошибок для канала push-уведомлений для уведомлений Toast, которые имеют недопустимый XML, поскольку вы можете отправлять /получать уведомления о тостах, когда приложение активно.


Если кто-то из Microsoft читает это, ПОЖАЛУЙСТА предоставит более подробную документацию о возможных состояниях ошибок в push-уведомлении.система оповещения.Нам также нужен обработчик событий для уведомлений плитки или, по крайней мере, мы можем получать уведомления плитки, когда приложение находится на переднем плане, и запускать событие ошибки канала уведомлений, чтобы мы могли знать, что наша полезная нагрузка XML недействительна.

Особенно, если ваша веб-служба не построена на WCF, .NET, Azure и т. Д., Работа с Push-уведомлениями в WP7 - это все равно, что блуждать вслепую.

Документация для сообщения об исключении, читающего "InvalidOperationException(Failed to open channel)"следует , а не читать: «Это исключение возникает, когда канал уведомлений не открывается. Попробуйте открыть канал уведомлений снова».( ссылка )

0 голосов
/ 23 июля 2011

вы получаете URL с каждого устройства?вам нужно получать URL-адрес из службы push-уведомлений для каждого устройства при каждом подключении вашего устройства,

, когда вам нужно найти способ получения URL-адреса от каждого клиента,

, как только высделать это, и вы все еще не получаете push-уведомлений, тогда я напишу в Майкрософт, чтобы увидеть, могут ли они увидеть что-нибудь делать с push-уведомлениями

...