Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор
В этом руководстве вы добавите push-уведомления в проект Android быстрого запуска, так чтобы push-уведомление отправлялось на устройство каждый раз, когда добавляется запись.
Если вы не используете скачанный проект сервера быстрого запуска, вам потребуется пакет расширения push-уведомлений. Дополнительные сведения см. в статье Работа с пакетом SDK серверного сервера .NET для мобильных приложений Azure.
Предпосылки
Кроме этого, вам потребуются:
Интегрированная среда разработки в зависимости от внутренней части проекта:
- Android Studio, если это приложение имеет серверную часть Node.js.
- Visual Studio Community 2013 или более поздняя версия, если в этом приложении используется серверная часть Microsoft .NET.
Android 2.3 или более поздняя версия, Репозиторий Google 27 или более поздняя версия, а также Службы Google Play 9.0.2 или более поздняя версия для Firebase Cloud Messaging.
Завершите быстрый запускAndroid.
Создание проекта, поддерживающего Firebase Cloud Messaging
Войдите в консоль Firebase. Создайте проект Firebase, если его еще нет.
После создания проекта выберите Add Firebase to your Android app (Добавить Firebase в приложение Android).
Выполните следующие действия на странице Add Firebase to your Android app (Добавление Firebase в приложение Android):
Для параметра Android package name (Имя пакета Android) скопируйте свое значение applicationId в файл приложения build.gradle. В этом примере это
com.fabrikam.fcmtutorial1app.
Выберите Регистрация приложения.
Выберите Download google-services.json (Загрузить google-services.json), сохраните файл в папку приложения проекта, а затем выберите Далее.
Внесите следующие изменения конфигурации в проект в Android Studio.
В файл build.gradle уровня проекта (<project>/build.gradle) добавьте в раздел dependencies следующий текст.
classpath 'com.google.gms:google-services:4.0.1'В файле build.gradle уровня приложения (<project>/<app-module>/build.gradle) в раздел зависимостей добавьте следующий текст.
implementation 'com.google.firebase:firebase-core:16.0.8' implementation 'com.google.firebase:firebase-messaging:17.3.4'Добавьте следующую строку в конец файла build.gradle уровня приложения после раздела с зависимостями.
apply plugin: 'com.google.gms.google-services'На панели инструментов щелкните Синхронизировать сейчас.
Выберите Далее.
Выберите Пропустить этот шаг.
В консоли Firebase выберите значок шестеренки для вашего проекта. Выберите пункт Project Settings (Параметры проекта).
Если вы еще не скачали файл google-services.json в папку app проекта Android Studio, это можно сделать на этой странице.
Переключитесь на вкладку Обмен сообщениями в облаке в верхней части.
Скопируйте и сохраните Ключ сервера для последующего использования. Вы используете это значение для настройки вашего центра.
Настройка концентратора уведомлений
Функция мобильных приложений Службы приложений Azure использует Центр уведомлений Azure для отправки push-уведомлений, поэтому вам нужно настроить центр уведомлений для вашего мобильного приложения.
На портале Azureперейдите к службам приложений, а затем выберите серверную часть вашего приложения. В разделе Параметрывыберите Push.
Чтобы добавить ресурс концентратора уведомлений в приложение, выберите Подключиться. Вы можете создать концентратор или подключиться к существующему.
Теперь вы подключили центр уведомлений к внутреннему проекту мобильных приложений. Позже вы настроите этот центр уведомлений для подключения к системе уведомлений платформы (PNS) для отправки на устройства.
Настройка Azure для отправки push-уведомлений
На портале Azureщелкните Обзор всех>служб приложений, а затем щелкните серверную часть мобильных приложений. В разделе Параметрыщелкните App Service Push, а затем щелкните имя концентратора уведомлений.
Перейдите к Google (GCM), введите значение ключа сервера, полученное из Firebase в предыдущей процедуре, и нажмите кнопку Сохранить.
Серверная часть мобильных приложений теперь настроена для использования Firebase Cloud Messaging. Это позволяет отправлять push-уведомления в приложение, работающее на устройстве Android, с помощью концентратора уведомлений.
Включение push-уведомлений для проекта сервера
Используйте процедуру, соответствующую типу вашей серверной части проекта — либо серверной части .NET, либо Node.js серверной части.
Проект бэкенд .NET
В Visual Studio щелкните правой кнопкой мыши проект сервера и щелкните Управление пакетами NuGet. Найдите
Microsoft.Azure.NotificationHubs, а затем щелкните Установить. При этом устанавливается клиентская библиотека Центров уведомлений.В папке Controllers откройте TodoItemController.cs и добавьте следующие инструкции
using:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;Замените метод
PostTodoItemследующим кодом:public async Task<IHttpActionResult> PostTodoItem(TodoItem item) { TodoItem current = await InsertAsync(item); // Get the settings for the server project. HttpConfiguration config = this.Configuration; MobileAppSettingsDictionary settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings(); // Get the Notification Hubs credentials for the Mobile App. string notificationHubName = settings.NotificationHubName; string notificationHubConnection = settings .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString; // Create a new Notification Hub client. NotificationHubClient hub = NotificationHubClient .CreateClientFromConnectionString(notificationHubConnection, notificationHubName); // Android payload var androidNotificationPayload = "{ \"data\" : {\"message\":\"" + item.Text + "\"}}"; try { // Send the push notification and log the results. var result = await hub.SendGcmNativeNotificationAsync(androidNotificationPayload); // Write the success result to the logs. config.Services.GetTraceWriter().Info(result.State.ToString()); } catch (System.Exception ex) { // Write the failure result to the logs. config.Services.GetTraceWriter() .Error(ex.Message, null, "Push.SendAsync Error"); } return CreatedAtRoute("Tables", new { id = current.Id }, current); }Переопубликуйте серверный проект.
Node.js серверный проект
Настройте ваш бэкенд-проект.
Замените существующий код в файле todoitem.js следующим образом:
var azureMobileApps = require('azure-mobile-apps'), promises = require('azure-mobile-apps/src/utilities/promises'), logger = require('azure-mobile-apps/src/logger'); var table = azureMobileApps.table(); table.insert(function (context) { // For more information about the Notification Hubs JavaScript SDK, // see https://aka.ms/nodejshubs logger.info('Running TodoItem.insert'); // Define the GCM payload. var payload = { "data": { "message": context.item.text } }; // Execute the insert. The insert returns the results as a Promise, // Do the push as a post-execute action within the promise flow. return context.execute() .then(function (results) { // Only do the push if configured if (context.push) { // Send a GCM native notification. context.push.gcm.send(null, payload, function (error) { if (error) { logger.error('Error while sending push notification: ', error); } else { logger.info('Push notification sent successfully!'); } }); } // Don't forget to return the results from the context.execute() return results; }) .catch(function (error) { logger.error('Error while running context.execute: ', error); }); }); module.exports = table;При вставке нового элемента todo отправляется уведомление GCM, содержащее элемент item.text.
При редактировании файла на локальном компьютере повторно опубликуйте проект сервера.
Добавление push-уведомлений в приложение
В этом разделе описано, как обновить клиентское приложение Android для обработки push-уведомлений.
Проверка версии пакета SDK для Android
Из-за текущей разработки версия пакета SDK для Android, установленная в Android Studio, может не соответствовать версии в коде. Пакет SDK для Android, на который ссылается в этом руководстве, имеет версию 26, последнюю версию во время написания. Номер версии может увеличиться по мере появления новых выпусков пакета SDK, и мы рекомендуем использовать последнюю версию.
Два симптома несоответствия версии:
- При сборке или перестроении проекта могут появиться сообщения об ошибках Gradle, такие как
Gradle sync failed: Failed to find target with hash string 'android-XX'. - Стандартные объекты Android в коде, которые должны быть разрешены на основе инструкций
import, могут вызывать сообщения об ошибках.
Если появится одно из этих элементов, версия пакета SDK для Android, установленная в Android Studio, может не соответствовать целевому объекту пакета SDK для скачаемого проекта. Чтобы проверить версию, внесите следующие изменения:
В Android Studio щелкните Tools>Android>SDK Manager. Если вы не установили последнюю версию платформы SDK, щелкните ее, чтобы установить ее. Запишите номер версии.
На вкладке обозревателя проектов в разделе скрипты Gradleоткройте файл build.gradle (модуль: приложение). Убедитесь, что для compileSdkVersion и targetSdkVersion установлена последняя версия SDK.
build.gradleможет выглядеть следующим образом:android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } }
Следующий шаг — установка служб Google Play. Firebase Cloud Messaging имеет некоторые минимальные требования к уровню API для разработки и тестирования, к которому должно соответствовать свойство minSdkVersion в манифесте.
Если вы тестируете на старом устройстве, обратитесь к Добавление Firebase в ваш проект Android, чтобы определить, насколько низким можно задать это значение, и установите его соответствующим образом.
Добавление Firebase Cloud Messaging в проект
В Android Studio выберите файл>структура проекта. Выберите уведомления, выберите Firebase Cloud Messaging, а затем нажмите ОК.
Добавить код
В проекте приложения откройте файл
AndroidManifest.xml. Добавьте следующий код после открывающего тегаapplication:<service android:name=".ToDoMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name=".ToDoInstanceIdService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service>Откройте файл
ToDoActivity.javaи внесите следующие изменения:Добавьте инструкцию импорта:
import com.google.firebase.iid.FirebaseInstanceId;Измените определение
MobileServiceClientс частного на частный статический, чтобы это выглядело следующим образом.private static MobileServiceClient mClient;Добавьте метод
registerPush:public static void registerPush() { final String token = FirebaseInstanceId.getInstance().getToken(); if (token != null) { new AsyncTask<Void, Void, Void>() { protected Void doInBackground(Void... params) { mClient.getPush().register(token); return null; } }.execute(); } }Обновите метод onCreate класса
ToDoActivity. Убедитесь, что добавили этот код после созданияMobileServiceClient.registerPush();
Добавьте новый класс для обработки уведомлений. В обозревателе проектов откройте узлы приложения >java>и пространства имен проекта, затем щелкните правой кнопкой мыши на узле с именем пакета. Щелкните Создать, а затем щелкните Класс Java. В поле "Имя" введите
ToDoMessagingServiceи нажмите кнопку "ОК". Затем замените объявление класса следующим:import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class ToDoMessagingService extends FirebaseMessagingService { private static final int NOTIFICATION_ID = 1; @Override public void onMessageReceived(RemoteMessage remoteMessage) { String message = remoteMessage.getData().get("message"); if (message != null) { sendNotification("Notification Hub Demo", message); } } private void sendNotification(String title, String messageBody) { PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, ToDoActivity.class), 0); Notification.Builder notificationBuilder = new Notification.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle(title) .setContentText(messageBody) .setContentIntent(contentIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (notificationManager != null) { notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); } } }Добавьте другой класс для обработки обновлений токенов. Создайте класс java
ToDoInstanceIdServiceи замените объявление класса следующим:import com.google.firebase.iid.FirebaseInstanceIdService; public class ToDoInstanceIdService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { ToDoActivity.registerPush(); } }
Теперь приложение обновлено для поддержки push-уведомлений.
Тестирование приложения с использованием опубликованной мобильной службы
Вы можете протестировать приложение, напрямую подключив телефон Android с USB-кабелем или используя виртуальное устройство в эмуляторе.
Дальнейшие действия
Теперь, когда вы выполнили это руководство, рассмотрите возможность продолжения работы с одним из следующих руководств:
- Добавить аутентификацию в приложение Android. Узнайте, как добавить проверку подлинности в проект быстрого запуска todolist в Android с помощью поддерживаемого поставщика удостоверений.
- Включить автономную синхронизацию для приложения Android. Узнайте, как добавить автономную поддержку в приложение с помощью серверной части мобильных приложений. При автономной синхронизации пользователи могут взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевое подключение отсутствует.