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

Общие сведения

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

Если вы не используете скачанный проект сервера, необходимо добавить пакет расширений для push-уведомлений. Дополнительные сведения см. в статье Работа с пакетом SDK для внутреннего сервера .NET для мобильных приложений Azure.

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

Для iOS потребуется участие в программе для разработчиков на платформе Apple и физическое устройство iOS. Симулятор iOS не поддерживает push-уведомления.

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

Компонент мобильных приложений в службе приложений Azure использует Центры уведомлений Azure для отправки push-уведомлений, поэтому вам нужно настроить центр уведомлений для мобильного приложения.

  1. На портале Azure щелкните Службы приложений, а затем выберите серверную часть приложения. В разделе Параметры выберите Push.

  2. Чтобы добавить в приложение ресурс концентратора уведомлений, нажмите кнопку Подключить. Вы можете создать центр или подключиться к существующему.

    Настройка концентратора

Теперь центр уведомлений подключен к серверной части проекта вашего мобильного приложения. Позднее вы настроите этот концентратор уведомлений, чтобы подключиться к системе отправки уведомлений платформы (PNS), которая отправляет push-уведомления на устройства.

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

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

Выберите одну из следующих процедур, которая соответствует типу проекта серверной части: серверная часть .NET или серверная частьNode.js.

Серверный проект .NET

  1. В Visual Studio щелкните правой кнопкой мыши серверный проект. Затем выберите Управление пакетами NuGet. Найдите Microsoft.Azure.NotificationHubs, а затем нажмите кнопку Установить. Этот процесс устанавливает библиотеку Центров уведомлений для отправки уведомлений из серверной части.

  2. В проекте сервера откройте файл Controllers>TodoItemController.cs. Затем добавьте следующие операторы using:

    using System.Collections.Generic;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Azure.Mobile.Server.Config;
    
  3. В метод PostTodoItem добавьте следующий код после вызова InsertAsync.

    // 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);
    
    // Send the message so that all template registrations that contain "messageParam"
    // receive the notifications. This includes APNS, GCM, WNS, and MPNS template registrations.
    Dictionary<string,string> templateParams = new Dictionary<string,string>();
    templateParams["messageParam"] = item.Text + " was added to the list.";
    
    try
    {
        // Send the push notification and log the results.
        var result = await hub.SendTemplateNotificationAsync(templateParams);
    
        // 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");
    }
    

    При вставке нового элемента отправляется шаблонное уведомление, содержащее item.Text.

  4. Повторная публикация серверного проекта

Серверный проект Node.js

  1. Настройте внутренний проект.

  2. Замените существующий код в файле 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 template payload.
    var payload = '{"messageParam": "' + 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 template notification.
                context.push.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;  
    

    При вставке нового элемента отправляется шаблонное уведомление, содержащее item.Text.

  3. При редактировании этого файла на локальном компьютере повторно опубликуйте серверный проект.

Настройка и запуск проекта Android (необязательно)

Выполнив инструкции из этого раздела, вы добавите push-уведомления для проекта Xamarin.Forms Droid для платформы Android.

Включение Firebase Cloud Messaging (FCM)

  1. Войдите в консоль Firebase. Создайте проект Firebase, если его еще нет.

  2. После создания проекта выберите Add Firebase to your Android app (Добавить Firebase в приложение Android).

    Добавление Firebase в приложение Android

  3. Выполните следующие действия на странице Add Firebase to your Android app (Добавление Firebase в приложение Android):

    1. Для Имя пакета Android скопируйте свое значение applicationId в файл приложения build.gradle. В нашем примере он выглядит следующим образом: com.fabrikam.fcmtutorial1app.

      Указание имени пакета.

    2. Выберите Регистрация приложения.

  4. Выберите Download google-services.json (Загрузить google-services.json), сохраните файл в папку приложения проекта, а затем выберите Далее.

    Загрузка файла google-services.json.

  5. Внесите следующие изменения конфигурации в проект в Android Studio.

    1. В файл build.gradle уровня проекта (<project>/build.gradle) добавьте следующий текст в раздел зависимости.

      classpath 'com.google.gms:google-services:4.0.1'
      
    2. В файле 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'
      
    3. Добавьте следующую строку в конец файла build.gradle уровня приложения после раздела с зависимостями.

      apply plugin: 'com.google.gms.google-services'
      
    4. На панели инструментов щелкните Синхронизировать сейчас.

      Изменения конфигурации build.gradle.

  6. Выберите Далее.

  7. Выберите Пропустить этот шаг.

    Пропуск последнего шага.

  8. В консоли Firebase щелкните значок шестеренки возле имени проекта. Выберите пункт Project Settings (Параметры проекта).

    Выбор параметров проекта

  9. Если вы еще не скачали файл google-services.json в папку app проекта Android Studio, это можно сделать на этой странице.

  10. Переключитесь на вкладку Обмен сообщениями в облаке в верхней части.

  11. Скопируйте и сохраните Ключ сервера для последующего использования. Это значение используется для настройки имени центра.

