Руководство по Отправка push-уведомлений на устройства Android с помощью Центров уведомлений Azure и Google Cloud Messaging (не рекомендуется к использованию)

Руководство по Отправка push-уведомлений на устройства Android с помощью Центров уведомлений Azure и Google Cloud Messaging (не рекомендуется к использованию)

С 10 апреля 2018 года компания Google не рекомендует использовать Google Cloud Messaging (GCM). Интерфейсы API сервера и клиента GCM являются нерекомендуемыми и будут удалены после 29 мая 2019 года. Дополнительные сведения см. в статье GCM and FCM Frequently Asked Questions (Часто задаваемые вопросы о GCM и FCM).

Обзор

В этом учебнике показано, как использовать Центры уведомлений Azure для отправки push-уведомлений в приложение на платформе Android. Вы создадите пустое приложение Android, которое получает push-уведомления с помощью Google Cloud Messaging (GCM).

Служба Google Cloud Messaging (GCM) устарела и будет удалена в ближайшее время.

В этой статье описывается отправка push-уведомлений с помощью Google Cloud Messaging (GCM). Если вы используете Google Firebase Cloud Messaging (GCM), см. статью Sending push notifications to Android with Azure Notification Hubs (Отправка push-уведомлений в приложения Android с помощью центров уведомлений Azure).

Полный код для этого руководства можно скачать на сайте GitHub.

Вот какие действия выполняются в этом руководстве:

  • Создание проекта с поддержкой Google Cloud Messaging.
  • Создание концентратора уведомлений
  • Подключение приложения к центру уведомлений
  • Тестирование приложения

Предварительные требования

  • Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу. .

Создание проекта с поддержкой Google Cloud Messaging

Перейдите к консоли Google Cloudи войдите в нее с помощью учетной записи Google.

Выберите Создать проект на панели инструментов.

В поле Project name (Имя проекта) введите имя проекта и нажмите кнопку Create (Создать).

На панели инструментов щелкните значок оповещений и выберите проект в списке. Откроется панель мониторинга проекта. Вы также можете перейти непосредственно к панели мониторинга, используя URL-адрес https://console.developers.google.com/home/dashboard?project=<YOUR PROJECT NAME> .

Запишите номер проекта, который отображается на плитке Project info (Сведения о проекте) панели мониторинга.

На плитке APIs (API-интерфейсы) панели мониторинга щелкните Go to APIs overview (Перейти к обзору API-интерфейсов).

На странице API щелкните Enable APIs and services (Включить API-интерфейсы и службы).

Найдите и выберите Google Cloud Messaging.

Чтобы включить Google Cloud Messaging для проекта, нажмите кнопку Enable (Включить).

Щелкните Create credentials (Создать учетные данные) на панели инструментов.

На странице Add credentials to your project (Добавление учетных данных в проект) щелкните ссылку на ключ API.

На странице API key (Ключ API) нажмите кнопку Create (Создать) или Save (Сохранить). В следующем примере выбран параметр IP addresses (IP-адреса) и для разрешенных IP-адресов указан диапазон 0.0.0.0/0. Задайте соответствующие ограничения ключа API.

Скопируйте ключ API в буфер обмена и сохраните его в каком-нибудь расположении.

Этот ключ API службы Azure будут использовать для аутентификации в службе GCM и отправки push-уведомлений от имени вашего приложения. Чтобы вернуться на панель мониторинга проекта, используйте URL-адрес https://console.developers.google.com/home/dashboard?project=<YOUR PROJECT NAME> .

Создание концентратора уведомлений

Выберите Все службы в меню слева и щелкните Центры уведомлений в разделе Мобильный. Щелкните значок звездочки рядом с именем службы, чтобы добавить ее в раздел Избранное в меню слева. После добавления Центров уведомлений в Избранное выберите их в меню слева.

На странице Центры уведомлений выберите Добавить на панели инструментов.

На вкладке Основные сведения на странице Центр уведомлений выполните следующие действия:

