Статьи

Создание внутренних данных и служб для приложений Windows 8: добавление push-уведомлений

В предыдущих выпусках этой серии я показал, как можно быстро создавать службы на основе REST, доступные через HTTP, которые позволяют легко хранить и извлекать данные в приложении Магазина Windows, используя несколько различных подходов, в том числе службы данных WCF, ASP.NET. Веб-API и новые мобильные службы Windows Azure. Вы можете  прочитать все предыдущие части серии здесь . Я рекомендую прочитать вступительную статью как минимум, чтобы вы были знакомы с играми, которые я использую для демонстрации концепций серии.

Уведомления — Преимущество: мобильные службы Windows Azure

Как я отмечал в своем  последнем посте из этой серии , в мобильных службах Windows Azure  (далее — WAMS или мобильные службы) есть несколько функций,  которые делают его подходящим для создания серверных частей для мобильных приложений (включая приложения Магазина Windows). ) и предоставляют значительные преимущества для быстрого запуска приложения и предоставления дополнительных необходимых услуг. Одна из этих функций — встроенная поддержка push-уведомлений.

Прежде чем углубляться в то, что WAMS предоставляет для уведомлений, стоит потратить немного времени на изучение того, зачем моему приложению нужны уведомления. В случае приложений Магазина Windows (а также приложений Windows Phone) операционная система отвечает за жизненный цикл всех запущенных приложений и за то, чтобы приложения не потребляли ресурсы, такие как циклы ЦП (и, что важно, время работы от батареи). ) когда они не используются. Приложение, которое в данный момент не находится на переднем плане и с которым пользователь взаимодействует, может быть переведено в состояние ожидания, в котором потоки и процессы приложения сохраняются в памяти, но в течение которого приложение не получает циклов ЦП. В результате нет возможности для приложений, которые приостановлены, или тех, которые вообще не работают, для получения информации из внешнего мира. Это, конечно,включает в себя любую фоновую службу в облаке, с которой приложение может работать для хранения и извлечения данных.

Пока приложение всегда инициирует связь, это не представляет никаких проблем. Но вполне могут быть сценарии, в которых об изменениях данных в облаке необходимо сообщать одному или нескольким клиентским приложениям. Например, в моей службе списка лидеров игр я мог бы захотеть проверить, когда поступает новая рекордная оценка, посмотреть, вытеснил ли новый счет текущий лидер, и уведомить лидера, что он был побежден.

Шаги, которые я здесь выполняю, примерно основаны на учебном пособии «  Начало работы с push-уведомлениями»  на сайте Windows Azure  , но изменены для работы с одной из примеров игр, которые я показывал в этой серии. На сайте есть еще много хороших учебных пособий, и я рекомендую вам ознакомиться с ними.

Типы уведомлений