Настройка серверной части мобильных приложений для отправки push-запросов с использованием FCM

  1. На портале Azure последовательно выберите Browse All (Просмотреть все)>Службы приложений. Выберите серверную часть для функции "Мобильные приложения".
  2. В разделе Параметры выберите Push. Затем выберите Настройка служб push-уведомлений.
  3. Откройте Google (GCM). Введите старый ключ сервера FCM, который вы получили в консоли Firebase, и нажмите кнопку Сохранить.

Теперь ваша служба настроена для работы с Firebase Cloud Messaging.

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

Настроив FCM для серверной части, в клиент можно добавить компоненты и код для регистрации в службе FCM. Можно также выполнить регистрацию в Центрах уведомлений Azure, чтобы отправлять push-уведомления через серверную часть мобильных приложений и получать уведомления.

  1. В проекте Droid щелкните правой кнопкой мыши Ссылки > Управление пакетами NuGet....
  2. В окне диспетчера пакетов NuGet выполните поиск пакета Xamarin.Firebase.Messaging и добавьте его в проект.
  3. В окне свойств проекта Droid настройте компиляцию приложения с помощью Android 7.0 или более поздней версии.
  4. Добавьте файл google-services.json, скачанный из консоли Firebase, в корень проекта Droid и задайте для свойства Build Action (Действие сборки) значение GoogleServicesJson. Дополнительные сведения см. в разделе Add the Google Services JSON File (Добавление JSON-файла служб Google).

Регистрация в Firebase Cloud Messaging

  1. Откройте файл AndroidManifest.xml и вставьте следующие элементы <receiver> в элемент <application>:

    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" 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="${applicationId}" />
        </intent-filter>
    </receiver>
    

