Поделиться через


Добавление 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-уведомлений при каждом добавлении нового элемента. Этот процесс обеспечивается функцией шаблона в Центрах уведомлений Azure, что позволяет осуществлять кроссплатформенные push-уведомления. Различные клиенты зарегистрированы для push-уведомлений с помощью шаблонов, и одно универсальное push-уведомление может быть доставлено на все клиентские платформы.

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

Проект бэкенд .NET

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

  2. В проекте сервера откройте контроллеры >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-уведомления для проекта Droid Xamarin.Forms для 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 package name (Имя пакета 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) добавьте в раздел dependencies следующий текст.

      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 выберите Обзор всех>служб приложений. Затем выберите бэкэнд мобильных приложений.
  2. В разделе Параметрывыберите Push. Затем выберите Настройка служб push-уведомлений.
  3. Перейдите к Google (GCM). Введите устаревший ключ сервера FCM, полученный из консоли Firebase, и выберите Сохранить.

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

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

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

  1. В проекте Droid щелкните правой кнопкой мыши на Ссылки и выберите > Управление пакетами NuGet ....
  2. В окне диспетчера пакетов NuGet найдите пакет Xamarin.Firebase.Messaging и добавьте его в проект.
  3. В свойствах проекта для проекта Droid задайте приложению компиляцию с помощью Android версии 7.0 или более поздней.
  4. Добавьте файл google-services.json, скачанный из консоли Firebase, в корень проекта Droid и задайте для его действия сборки GoogleServicesJson. Дополнительные сведения см. в разделе Добавление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. Добавьте новый класс в проект дроид с именем 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.

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

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

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

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

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

    Использовать доступ к цепочке ключей для запроса нового сертификата

    Примечание.

    По умолчанию при осуществлении доступа к цепочке ключей выбирается первый элемент списка. Это может вызвать проблему, если вы находитесь в категории Сертификаты, и Удостоверяющий Центр Разработчиков Apple не является первым элементом в списке. Прежде чем создавать 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 (Идентификаторы приложений). Затем выберите Продолжить.

    портал управления для iOS страница регистрации нового ID

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

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

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

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

    • Push-уведомления. Проверьте параметр push-уведомлений в разделе "Возможности ".

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

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

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

      После выбора регистрациивы увидите новый идентификатор приложения в виде элемента строки на странице Сертификатов, идентификаторов & профилей.

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

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

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

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

Более новый подход имеет ряд преимуществ (по сравнению с использованием сертификатов), как описано в проверке подлинности на основе токенов (HTTP/2) дляAPNS. Однако для обоих подходов были предоставлены шаги.

ВАРИАНТ 1. Создание push-сертификата P12, который можно отправить непосредственно в Центр уведомлений

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

    Изменить страницу идентификатора приложения

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

    кнопка

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

    Примечание.

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

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

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

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

    Сертификат загружен и сохранен на компьютер в папке Загрузки.

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

    Примечание.

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

  5. Дважды щелкните скачанный сертификат push-уведомлений aps_development.cer. Это действие устанавливает новый сертификат в цепочке ключей, как показано на следующем рисунке:

    список сертификатов доступа в Связке ключей, содержащий новый сертификат

    Примечание.

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

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

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

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

    Примечание.

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

ВАРИАНТ 2. Создание P8-сертификата, который можно использовать для проверки подлинности на основе токенов

  1. Обратите внимание на следующие детали:

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

    Примечание.

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

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

  4. Укажите подходящее значение имени ключа, а затем выберите пункт службе push-уведомлений Apple и нажмите кнопку Продолжить, а затем Зарегистрировать на следующем экране.

  5. Щелкните Скачать, затем переместите файл .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. Затем выберите идентификатор приложения, созданный в раскрывающемся списке идентификатор приложения, и выберите Продолжить.

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

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

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

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

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

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

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

  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

В разделе служб уведомленийвыберите Apple (APNS) и выполните соответствующие действия на основе выбранного ранее подхода в разделе Создание сертификата для центров уведомлений.

Примечание.

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

ВАРИАНТ 1: Использование push-сертификата .p12

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

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

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

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

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

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

  6. Выберите Сохранить.

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

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

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

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

  4. Выберите Сохранить.

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

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

  1. На компьютере Mac запустите Доступ к Связке ключей. На панели навигации слева в разделе Категорияоткройте Мои Сертификаты. Найдите SSL-сертификат, скачанный в предыдущем разделе, и раскройте его содержимое. Выберите только сертификат (не выбирайте закрытый ключ). Затем экспортировать его.
  2. На портале Azure выберите Обзор всех>служб приложений. Затем выберите бэкэнд мобильных приложений.
  3. В настройкахвыберите Push-уведомления службы приложений. Затем выберите имя концентратора уведомлений.
  4. Перейдите к Службам уведомлений Apple Push>загрузить сертификат. Загрузите .p12 файл, выбрав правильный режим (в зависимости от того, является ли ваш ранее полученный клиентский SSL-сертификат продуктовым или тестовым). Сохраните любые изменения.

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

Затем вы настроите параметр проекта iOS в Xamarin Studio или Visual Studio.

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

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

  2. Прокрутите вниз до фоновых режимов. Выберите поле Включить фоновые режимы и поле Удаленные уведомления.

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

  4. В разделе Сборкавыберите Подписание пакета iOSи выберите соответствующий профиль идентификации и профиль конфигурации, которые вы только что настроили для этого проекта.

    Это гарантирует, что проект использует новый профиль для подписывания кода. Официальную документацию по подготовке устройств Xamarin см. в разделе .

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

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

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

  3. На вкладке подписывание пакета iOS выберите соответствующее удостоверение и профиль подготовки, который вы только что настроили для этого проекта.

    Это гарантирует, что проект использует новый профиль для подписывания кода. Официальную документацию по настройке устройств Xamarin см. в документации по настройке устройств Xamarin.

  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-уведомлений в приложении iOS

  1. Щелкните правой кнопкой мыши проект iOS и щелкните Установить в качестве стартового проекта.

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

    Примечание.

    Вы должны явно принимать push-уведомления из приложения. Этот запрос возникает только при первом запуске приложения.

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

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

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

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

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

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

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

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

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

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

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

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

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

    Это важно

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

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

  1. На портале Azure выберите Обзор всех>служб приложений. Затем выберите бэкэнд мобильных приложений. В настройкахвыберите Push-уведомления службы приложений. Затем выберите имя концентратора уведомлений.

  2. Перейдите к Windows (WNS). Затем введите ключ безопасности (секрет клиента) и идентификатор безопасности пакета, полученный на сайте Live Services. Затем выберите Сохранить.

    Задайте ключ WNS на портале

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

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

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

    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, и задайте Toast Capable значение Да в разделе Уведомления.

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

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

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

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

Дополнительные сведения о push-уведомлениях см. в следующем разделе:

Вы также можете перейти к одному из следующих руководств:

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