В поле Подписка выберите имя подписки Azure, которую вы хотите использовать, а затем выберите существующую группу ресурсов или создайте новую.

Введите уникальное имя нового пространства имен в разделе Сведения о пространстве имен.

Пространство имен содержит один или несколько концентраторов уведомлений, поэтому укажите имя концентратора в разделе Сведения о Центре уведомлений. Или выберите существующее пространство имен в раскрывающемся списке.

Выберите значение в раскрывающемся списке Расположение. Это значение определяет расположение, в котором создается центр.

Нажмите кнопку создания.

Последовательно выберите Уведомления (значок колокольчика) и Перейти к ресурсу. Вы также можете обновить список на странице Центры уведомлений и выбрать свой центр.

Выберите Политики доступа в списке. Обратите внимание, что станут доступны две строки подключения. Они потребуются позже для обработки push-уведомлений.

Не используйте в приложении политику DefaultFullSharedAccessSignature. Этот параметр можно использовать только в серверной части.

Настройка параметра GCM для центра уведомлений

В разделе Параметры уведомлений выберите Google (GCM) .

Введите ключ API, полученный из консоли Google Cloud.

На панели инструментов щелкните Сохранить.

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

Подключение приложения к центру уведомлений

Создание нового проекта Android

В Android Studio создайте новый проект Android Studio.

Выберите форм-фактор Phone and Tablet (Телефон и планшет) и минимальную версию пакета SDK (с помощью параметра Minimum SDK), которые нужно поддерживать. Затем нажмите кнопку Далее.

Выберите для основного действия значение Empty Activity (Пустое действие), нажмите кнопку Next (Далее), а затем — Finish (Готово).

Добавление служб Google Play в проект

В Android Studio в меню выберите Средства, а затем — Диспетчер пакетов SDK.

Выберите целевую версию пакета SDK для Android, который используется в проекте. Затем выберите Show Package Details (Показать сведения о пакете).

Выберите Google APIs (API-интерфейсы Google), если они еще не установлены.

Переключитесь на вкладку SDK Tools. Если сервисы Google Play еще не установлены, щелкните Сервисы Google Play, как показано на рисунке ниже. Затем выберите Применить для установки. Запишите путь к пакету SDK. Он вам потребуется в дальнейшем.

Если вы видите диалоговое окно Подтвердить изменение, выберите ОК. Установщик компонентов устанавливает запрошенные компоненты. После установки компонентов выберите Готово.

Выберите ОК, чтобы закрыть диалоговое окно Settings for New Projects (Параметры для новых проектов).

Откройте файл build.gradle в каталоге app и в разделе добавьте следующую строку.

Выберите значок Синхронизировать сейчас на панели инструментов.

Откройте файл AndroidManifest.xml, а затем добавьте следующий тег для тега приложения.

Добавление библиотек Центров уведомлений Azure

Build.Gradle В файле Build.Gradle добавьте следующие строки в раздел зависимостей .

После раздела dependencies добавьте следующий репозиторий:

Обновление файла проекта AndroidManifest.xml

Чтобы обеспечить поддержку GCM, реализуйте службу прослушивания идентификаторов экземпляра в коде. Таким образом можно получать маркеры регистрации с помощью API идентификаторов экземпляра Google. В этом руководстве имя класса — MyInstanceIDService .

Добавьте приведенное ниже определение службы внутри тега <application> в файле AndroidManifest.xml. Замените заполнитель <your package> фактическим именем своего пакета, отображенным в верхней части файла AndroidManifest.xml .

После получения маркера регистрации в GCM из API идентификаторов экземпляра приложение использует его для регистрации в центре уведомлений Azure. Регистрация в фоновом режиме выполняется с помощью службы IntentService с именем RegistrationIntentService . Кроме того, эта служба отвечает за обновление маркера регистрации в GCM.

Добавьте приведенное ниже определение службы внутри тега <application> в файле AndroidManifest.xml. Замените заполнитель <your package> фактическим именем своего пакета, отображенным в верхней части файла AndroidManifest.xml .