Реализация службы идентификатора экземпляра Firebase

  1. Добавьте в проект Droid новый класс с именем FirebaseRegistrationService. В начале файла этого класса обязательно должны быть указаны следующие инструкции using:

    using System.Threading.Tasks;
    using Android.App;
    using Android.Util;
    using Firebase.Iid;
    using Microsoft.WindowsAzure.MobileServices;
    
  2. Замените пустой класс FirebaseRegistrationService следующим кодом:

    [Service]
    [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
    public class FirebaseRegistrationService : FirebaseInstanceIdService
    {
        const string TAG = "FirebaseRegistrationService";
    
        public override void OnTokenRefresh()
        {
            var refreshedToken = FirebaseInstanceId.Instance.Token;
            Log.Debug(TAG, "Refreshed token: " + refreshedToken);
            SendRegistrationTokenToAzureNotificationHub(refreshedToken);
        }
    
        void SendRegistrationTokenToAzureNotificationHub(string token)
        {
            // Update notification hub registration
            Task.Run(async () =>
            {
                await AzureNotificationHubService.RegisterAsync(TodoItemManager.DefaultManager.CurrentClient.GetPush(), token);
            });
        }
    }
    

    Класс FirebaseRegistrationService отвечает за создание маркеров безопасности, которые предоставляют приложению доступ к FCM. Метод OnTokenRefresh вызывается, когда приложение получает маркер регистрации из FCM. Этот метод извлекает маркер из свойства FirebaseInstanceId.Instance.Token, которое асинхронно обновляется средствами FCM. Метод OnTokenRefresh вызывается редко, так как маркер обновляется только при установке или удалении приложения, при удалении данных приложения пользователем, при удалении идентификатора экземпляра приложением либо при компрометации маркера. Кроме того, служба идентификатора экземпляра FCM потребует, чтобы маркер приложения периодически обновлялся (обычно каждые 6 месяцев).

    Метод OnTokenRefresh также вызывает метод SendRegistrationTokenToAzureNotificationHub, который позволяет связать маркер регистрации пользователя с концентратором уведомлений Azure.

Регистрация в концентраторе уведомлений Azure

  1. Добавьте в проект Droid новый класс с именем AzureNotificationHubService. В начале файла этого класса обязательно должны быть указаны следующие инструкции using:

    using System;
    using System.Threading.Tasks;
    using Android.Util;
    using Microsoft.WindowsAzure.MobileServices;
    using Newtonsoft.Json.Linq;
    
  2. Замените пустой класс AzureNotificationHubService следующим кодом:

    public class AzureNotificationHubService
    {
        const string TAG = "AzureNotificationHubService";
    
        public static async Task RegisterAsync(Push push, string token)
        {
            try
            {
                const string templateBody = "{\"data\":{\"message\":\"$(messageParam)\"}}";
                JObject templates = new JObject();
                templates["genericMessage"] = new JObject
                {
                    {"body", templateBody}
                };
    
                await push.RegisterAsync(token, templates);
                Log.Info("Push Installation Id: ", push.InstallationId.ToString());
            }
            catch (Exception ex)
            {
                Log.Error(TAG, "Could not register with Notification Hub: " + ex.Message);
            }
        }
    }
    

    Метод RegisterAsync создает простой шаблон уведомления в формате JSON и регистрируется для получения шаблонов уведомлений из концентратора уведомлений с помощью маркера регистрации Firebase. Это гарантирует, что все уведомления, отправленные из концентратора уведомлений Azure, будут направляться на устройство, представленное маркером регистрации.

Отображение содержимого push-уведомления

  1. Добавьте в проект Droid новый класс с именем FirebaseNotificationService. В начале файла этого класса обязательно должны быть указаны следующие инструкции using:

    using Android.App;
    using Android.Content;
    using Android.Media;
    using Android.Support.V7.App;
    using Android.Util;
    using Firebase.Messaging;
    
  2. Замените пустой класс FirebaseNotificationService следующим кодом:

    [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class FirebaseNotificationService : FirebaseMessagingService
    {
        const string TAG = "FirebaseNotificationService";
    
        public override void OnMessageReceived(RemoteMessage message)
        {
            Log.Debug(TAG, "From: " + message.From);
    
            // Pull message body out of the template
            var messageBody = message.Data["message"];
            if (string.IsNullOrWhiteSpace(messageBody))
                return;
    
            Log.Debug(TAG, "Notification message body: " + messageBody);
            SendNotification(messageBody);
        }
    
        void SendNotification(string messageBody)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            //Unique request code to avoid PendingIntent collision.
            var requestCode = new Random().Next();
            var pendingIntent = PendingIntent.GetActivity(this, requestCode, intent, PendingIntentFlags.OneShot);
            var notificationBuilder = new NotificationCompat.Builder(this)
                .SetSmallIcon(Resource.Drawable.ic_stat_ic_notification)
                .SetContentTitle("New Todo Item")
                .SetContentText(messageBody)
                .SetContentIntent(pendingIntent)
                .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
                .SetAutoCancel(true);
    
            var notificationManager = NotificationManager.FromContext(this);
            notificationManager.Notify(0, notificationBuilder.Build());
        }
    }
    

    Метод OnMessageReceived, который вызывается, когда приложение получает уведомление от FCM, извлекает содержимое сообщения и вызывает метод SendNotification. Этот метод преобразует содержимое сообщения в локальное уведомление, которое запускается во время выполнения приложения. При этом уведомление отображается в области состояния.

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

Тестирование push-уведомлений в приложении Android

Первые два шага нужны, только если тестирование выполняется в эмуляторе.

  1. Убедитесь, что устройство или эмулятор, на котором выполняется развертывание или отладка, настроены с помощью Сервисов Google Play. Чтобы проверить это, посмотрите, установлены ли на устройстве или эмуляторе приложения Play.
  2. Добавьте учетную запись Google на устройство Android, щелкнувПараметры приложений>>Добавить учетную запись. Затем следуйте указаниям в отображаемых запросах, чтобы добавить на устройство имеющуюся учетную запись Google или создать новую.
  3. В Visual Studio или Xamarin Studio щелкните правой кнопкой мыши проект Droid и выберите Назначить запускаемым проектом.
  4. Нажмите кнопку Запустить , чтобы создать проект и запустить приложение на устройстве Android или в эмуляторе.
  5. В приложении введите задачу и щелкните значок плюса (+).
  6. После добавления элемента должно отобразиться соответствующее уведомление.

Настройка и запуск проекта iOS (необязательно)

В этом разделе описано, как запустить проект Xamarin iOS для устройств под управлением iOS. Пропустите этот раздел, если вы не работаете с устройствами iOS.

Создание файла запроса на подписывание сертификата

Служба push-уведомлений Apple (APNs) использует сертификаты для аутентификации push-уведомлений. Следуйте приведенным указаниям, чтобы создать сертификата push-уведомлений, необходимый для отправки и получения уведомлений. Дополнительные сведения об этих понятиях см. в официальной документации по Службе push-уведомлений Apple.

Создайте файл запроса на подписывание сертификата (CSR), используемый Apple для создания подписанного сертификата push-уведомлений.

  1. На компьютере Mac запустите средство Keychain Access. Его можно запустить из папки Служебные программы или Другое на панели запуска.

  2. Нажмите Связка ключей, разверните Помощник по сертификатам, а затем выберите Запросить сертификат в центре сертификации.

    Использование Keychain Access для запрашивания нового сертификата

    Примечание

    По умолчанию при осуществлении доступа к цепочке ключей выбирается первый элемент списка. Это может вызвать проблемы, если у вас открыта категория сертификатов и центр сертификации Apple Worldwide Developer Relations не указан в списке первым. Прежде чем создавать CSR (запрос на подписывание сертификата), убедитесь, что выбран элемент, не являющийся ключом, или ключ центра сертификации Apple Worldwide Developer Relations.

  3. Заполните поля Адрес электронной почты пользователя и Личное имя, выберите Сохранено на диск, а затем — Продолжить. Оставьте поле Адрес электронной почты ЦС пустым, так как оно является необязательным.

    Требуемые сведения о сертификате

  4. Задайте имя CSR-файлу в поле Сохранить как, выберите расположение в поле Где и нажмите кнопку Сохранить.

    Выбор имени файла для сертификата

    При этом CSR-файл сохраняется в выбранном месте. Расположением по умолчанию является рабочий стол. Запомните расположение, выбранное для файла.

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

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

Чтобы отправлять push-уведомления в приложение iOS, зарегистрируйте приложение в системе Apple, а также зарегистрируйте его для получения push-уведомлений.

  1. Если вы еще не зарегистрировали свое приложение, перейдите на портал подготовки iOS в центре разработчиков Apple. Войдите на портал с помощью идентификатора Apple ID и выберите Identifiers (Идентификаторы). Затем выберите + , чтобы зарегистрировать новое приложение.

    Страница с идентификаторами приложения на портале подготовки iOS

  2. На экране Register a New Identifier (Зарегистрировать новый идентификатор) выберите переключатель App IDs (Идентификаторы приложений). Затем выберите Continue (Продолжить).

    Страница регистрации нового идентификатора на портале подготовки iOS

  3. Обновите следующие три значения для нового приложения и нажмите кнопку Continue (Продолжить).

    • Описание: Введите описательное имя для приложения.

    • Bundle ID (Идентификатор пакета). Введите идентификатор пакета в форму Organization Identifier.Product Name (Идентификатор организации.Имя продукта), как описано в руководстве по распространению приложения. Значения Organization Identifier (Идентификатор организации) и Product Name (Имя продукта) должны соответствовать идентификатору организации и имени продукта, указанным при создании проекта Xcode. На следующем снимке экрана значение NotificationHubs используется как идентификатор организации, а значение GetStarted — как название продукта. Убедитесь, что значение Bundle Identifier (Идентификатор пакета) совпадает со значением из проекта Xcode, чтобы в Xcode использовался правильный профиль публикации.

      Страница регистрации идентификатора приложения на портале подготовки iOS

    • Push-уведомления. Проверьте опцию Push Notifications (Push-уведомления) в разделе Capabilities (Возможности).

      Форма для регистрации нового идентификатора приложения

      При этом будет создан идентификатор вашего приложения, а также запрошено подтверждение информации. Выберите Continue (Продолжить), а затем нажмите Register (Зарегистрировать), чтобы подтвердить новый идентификатор приложения.

      Подтверждение нового идентификатора приложения

      После выбора Register (Зарегистрировать) вы увидите новый идентификатор приложения в виде элемента строки на странице Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили).

  4. На странице Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили) в разделе Identifiers (Идентификаторы) перейдите к только что созданному элементу строки идентификатора приложения и выберите соответствующую строку, чтобы отобразить окно Edit your App ID Configuration (Изменить конфигурацию идентификатора приложения).