На момент написания этой статьи WAMS обеспечивает поддержку  push-уведомлений  для приложений Магазина Windows (как приложений C #, так и JavaScript), Windows Phone 8 и iOS. Для приложений Магазина Windows мобильные службы поддерживают три типа push-уведомлений:

  1. Tile Notification  — этот тип push-уведомлений используется для отправки обновлений в Live Tile для приложения, которое использует WAMS в качестве серверной части. Уведомления листов могут использоваться для отправки текстовых обновлений, обновлений изображений или обоих, и  для макета уведомлений листов существует большое разнообразие  шаблонов , каждый из которых имеет соответствующий метод, доступный в сценарии на стороне сервера в мобильной службе.
  2. Тостовые уведомления  — этот тип push-уведомлений используется для предоставления временных сообщений, которые имеют отношение к пользователю. Вы не должны использовать тост-уведомления для критической информации, поскольку тот факт, что она является временной, означает, что пользователь может никогда не увидеть уведомление. Как и для плиточных уведомлений, существует набор  шаблонов  для всплывающих уведомлений, каждый из которых имеет соответствующий метод, доступный в сценарии на стороне сервера в мобильной службе.
  3. Уведомления о бейджах  — этот тип push-уведомлений используется для обновления плитки приложения простой информацией о состоянии, такой как количество непрочитанных сообщений для почтового приложения, или для указания состояния ошибки или внимания, требуемого от пользователя.

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

В дополнение к вышеупомянутым типам уведомлений приложения Windows Store и мобильные службы поддерживают понятие необработанного уведомления, которое позволяет отправлять уведомления от мобильной службы, которые могут быть получены приложением (если оно запущено) и обработаны программным способом в любом месте. манера, которую вы выбираете.

Настройка push-уведомлений для мобильного сервиса GameLeader

В  последней части этой серии статей я показал, как быстро создать серверную службу, используя мобильные службы, которые могут поддерживать несколько игр Магазина Windows, предоставляя простую и понятную службу списка лидеров. Теперь я собираюсь добавить возможность отправлять push-уведомления из моего сервиса.

Первым шагом в этом процессе является регистрация моего приложения в Магазине Windows, поскольку именно это дает мне доступ к службе уведомлений Windows (WNS), которая обрабатывает обмен данными из моей мобильной службы с приложениями, работающими в конце. пользовательские машины. Чтобы зарегистрировать мое приложение, мне нужна действующая учетная запись разработчика в Магазине Windows. Вы можете приобрести его по годовой подписке, или, если вы являетесь подписчиком MSDN, ваша подписка может включать бесплатную годовую учетную запись разработчика в рамках преимуществ подписки, в зависимости от уровня вашей подписки.

Поскольку я уже получил свою учетную запись, я просто перехожу на страницу «  Отправить приложение» , авторизируюсь и затем нажимаю на первый элемент в списке, чтобы установить имя приложения. Я буду использовать Space Cadet, одну из игр, которую я использую в качестве примера. Обратите внимание, что я добавляю DH, чтобы это имя было уникальным для моего примера игры, поскольку я использую код Space Cadet от моего  коллеги Дэвида Исбицкого  для примера (имена приложений для Магазина Windows уникальны, и как только вы зарезервировали имя, никто другой не может использовать это имя … вы должны опубликовать свое приложение в течение одного года после резервирования имени приложения, или резервирование имени будет отменено):

ReserveAppName1

Если бронирование прошло успешно, я вижу следующее:

ReserveAppName2

Затем мне нужно связать проект приложения Space Cadet с моей записью в Магазине Windows. Для этого я использую меню «Магазин» в Visual Studio (обратите внимание, что в некоторых выпусках Visual Studio 2012 меню «Магазин» является меню верхнего уровня, а в других — подменю меню «Проект») и выбираю пункт меню «Связать». Приложение с магазином …, которое дает мне следующий диалог:

AssociateApp1

Я нажимаю «Войти» и предоставляю учетные данные учетной записи Microsoft, связанные с моей учетной записью Магазина Windows.

AssociateApp2

После выбора приложения, как показано выше, я нажимаю Далее.

AssociateApp3

Мне представляется сводка информации, которая будет добавлена ​​в файл манифеста для моего приложения, и, поскольку он выглядит хорошо, я нажму «Ассоциировать», чтобы завершить процесс.

Теперь, когда мое приложение связано со списком Магазина Windows, пришло время перейти в  Центр разработчиков Live Connect и щелкнуть ссылку «  Мои приложения»  в верхней части страницы. Меня приветствует список приложений, связанных с моей учетной записью, который включает в себя приложение, которое я только что связал:

LiveConnectServices1

Центр разработчиков Live Connect предоставляет доступ к ряду важных аспектов моего приложения, и в контексте push-уведомлений наиболее важными из них являются идентификатор клиента и секрет клиента, которые можно получить, нажав на название приложения. :

LiveConnectServices2_1

затем нажмите на Настройки API:

LiveConnectServices3

которая дает мне необходимую информацию, а именно: идентификатор безопасности пакета (или сокращенно SID пакета) и секрет клиента:

LiveConnectServices4

После того, как я запомнил вышеупомянутые значения (которые, кстати, вы должны держать в секрете, поскольку они являются типом учетных данных безопасности для вашего приложения), я перейду на  портал управления Windows Azure и войду в мою учетную запись, а затем перейдите к моей существующей мобильной службе и выберите вкладку Push. Как показано на рисунке ниже, здесь есть поля для SID пакета и Client Secret, поэтому я скопирую соответствующие значения в эти поля и нажму кнопку Сохранить:

нажимной пластины

На этом настройка моего приложения завершена.

Добавление Push-уведомлений

Затем я добавлю код в свою игру, чтобы включить push-уведомления. Это состоит из двух частей … в первой части я добавлю код, который будет запрашивать у службы уведомлений Windows канал для отправки push-уведомлений для этого конкретного экземпляра моего приложения. Во второй части я добавлю некоторый серверный скрипт для фактической отправки уведомления.

Я собираюсь начать с открытия файла leaderboardWAMS.js, который содержит всю логику для подключения к моей мобильной службе лидеров (вы можете просмотреть код в  предыдущем посте этой серии ), добавив переменную с именем channel  в объявления переменных вверху, а затем добавьте следующий код непосредственно перед вызовом, который инициализирует клиент мобильного сервиса:

// Get the channel for the application.
var channelOperation = Windows.Networking.PushNotifications
     .PushNotificationChannelManager
     .createPushNotificationChannelForApplicationAsync()
     .then(function (newChannel) {
        channel = newChannel;
     });

Этот код извлечет информацию о канале из WNS и сохранит ее в   переменной канала , которую мы будем использовать позже. Важно отметить, что, если бы я хотел, чтобы мой код был устойчивым, я хотел бы проверить подключение к сети перед выполнением этого вызова, а также добавить соответствующую обработку исключений.

Затем я обновлю функцию updateHighScore, чтобы добавить текущий URI канала в таблицу GameScores в моем мобильном сервисе, например:

function updateHighScore(newScore) {
      var scorePromise = getCurrentPlayerScore();
      scorePromise.done(function (currentScore) {
          if (currentScore.score <= newScore) {
              currentScore.score = newScore;
              // add channel info
              currentScore.channel = channel.uri;
              gameScoresTable.update(currentScore).done(function () {
                  showMessage("Leaderboard Updated.");
              });
          }
      }, function (e) {
          showMessage(e.message);
      });
  }

Благодаря возможности динамической схемы в Windows Azure Mobile Services, когда я впервые сохраняю новый высокий балл, схема таблицы GameScore будет автоматически обновлена, чтобы включить новый столбец канала, и текущий URI канала будет сохранен, как показано ниже. :

SchemaUpdateChannel1

Теперь, когда канал доступен при обновлении элемента, я могу добавить простой код в службу мобильной связи для отправки уведомления плитки. Сначала я открою вкладку «Сценарий» на портале управления, которая дает мне доступ к операциям вставки, обновления, удаления и чтения. Я выберу операцию обновления и изменю скрипт следующим образом:

function update(item, user, request) {
      request.execute({
          success: function() {
              // Write to the response and then send the notification in the background
              request.respond();
              push.wns.sendTileSquareBlock(item.channel, {
                  text1: item.score,
                  text2: "New High Score!"
              }, {
                  success: function(pushResponse) {
                      console.log("Sent push:", pushResponse);
                  }
              });
          }
      });
  }

Когда элемент обновляется, код в функции обновления получает обновляемый элемент (вместе с некоторыми дополнительными аргументами). Затем сценарий выполняет  запрос , который обновит базовые данные и, если это будет успешно, будет использовать  объект push  для отправки обновления плитки TileSquareBlock, передавая новый высокий балл для этого игрока и текст «Новый высокий балл! ». Если push-уведомление было успешно отправлено, ответ записывается в объект консоли мобильной службы  , что можно увидеть, выбрав вкладку «Журналы» в корне мобильной службы на портале управления, как показано ниже:

TileUpdated2

И, конечно же, если обновление плитки было успешным, должна также обновляться плитка игры на стартовом экране, что она и делает:

TileUpdated1

Заворачивать

В этом посте я показал вам очень простой пример того, как я могу легко использовать поддержку Windows Azure Mobile Services для push-уведомлений, чтобы отправлять обновление плитки пользователям игры Space Cadet с их последними высокими показателями. Возможны и другие сценарии, в том числе использование запросов на стороне сервера для определения того, превысил ли мой новый рекорд кто-то другой, и отправка этому человеку push-уведомления о том, что его счет был побит.

Мой коллега  Брайан Хитни  написал несколько полезных постов в блоге с дополнительной информацией об отправке уведомлений и многое другое из Windows Azure Mobile Services, включая следующие:

Я также настоятельно рекомендую ознакомиться с  учебными пособиями  по мобильным сервисам на веб-сайте Windows Azure, которые включают в себя несколько учебных пособий по push-уведомлениям (включая ту, на которой я основал этот пост).

Важно отметить, что хотя в этом посте демонстрировалось использование push-уведомлений с приложением для Магазина Windows, Windows Azure Mobile Services также поддерживает push-уведомления как для Windows Phone 8, так и для iOS, поэтому, создав свой бэкэнд для мобильных служб, вы можете поддерживать множество платформ.

Для обзора

Если вы еще этого не сделали, я настоятельно рекомендую прочитать остальные посты этой серии:

Что дальше?

В следующей части этой серии я расскажу, как добавить аутентификацию в службу лидеров, используя  мобильные службы Windows Azure . Я также работаю над серией эпизодов Microsoft DevRadio, в которой я буду обсуждать концепции этой серии и делать некоторые демонстрации с моими коллегами Брайаном Хитни и Питером Лаудати. Я опубликую ссылки на шоу, как только они станут доступны.

Пока вы ждете следующего выпуска, почему бы не зарегистрироваться в  Generation App ? Существует множество отличных ресурсов для создания приложений для Windows 8 (а теперь и для Windows Phone 8), включая  новую информацию  от партнеров, которая позволяет быстро и легко создавать приложения и игры для Windows 8. бесплатно, и вы контролируете, как часто отправляются обновления, так что нет веских причин для их передачи. Зарегистрируйтесь сейчас !