Определите получателя уведомлений. Добавьте следующее определение получателя внутри тега <application> в файле AndroidManifest.xml. Замените заполнитель <your package> фактическим именем своего пакета, отображенным в верхней части файла AndroidManifest.xml .

Добавьте следующие необходимые разрешения GCM под <application> тегом. Замените <your package> именем пакета, отображенным в верхней части файла AndroidManifest.xml .

Дополнительные сведения об этих разрешениях см. в статье Настройка клиентского приложения GCM для Android.

Добавление кода

в представлении Project разверните узел app src main java. Щелкните правой кнопкой мыши папку пакета в java, щелкните New (Создать) и выберите Java Class (Класс Java). Добавьте новый класс с именем NotificationSettings .

Обновите три заполнителя в следующем коде для класса NotificationSettings :

SenderId : Номер проекта, полученный ранее в SenderId .

HubListenConnectionString : Строка подключения HubListenConnectionString для центра. Эту строку подключения можно скопировать, щелкнув Политики доступа на странице Параметры центра на Портал Azure.

HubName : Используйте имя центра уведомлений, которое отображается на странице концентратора в HubName .

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

Код для этого класса вызывает IntentService метод для IntentService в фоновом режиме.

Добавьте в проект еще один новый класс с именем RegistrationIntentService . Этот класс реализует интерфейс IntentService , который обрабатывает IntentService и регистрацию в концентраторе уведомлений.

Используйте для этого класса следующий код:

В начале класса MainActivity добавьте следующие операторы import .

В классе MainActivity добавьте следующий метод проверки доступности служб Google Play:

В классе MainActivity добавьте следующий код, который проверяет Сервисы Google Play, прежде чем вызывать службу IntentService . Таким образом вы получите маркер регистрации в GCM и выполните регистрацию в центре уведомлений.

В методе OnCreate класса MainActivity добавьте следующий код, чтобы начать регистрацию при создании действия:

Добавьте эти дополнительные методы в класс MainActivity , чтобы проверять состояние приложения и отображать в нем полученные данные.

ToastNotify Метод использует элемент управления ToastNotify TextView для постоянного отчета о состоянии и уведомлениях в приложении. В файле макета activity_main.xml добавьте следующий идентификатор для этого элемента управления.

Добавьте подкласс для получателя, определенного в файле AndroidManifest.xml. Добавьте еще один новый класс в проект MyHandler .

Добавьте в начало файла MyHandler.java следующие операторы импорта:

Добавьте в класс MyHandler следующий код, чтобы сделать его подклассом класса com.microsoft.windowsazure.notifications.NotificationsHandler .

Этот код переопределяет метод OnReceive так, чтобы обработчик сообщал о полученных уведомлениях. Кроме того, обработчик отправляет push-уведомление в диспетчер уведомлений Android с помощью метода sendNotification() . Метод sendNotification() должен выполняться, когда незапущенное приложение получает уведомление.

в Android Studio в строке меню щелкните сборка перестроить Project , чтобы убедиться в отсутствии ошибок в коде.

Тестирование приложения

Запуск мобильного приложения

Запустите приложение и убедитесь, что для успешной регистрации сообщается идентификатор регистрации.

Введите сообщение уведомления для отправки на все устройства Android, которые зарегистрированы в центре.

Нажмите кнопку Send Notification(Отправить уведомление). На всех устройствах с запущенным приложением отображается экземпляр AlertDialog с push-уведомлением. Устройства, на которых приложение не запущено, но которые были ранее зарегистрированы для приема push-уведомлений, получают уведомление в диспетчер уведомлений Android. Уведомления можно просматривать, проводя пальцем вниз от левого верхнего угла.

Проверка отправки push-уведомлений с портала Azure

Чтобы проверить получение push-уведомлений в приложении, отправьте уведомления на Портал Azure.

В разделе Устранение неполадок выберите Тестовая отправка.

В качестве платформы выберите Android.