Создание сертификата для Центров уведомлений

Сертификат нужен для того, чтобы центр уведомлений мог работать с APNs. Создать его можно двумя способами:

  1. Создайте сертификат .p12, который можно отправить прямо в концентратор уведомлений.
  2. Создайте сертификат .p8, который можно использовать для проверки подлинности на основе токена (новый подход).

Новый подход имеет ряд преимуществ по сравнению с подходом на основе сертификатов (см. сведения о проверке подлинности на основе токена (HTTP/2) для APNs). В этой статье приводятся инструкции, применимые в рамках обоих подходов.

Вариант 1. Создание сертификата .p12 службы push-уведомлений, который можно отправить прямо в концентратор уведомлений

  1. Прокрутите вниз до отмеченной опции Push Notifications (Push-уведомления), а затем выберите Configure (Настроить), чтобы создать сертификат.

    Страница изменения идентификатора приложения

  2. Откроется окно Apple Push Notification service SSL Certificates (SSL-сертификаты службы push-уведомлений Apple). Нажмите кнопку Create Certificate (Создать сертификат) в разделе Development SSL Certificate (SSL-сертификат разработки).

    Кнопка создания сертификата для идентификатора приложения

    Появится экран Create a new Certificate (Создать новый сертификат).

    Примечание

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

  3. Нажмите Choose File (Выбрать файл), перейдите к папке, в которой сохранен CSR-файл, созданный в первом задании, и дважды щелкните по имени сертификата, чтобы загрузить его. Затем выберите Continue (Продолжить).

  4. После того как сертификат будет создан на портале, нажмите кнопку Download (Скачать). Сохраните сертификат и запомните расположение, в котором он сохранен.

    Страница скачивания созданного сертификата

    При этом сертификат будет скачан и сохранен на вашем компьютере в папке Загрузки.

    Поиск файла сертификата в папке

    Примечание

    Скачанному сертификату разработки по умолчанию задано имя aps_development.cer.

  5. Дважды щелкните скачанный сертификат push-уведомлений aps_development.cer. При этом новый сертификат устанавливается в Keychain, как на следующем изображении.

    Список сертификатов Keychain Access с новым сертификатом

    Примечание

    Имя вашего сертификата может отличаться, но оно будет начинаться с префикса Apple Development iOS Push Services.

  6. В программе Keychain Access щелкните правой кнопкой мыши новый сертификат push-уведомлений, созданный в категории Certificates (Сертификаты). Щелкните Export (Экспорт), укажите имя файла, выберите формат P12 и нажмите кнопку Save (Сохранить).

    Экспорт сертификата в формате р12

    Вы можете выбрать защиту сертификата с помощью пароля, но это необязательно. Нажмите кнопку ОК, если хотите обойти создание пароля. Запишите имя файла и расположение экспортируемого сертификата в формате P12. Они нужны для аутентификации с помощью APNs.

    Примечание

    Имя файла в формате P12 и его расположение могут отличаться от изображенных в этом учебнике.

