Как начать работу с push-уведомлениями в Mobile Services

Для знакомства с возможностями платформы  вы можете активировать Microsoft Azure бесплатно!

Тема практической работы — использование службы Microsoft Azure Mobile Services для отправки push-уведомлений в приложение Android. Учимся добавлять функцию принудительной отправки уведомлений в проект быстрого запуска с помощью облачной службы обмена сообщениями Google (Google Cloud Messaging, GCM). После выполнения всех рассматриваемых действий ваша мобильная служба будет отправлять push-уведомление при каждой вставке записи.

При выполнении практической работы рассмотрим следующие основные этапы для включения функции push-уведомлений:

  1. Регистрация приложения для работы с push-уведомлениями
  2. Настройка службы Mobile Services
  3. Добавление push-уведомлений в приложение
  4. Обновление сценариев для отправки push-уведомлений
  5. Вставка данных для получения уведомлений

Для выполнения практической работы необходимо следующее:

Практическая работа построена на основе проекта быстрого запуска служб Mobile Services. Предварительно необходимо выполнить практическую работу Как начать работать с Mobile Services.

Регистрация приложения для работы с push-уведомлениями

Примечание

Чтобы выполнить практическую работу, необходима учетная запись Google с проверенным адресом электронной почты. Создать учетную запись Google можно на странице accounts.google.com.

1. Перейдите на веб-сайт Google APIs, выполните вход со своими учетными данными Google и нажмите Create project... (Создать проект...).

Примечание

Если у вас уже есть какой-либо проект, после входа вы будете направлены на страницу Dashboard (Информационная панель). Чтобы создать новый проект в информационной панели, разверните меню API Project (Проект API), в разделе Other projects (Другие проекты) нажмите Create... (Создать...), введите имя проекта и нажмите Create project (Создать проект).

2. Перейдите в поле URL-адреса страницы и запишите целое число, которое находится после #project:.

Это номер вашего проекта. Далее это значение будет задано как переменная SENDER_ID в клиенте.

3. На странице Google APIs нажмите Services (Службы), включите элемент управления Google Cloud Messaging for Android и примите условия предоставления услуг.

4. Нажмите API Access (ДоступкAPI), а затем нажмите Create new Server key...(Создать новый ключ сервера...)

5. В окне Configure Server Key for API Project (Настройка ключа сервера для проекта API) нажмите Create (Создать).

6. Запишите значение API key (Ключ API).

В дальнейшем этот ключ API будет использоваться службой Mobile Services для проверки подлинности с помощью GCM и отсылки push-уведомлений от имени приложения.

Настройка службы Mobile Services для отправки push-запросов

1. Войдите на портал управления Microsoft Azure, нажмите Mobile Services и выберите свое приложение.

2. Нажмите вкладку Push, введите значение ключа API, полученное от GCM на предыдущем этапе, и нажмите Save (Сохранить).

Теперь ваша мобильная служба может отправлять push-уведомления с помощью CGM.

Добавление push-уведомлений в приложение

1. В Eclipse нажмите Window (Окно) и затем нажмите Android SDK Manager (Диспетчер Android SDK).

2. В диспетчере Android SDK разверните папку Extras (Дополнения), установите флажок Google Cloud Messaging for Android Library (Служба Google Cloud Messaging для Android), запишите значение поля SDK Path (Путь к SDK), нажмите Install Package (Установить пакет), выберите Accept (Принять), чтобы принять условия лицензионного соглашения, и затем нажмите Install (Установить).

3. Повторите описанную выше процедуру и установите Google API для текущей версии Android.

4. Перейдите в папку с SDK и скопируйте файл gcm.jar из вложенной папки \extras\google\gcm\gcm-client\dist во вложенную папку проекта \libs. На вкладке Package Explorer (Обозреватель пакетов) щелкните правой кнопкой мыши по папке libs и нажмите Refresh (Обновить).

Теперь в вашем проекте будет отображаться файл библиотеки gcm.jar.

5. Откройте файл проекта AndroidManifest.xml и добавьте следующие разрешения после существующего элемента uses-permission:

<permission android:name="**my_app_package**.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="**my_app_package**.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" />

Добавьте следующий код в элемент application:

<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="**my_app_package**" /> </intent-filter> </receiver> <service android:name=".GCMIntentService" />

1. В коде, вставленном на двух предыдущих шагах, замените **my_app_package** на имя пакета приложения для вашего проекта. Это имя является значением атрибута manifest.package.

2. Откройте файл ToDoItem.java и добавьте в класс TodoItem следующий код:

@com.google.gson.annotations.SerializedName("channel") private String mRegistrationId; public String getRegistrationId() { return mRegistrationId; } public final void setRegistrationId(String registrationId) { mRegistrationId = registrationId;

Этот код создает новое свойство, содержащее регистрационный идентификатор.

Примечание

Если в мобильной службе включена динамическая схема, то новый столбец 'channel' будет добавляться в таблицу TodoItem автоматически при вставке нового элемента, содержащего данное свойство.

1.  Откройте файл ToDoItemActivity.java и добавьте следующий оператор импорта:

import com.google.android.gcm.GCMRegistrar;

Добавьте в класс следующую частную переменную, в которой  — это идентификатор проекта, назначенный Google вашему приложению на первом этапе:

private String mRegistationId; public static final String SENDER_ID = "<SENDER_ID>";

В методе onCreate добавьте следующий код перед фрагментом, создающим экземпляр MobileServiceClient:

GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this); mRegistationId = GCMRegistrar.getRegistrationId(this); if (mRegistationId.equals("")) { GCMRegistrar.register(this, SENDER_ID); }

Этот код получает регистрационный идентификатор для устройства.

Добавьте следующую строку кода в метод addItem:

item.setRegistrationId(mRegistationId.equals("") ? GCMIntentService.getRegistrationId() : mRegistationId);

Этот код задает свойство элемента registrationId для регистрационного идентификатора устройства.

1.  На вкладке Package Explorer (Обозреватель пакетов) щелкните правой кнопкой мыши по пакету, выберите New (Создать) и нажмите Class (Класс).

2. В поле Name (Имя)введите GCMIntentService, в поле Superclass (Суперкласс) введите com.google.android.gcm.GCMBaseIntentService и нажмите Finish (Готово).

Создается новый класс GCMIntentService.

3. Добавьте следующие операторы импорта:

import android.app.NotificationManager; import android.support.v4.app.NotificationCompat;

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

private static String sRegistrationId; public static String getRegistrationId() { return sRegistrationId; } public GCMIntentService(){ super(ToDoActivity.SENDER_ID);

Этот код вызывает конструктор суперкласса со значением SENDER_ID приложения.

1.  Замените существующие переопределения методов onMessage и onRegistered на следующий код:

@Override protected void onMessage(Context context, Intent intent) { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("New todo item!") .setPriority(Notification.PRIORITY_HIGH) .setContentText(intent.getStringExtra("message")); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(0, mBuilder.build()); } @Override protected void onRegistered(Context context, String registrationId) { sRegistrationId = registrationId; }

Примечание

В практической работе реализованы только переопределения методов onMessage и onRegistered. В реальном приложении следует рассмотреть возможность реализации всех четырех переопределений.

Теперь ваше приложение обновлено и поддерживает push-уведомления.

Обновление зарегистрированного сценария вставки в портале управления

1. В портале управления нажмите вкладку Data (Данные), затем нажмите таблицу TodoItem.

2. В разделе todoitem нажмите вкладку Script (Сценарий) и выберите операцию Insert (Вставить).

На экран отображается функция, которая вызывается при появлении вставки в таблице TodoItem.

3. Замените функцию вставки следующим кодом и нажмите Save (Сохранить):

function insert(item, user, request) { request.execute({ success: function() { // Запись в ответ и отправка уведомления в фоновом режиме request.respond(); push.gcm.send(item.channel, item.text, { success: function(response) { console.log('Push notification sent: ', response); }, error: function(error) { console.log('Error sending push notification: ', error); } }); } }); }

Этот код регистрирует новый сценарий вставки, в котором объект gcm используется для отправки push-уведомления (вставленного текста) в устройство, предоставленное по запросу вставки.

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

Примечание

При выполнении данного приложения в эмуляторе убедитесь, что вы используете виртуальное устройство Android (AVD), которое поддерживает Google API.

1. Перезапустите Eclipse. На вкладке Package Explorer (Обозреватель пакетов) щелкните правой кнопкой мыши по проекту, выберите Properties (Свойства), нажмите Android, установите флажок Google APIs и нажмите ОК.

После этого проект будет обращаться к Google API.

2. В разделе Window (Окно)выберите Android Virtual Device Manager (Диспетчер виртуальных устройств Android), укажите свое устройство и нажмите Edit (Правка).

3. Выберите Google APIs в поле Target (Целевой объект) и нажмите ОК.

После этого устройство AVD будет использовать Google API.

4. В меню Run (Выполнение) нажмите Run (Выполнить) и запустите приложение.

5. Напечатайте значащий текст в приложении, например A new Mobile Services task (Новая задача Mobile Services), и нажмите кнопку Add (Добавить).

6. Убедитесь, что уведомление получено.

Вы успешно выполнили эту практическую работу.