Нажмите кнопку Отправить, чтобы отправить тестовое уведомление.

Проверьте получение уведомления на устройстве Android.

Push-уведомления обычно отправляются во внутренней службе, например мобильных приложениях или службе ASP.NET, с помощью совместимой библиотеки. Если для серверной части библиотека недоступна, для отправки уведомлений также можно напрямую использовать REST API.

Ниже приведен список других учебников, касающихся отправки уведомлений:

  • Мобильные приложения Azure. Пример отправки уведомлений с сервера мобильных приложений, интегрированного с Центрами уведомлений, см. в статье Add Push Notifications to your iOS App (Добавление push-уведомлений в приложение iOS).
  • ASP.NET: Использование центров уведомлений для отправки push-уведомлений пользователям.
  • Пакет SDK для Центров уведомлений Azure для Java: сведения об отправке уведомлений Java см. в статье Использование концентраторов уведомлений из Java. Было протестировано в Eclipse для разработки для Android.
  • PHP: Использование Центров уведомлений из PHP.
Тестирование push-уведомлений в эмуляторе

Если вы хотите проверить отправку push-уведомлений в эмуляторе, убедитесь, что образ эмулятора поддерживает уровень API Google, выбранный для приложения. Если образ не поддерживает собственные API Google, Вы прикончите исключение SERVICE_NOT_AVAILABLE .

кроме того, убедитесь, что учетная запись Google добавлена в работающем эмуляторе в разделеучетные записиПараметры . В противном случае попытки регистрации в GCM могут привести к исключению AUTHENTICATION_FAILED .

Отправка push-уведомлений непосредственно из приложения (необязательное действие)

Обычно уведомления отправляются с сервера базы данных. Но в некоторых случаях бывает удобно отправлять push-уведомления непосредственно из клиентского приложения. В этом разделе показано, как отправлять уведомления из клиента с помощью интерфейса REST API центра уведомлений Azure.

в представлении Android Studio Project разверните узел App src основной макетres . activity_main.xml Откройте файл макета и перейдите на вкладку activity_main.xml , чтобы обновить текстовое содержимое файла. Поместите в него приведенный ниже код, который добавляет новые элементы управления Button и EditText для отправки push-уведомлений в центр уведомлений. Добавьте этот код в конец, непосредственно перед </RelativeLayout> .

в представлении Android Studio Project разверните узел App src main (основные значенияres ). Откройте файл strings.xml и добавьте строковые параметры, на которые ссылаются новые элементы управления Button и EditText . Добавьте следующие строки в конец файла, непосредственно перед </resources> .

В файле NotificationSetting.java добавьте приведенный ниже параметр в класс NotificationSettings .

Обновите HubFullAccess строку подключения HubFullAccess для центра. Чтобы скопировать эту строку подключения на Портал Azure, щелкните Политики доступа на странице Параметры в центре уведомлений.

В начале файла MainActivity.java добавьте следующие операторы import .

В файле MainActivity.java в начало класса MainActivity добавьте следующие переменные:

Создайте маркер подписанного URL-адреса для аутентификации запроса POST для отправки сообщений в центр уведомлений. Проанализируйте данные ключа из строки подключения и создайте токен SAS, как упоминалось в справочнике по основным понятиям REST API. Ниже приведен пример реализации.

В файле MainActivity.java добавьте в класс MainActivity следующий метод, который анализирует строку подключения:

В файле MainActivity.java добавьте в класс MainActivity следующий метод, который создает маркер проверки подлинности SaS:

В MainActivity.java добавьте в класс следующий метод MainActivity для выполнения кнопки MainActivity.java щелкните и отправьте сообщение push-уведомления в центр с помощью встроенной REST API.

Дальнейшие действия

В рамках этого руководства вы отправили широковещательные уведомления на все устройства Android, зарегистрированные в серверной части. Чтобы узнать, как отправлять push-уведомления на конкретные устройства Android, перейдите к следующему руководству:

📎📎📎📎📎📎📎📎📎📎