Вариант 2. Создание сертификата .p8, который можно использовать для проверки подлинности на основе токена

  1. Запишите следующие значения:

    • значение App ID Prefix (Префикс идентификатора приложения) — это Team ID (Идентификатор команды);
    • значение Bundle ID (Идентификатор пакета).
  2. Вернитесь на страницу Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили), щелкните Keys (Ключи).

    Примечание

    Если вы уже настроили ключ для APNs, можете повторно использовать сертификат .p8, который вы скачали после его создания. В таком случае можно пропустить шаги 35.

  3. Чтобы создать ключ, нажмите кнопку + (кнопка Create a key (Создать ключ)).

  4. Укажите подходящее значение в поле Key Name (Имя ключа), установите флажок Apple Push Notifications service (APNs) (Служба push-уведомлений Apple (APNs)), щелкните Continue (Продолжить) и на следующем экране нажмите кнопку Register (Зарегистрировать).

  5. Щелкните Download (Скачать), переместите файл с расширением .p8 (с префиксом AuthKey_ ) в защищенный локальный каталог и нажмите кнопку Готово.

    Примечание

    Обязательно сохраните файл с расширением .p8 в безопасном месте и сохраните его резервную копию. Скачав ключ один раз, вы не сможете скачать его повторно, так как копия ключа удаляется с сервера.

  6. В разделе Ключи щелкните имя ключа, который вы только что создали, или имя существующего ключа, если вы решили использовать его.

  7. Запишите значение Key ID (Идентификатор ключа).

  8. Откройте файл сертификата с расширением .p8 в подходящем приложении, например Visual Studio Code, и запишите значение ключа. Это значение находится между строками -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY----- .

    -----BEGIN PRIVATE KEY-----
    <key_value>
    -----END PRIVATE KEY-----
    

    Примечание

    Это значение токена, которое понадобится позже для настройки концентратора уведомлений.

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

  • идентификатор команды (см. шаг 1);
  • идентификатор пакета (см. шаг 1);
  • идентификатор ключа (см. шаг 7);
  • значение токена, то есть значение ключа из файла с расширением .p8 (см. шаг 8).

Создание профиля подготовки для приложения

  1. Вернитесь на портал подготовки iOS, выберите Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили), нажмите Profiles (Профили) в меню слева, а затем выберите + , чтобы создать новый профиль. Откроется окно Register a New Provisioning Profile (Зарегистрировать новый профиль подготовки).

  2. Выберите iOS App Development (Разработка приложений для iOS) в разделе Development (Разработка) в качестве типа профиля подготовки и нажмите кнопку Continue (Продолжить).

    Список с профилем подготовки

  3. Затем в раскрывающемся списке App ID (Идентификатор приложения) выберите созданный идентификатор приложения и нажмите кнопку Continue (Продолжить).

    Выбор идентификатора приложения

  4. В окне Select certificates (Выбор сертификатов) выберите сертификат для разработки, используемый для подписывания кода, и нажмите кнопку Continue (Продолжить). Это не созданный сертификат push-уведомлений. Если он не существует, создайте его. Если сертификат существует, перейдите к следующему шагу. Выполните приведенные ниже действия, чтобы создать сертификат разработки, если он не существует.

    1. Если вы видите No Certificates are available (Нет доступных сертификатов), выберите Create Certificate (Создать сертификат).
    2. В разделе Software (Программное обеспечение) выберите Apple Development (Разработка Apple). Затем выберите Continue (Продолжить).
    3. Перейдите к экрану Create a new Certificate (Создать новый сертификат) и нажмите Choose File (Выбрать файл).
    4. Перейдите к сертификату Certificate Signing Request (Запрос на подпись сертификата), который вы создали ранее, выберите его, а затем нажмите Open (Открыть).
    5. Выберите Continue (Продолжить).
    6. Скачайте сертификат разработки и запомните расположение, в котором он сохранен.
  5. Вернитесь на страницу Certificates, Identifiers & Profiles (Сертификаты, идентификаторы и профили), нажмите Profiles (Профили) в меню слева, а затем + , чтобы создать новый профиль. Откроется окно Register a New Provisioning Profile (Зарегистрировать новый профиль подготовки).

  6. В окне Select certificates (Выбор сертификатов) выберите сертификат разработки, который вы только что создали. Затем выберите Continue (Продолжить).

  7. Затем выберите устройства для тестирования и нажмите кнопку Continue (Продолжить).

  8. Наконец, выберите имя профиля в поле Provisioning Profile Name (Имя профиля подготовки) и нажмите кнопку Generate (Создать).

    Выбор имени профиля подготовки

  9. После создания нового профиля подготовки выберите Download (Скачать). Запомните расположение, в котором он сохранен.

  10. Перейдите в расположение профиля подготовки и дважды щелкните его, чтобы установить его на компьютере разработки Xcode.

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

В этом разделе показано, как создать концентратор уведомлений и настроить проверку подлинности с помощью APNs, используя ранее созданный сертификат push-уведомлений (файл .p12) или проверку подлинности на основе токена. Если вы хотите использовать уже созданный центр уведомлений, перейдите к шагу 5.

  1. Войдите на портал Azure.

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

    Портал Azure. Выбор Центров уведомлений

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

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

  4. На странице Концентратор уведомлений выполните следующие действия:

    1. Введите имя в поле Центр уведомлений.

    2. Введите имя в поле Создать пространство имен. Пространство имен содержит один или несколько центров.

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

    4. В поле Группа ресурсов выберите существующую группу ресурсов или укажите имя для новой группы ресурсов.

    5. Нажмите кнопку Создать.

      Портал Azure: настройка свойств концентратора уведомлений

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

    портал Azure — уведомления —> Перейти к ресурсу

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

    Важно!

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

    Портал Azure: строки подключения к концентратору уведомлений

Добавление данных об APNs в центр уведомлений

В разделе Notification Services выберите Apple (APNS) , а затем выполните действия в зависимости от способа, выбранного ранее на этапе создания сертификата для Центров уведомлений.

Примечание

Используйте режим Рабочая среда или Режим приложения, только если push-уведомления нужно отправлять пользователям, которые приобрели приложение в магазине.

Вариант 1. Использование сертификата .p12 для службы push-уведомлений

  1. Выберите Сертификат.

  2. Щелкните значок файла.

  3. Выберите экспортированный ранее файл с расширением .p12, а затем нажмите Open (Открыть).

  4. При необходимости укажите пароль.

  5. Выберите режим Песочница.

    Настройка сертификации APNs на портале Azure

  6. Щелкните Сохранить.

Вариант 2. Использование проверки подлинности на основе токена

  1. Выберите Токен.

  2. Введите следующие значения, которые вы получили ранее:

    • идентификатор ключа;
    • идентификатор пакета;
    • идентификатор команды;
    • токен.
  3. Выберите Песочница.

  4. Щелкните Сохранить.

Вы добавили данные об APNs в центр уведомлений. У вас также есть строки подключения для регистрации приложения и отправки push-уведомлений.

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

  1. На компьютере Mac запустите программу Keychain Access. На панели навигации слева в разделе Category (Категория) откройте My Certificates (Мои сертификаты). Найдите и откройте скачанный на предыдущем этапе SSL-сертификат. Выберите только сертификат (без закрытого ключа). Затем экспортируйте его.
  2. На портале Azure последовательно выберите Browse All (Просмотреть все)>Службы приложений. Выберите серверную часть для функции "Мобильные приложения".
  3. В разделе Параметры выберите Push-уведомления службы приложений. Затем выберите имя концентратора уведомлений.
  4. Перейдите в раздел Apple Push Notification ServicesUpload Certificate (Отправка сертификатаслужб> push-уведомлений Apple). Передайте P12-файл, выбрав правильный режим (в зависимости от того, откуда получен SSL-сертификат клиента: из рабочей среды или песочницы). Сохраните внесенные изменения.

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

Далее следует настроить параметры проекта iOS в Xamarin Studio или Visual Studio.

Настройка проекта iOS в Xamarin Studio

  1. В Xamarin.Studio откройте Info.plist и обновите идентификатор пакета , указав идентификатор пакета, созданный ранее с новым идентификатором приложения.

  2. Прокрутите вниз до раздела Background Modes (Фоновые режимы). Установите флажки Enable Background Modes (Разрешить фоновые режимы) и Remote notifications (Удаленные уведомления).

  3. Дважды щелкните проект на панели решения, чтобы открыть параметры проекта.

  4. В разделе Build (Сборка) выберите iOS Bundle Signing (Подпись пакета iOS), а затем выберите нужное удостоверение и созданный для этого проекта профиль подготовки в соответствующих полях.

    Таким образом, проект будет использовать новый профиль для подписи кода. Официальную документацию по подготовке устройств Xamarin см. в статье Device Provisioning (Подготовка устройства).

Настройка проекта iOS в Visual Studio

  1. В Visual Studio щелкните правой кнопкой мыши проект и выберите пункт Свойства.

  2. На страницах свойств щелкните вкладку Приложение iOS и обновите идентификатор в поле Идентификатор, указав свой ранее созданный ИД.

  3. На вкладке iOS Bundle Signing (Подпись пакета iOS) выберите нужное удостоверение и созданный для этого проекта профиль подготовки в соответствующих полях.

    Таким образом, проект будет использовать новый профиль для подписи кода. Официальную документацию по подготовке устройств Xamarin см. в статье Device Provisioning (Подготовка устройства).

  4. Дважды щелкните Info.plist, чтобы открыть этот элемент, а затем включите RemoteNotifications в разделе Background Modes (Фоновые режимы).

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

  1. В проекте iOS откройте файл AppDelegate.cs и добавьте в его начало приведенный ниже оператор.

    using Newtonsoft.Json.Linq;
    
  2. В класс AppDelegate добавьте переопределение для события RegisteredForRemoteNotifications, чтобы выполнить регистрацию для получения уведомлений.

    public override void RegisteredForRemoteNotifications(UIApplication application,
        NSData deviceToken)
    {
        const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";
    
        JObject templates = new JObject();
        templates["genericMessage"] = new JObject
            {
                {"body", templateBodyAPNS}
            };
    
        // Register for push with your mobile app
        Push push = TodoItemManager.DefaultManager.CurrentClient.GetPush();
        push.RegisterAsync(deviceToken, templates);
    }
    
  3. Добавьте также в класс AppDelegate следующее переопределение для обработчика событий DidReceiveRemoteNotification.

    public override void DidReceiveRemoteNotification(UIApplication application,
        NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
    {
        NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;
    
        string alert = string.Empty;
        if (aps.ContainsKey(new NSString("alert")))
            alert = (aps[new NSString("alert")] as NSString).ToString();
    
        //show alert
        if (!string.IsNullOrEmpty(alert))
        {
            UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null);
            avAlert.Show();
        }
    }
    

    Этот метод обрабатывает входящие уведомления во время выполнения приложения.

  4. В классе AppDelegate добавьте следующий код в метод FinishedLaunching.

    // Register for push notifications.
    var settings = UIUserNotificationSettings.GetSettingsForTypes(
        UIUserNotificationType.Alert
        | UIUserNotificationType.Badge
        | UIUserNotificationType.Sound,
        new NSSet());
    
    UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
    UIApplication.SharedApplication.RegisterForRemoteNotifications();
    

    Он обеспечивает поддержку удаленных уведомлений и запрашивает регистрацию push-уведомлений.

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

Тестирование push-уведомлений в приложении iOS

  1. Щелкните проект iOS правой кнопкой мыши и выберите Назначить запускаемым проектом.

  2. Нажмите кнопку Запустить или клавишу F5 в Visual Studio, чтобы выполнить сборку проекта и запустить приложение на устройстве iOS. Затем нажмите кнопку ОК, чтобы принять push-уведомления.

    Примечание

    Необходимо явно разрешить прием push-уведомлений от вашего приложения. Этот запрос отображается только при первом запуске приложения.

  3. В приложении введите задачу и щелкните значок плюса (+).

  4. Убедитесь, что уведомление получено, а затем нажмите кнопку ОК, чтобы его закрыть.

Настройка и запуск проектов для Windows (необязательно)

В этом разделе описано, как запускать проекты Xamarin.Forms WinApp и WinPhone81 на устройствах под управлением Windows. Эти действия применимы для любых проектов универсальной платформы Windows (UWP). Пропустите этот раздел, если вы не работаете с устройствами Windows.

Регистрация приложения для Windows для получения push-уведомлений через службу уведомлений Windows (WNS)

  1. В обозревателе решений Visual Studio щелкните правой кнопкой мыши проект приложения для Магазина Windows. Затем выберите Магазин>Связать приложение с Магазином.

    Связь приложения с Магазином Windows

  2. В мастере нажмите кнопку Далее. Затем войдите в систему с помощью учетной записи Майкрософт. В разделе Зарезервировать новое имя приложения введите имя приложения и выберите Зарезервировать.

  3. После успешного создания регистрации приложения выберите новое имя приложения. Нажмите кнопку Далее, а затем кнопку Связать. Этот процесс добавляет необходимые регистрационные данные Магазина Windows в манифест приложения.

  4. Повторите шаги 1 и 3 для проекта приложения Магазина Windows Phone, используя регистрацию, созданную ранее для приложения Магазина Windows.

  5. Перейдите в Центр разработки для Windows и войдите в систему, используя учетную запись Майкрософт. В разделе Мои приложения выберите регистрацию нового приложения. Затем разверните узел Службы>Push-уведомления.

  6. На странице Push-уведомления в разделе Службы push-уведомлений Windows (WNS) и мобильные приложения Microsoft Azure выберите Сайт служб Трансляции. Запишите значения идентификатора безопасности пакета и текущее значение в разделе Секрет приложения.

    Параметр приложения в центре разработчиков

    Важно!

    Секрет приложения и ИД безопасности пакета — это важные учетные данные для безопасного доступа. Не сообщайте никому эти значения и не распространяйте их вместе со своим приложением.

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

  1. На портале Azure последовательно выберите Browse All (Просмотреть все)>Службы приложений. Выберите серверную часть для функции "Мобильные приложения". В разделе Параметры выберите Push-уведомления службы приложений. Затем выберите имя концентратора уведомлений.

  2. Откройте Windows (WNS). Ведите ключ безопасности (секрет клиента) и ИД безопасности пакета, полученные на сайте служб Live. Щелкните Сохранить.

    Указание ключа WNS на портале

Вы настроили серверную часть на использование WNS для отправки push-уведомлений.

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

  1. В Visual Studio откройте файл проекта Windows App.xaml.cs и добавьте следующие операторы.

    using Newtonsoft.Json.Linq;
    using Microsoft.WindowsAzure.MobileServices;
    using System.Threading.Tasks;
    using Windows.Networking.PushNotifications;
    using <your_TodoItemManager_portable_class_namespace>;
    

    Вместо <your_TodoItemManager_portable_class_namespace> укажите пространство имен своего переносимого проекта, который содержит класс TodoItemManager.

  2. В файл App.xaml.cs добавьте следующий метод InitNotificationsAsync.

    private async Task InitNotificationsAsync()
    {
        var channel = await PushNotificationChannelManager
            .CreatePushNotificationChannelForApplicationAsync();
    
        const string templateBodyWNS =
            "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>";
    
        JObject headers = new JObject();
        headers["X-WNS-Type"] = "wns/toast";
    
        JObject templates = new JObject();
        templates["genericMessage"] = new JObject
        {
            {"body", templateBodyWNS},
            {"headers", headers} // Needed for WNS.
        };
    
        await TodoItemManager.DefaultManager.CurrentClient.GetPush()
            .RegisterAsync(channel.Uri, templates);
    }
    

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

  3. В файле App.xaml.cs измените определение метода обработчика событий OnLaunched, добавив в него модификатор async. В конец метода добавьте следующую строку кода.

    await InitNotificationsAsync();
    

    Теперь push-уведомления будут создаваться или обновляться при каждом запуске приложения. Это нужно, чтобы push-канал WNS всегда оставался активным.

  4. В обозревателе решений для Visual Studio откройте файл Package.appxmanifest и в разделе Notifications задайте для параметра Toast Capable значение Yes.

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

Тестирование push-уведомлений в приложении Windows

  1. В Visual Studio щелкните правой кнопкой мыши проект Windows и выберите Назначить запускаемым проектом.
  2. Нажмите кнопку Выполнить , чтобы выполнить сборку проекта и запустить приложение.
  3. В приложении введите имя нового todoitem, а затем щелкните значок плюса (+), чтобы добавить его.
  4. После добавления элемента должно отобразиться соответствующее уведомление.

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

Вы можете узнать больше о push-уведомлениях.

Кроме того, вы можете изучить одно из следующих руководств:

  • Добавление проверки подлинности в приложение
    Узнайте больше о проверке подлинности пользователей приложения с помощью поставщика удостоверений.
  • Включение автономной синхронизации для приложения
    Узнайте, как добавить в приложение поддержку автономной работы с помощью серверной части мобильных приложений. При автономной синхронизации пользователи могут взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевое подключение отсутствует.