Включение push-уведомлений в приложении чата

В этом руководстве описано, как включить push-уведомление в приложении IOS с помощью пакета SDK для чата коммуникации Azure.
Push-уведомления предупреждают клиентов входящих сообщений в потоке чата в ситуациях, когда мобильное приложение не работает на переднем плане. Службы коммуникации Azure поддерживает две версии push-уведомлений.

  • Basic Version : пользователь сможет увидеть значок значка 1 на значке приложения, получить звук уведомления и увидеть всплывающее баннер оповещение.

  • Advanced Version: за исключением функций, поддерживаемых в базовой версии, Contoso сможет настроить раздел заголовка и предварительного просмотра сообщений в баннере оповещения.

    Снимок экрана: базовая версия push-уведомлений.

    [Базовая версия]

    Снимок экрана: расширенная версия push-уведомлений.

    [Расширенная версия]

Скачать код

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

Необходимые компоненты

  1. Завершение всех необходимых действий в кратком руководстве по чату

  2. Настройка ANH
    Создайте Центр уведомлений Azure в той же подписке, что и ресурс служб коммуникации, и свяжите концентратор уведомлений с ресурсом Служб коммуникации. См. Подготовка Центра уведомлений.

  3. Конфигурация сертификата APNS
    Здесь мы рекомендуем создать сертификат APNS P12 и задать его в Центре уведомлений.

    If you are not a Microsoft internal client, следуйте шагу 1, чтобы выполнить шаг 9.
    If you are a Microsoft internal client, отправьте запрос здесь и укажите идентификатор пакета приложения, чтобы получить сертификат P12. После получения допустимого сертификата выполните шаг 9.

  • Шаг 1. Войдите на портал разработчика Apple. Перейдите к Certificates, IDs & Profiles > Identifiers > App IDs идентификатору приложения, связанному с приложением, и щелкните его.

    Снимок экрана: шаг 1 конфигурации сертификата APNS.
  • Шаг 2. На экране для идентификатора приложения проверкаCapabilities > Push Notifications. Нажмите кнопку "Сохранить" и ответить "Подтвердить" в появившемся диалоговом окне "Изменить возможности приложений".

    Снимок экрана: настройка сертификата APNS 2-1.Снимок экрана: настройка сертификата APNS 2-2.
  • Шаг 3. На той же странице нажмите кнопку Capabilities > Push Notifications > Configure. Нажмите одну из следующих кнопок:

    • Создание сертификата > SSL разработки (для тестирования push-уведомлений при разработке приложения iOS)
    • Создание сертификата > SSL в рабочей среде (для отправки push-уведомлений в рабочей среде)
    Снимок экрана: шаг 3 конфигурации сертификата APNS.
  • Шаг 4. Затем перейдите на следующую страницу. Здесь вы отправите запрос на подпись сертификата (CSR). Выполните следующий шаг, чтобы создать CSR.

    Снимок экрана: шаг 4 настройки сертификата APNS.
  • Шаг 5. На новой вкладке браузера перейдите на эту страницу справки, чтобы создать CSR и сохранить файл как App name.cer.

    Снимок экрана: шаг конфигурации сертификата APNS 5 – 1.Снимок экрана: шаг конфигурации сертификата APNS 5 – 2.
  • Шаг 6. Перетащите файл .cer в область выбора файла. Затем нажмите кнопку "продолжить" в правом верхнем углу.

    Снимок экрана: шаг 6 настройки сертификата APNS.
  • Шаг 7. Нажмите кнопку "Скачать" и сохраните файл на локальный диск.

    Снимок экрана: шаг 7 конфигурации сертификата APNS.
  • Шаг 8. Откройте скачанный файл .cer; откроется доступ к цепочке ключей. Выберите сертификат, щелкните правой кнопкой мыши и экспортируйте сертификат в формате P12.

    Снимок экрана: шаг 8 настройки сертификата APNS.
  • Шаг 9. Перейдите в центр уведомлений, щелкните "Apple (APNS)" в Параметры и выберите "Сертификат" в режиме проверки подлинности. Кроме того, выберите режим приложения в зависимости от необходимости. Затем отправьте только что созданный P12-файл.

    Снимок экрана: шаг 9 конфигурации сертификата APNS.
  1. Конфигурация XCode
  • В XCode перейдите в Signing & Capabilitiesраздел . Добавьте возможность, выбрав "+ Возможность", а затем нажмите кнопку "Push-уведомления".

  • Добавьте еще одну возможность, выбрав "+ Возможность", а затем выберите "Фоновые режимы". Также выберите "Удаленные уведомления" в фоновом режиме.

Снимок экрана: включение push-уведомлений и фоновых режимов в Xcode.
  • Задайте значение "Требовать только API расширения app-Сейф" в качестве "Нет" для целевого объекта Pod — AzureCore

Внедрение

1 . Базовая версия

Если вы хотите реализовать базовую версию push-уведомлений, необходимо зарегистрировать для удаленных уведомлений с помощью APNS (Служба push-уведомлений Apple). Ознакомьтесь с примером кода, чтобы увидеть связанную реализацию.AppDelegate.swift

2 . Расширенная версия

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

  • Элемент 1. Служба хранилища данных для ключей шифрования

Сначала необходимо создать постоянное хранилище данных на устройстве IOS. Это хранилище данных должно иметь возможность совместно использовать данные между основными приложениями и расширениями приложений (дополнительные сведения о расширении службы уведомлений см. в элементе 2).

В нашем примере кода мы будем выбирать "Группа приложений" в качестве хранилища данных. Ниже приведены рекомендуемые действия по созданию и использованию группы приложений:

Выполните действия, описанные в разделе "Добавление возможности " для добавления возможностей "Группы приложений" в целевые объекты приложения — как основное приложение, так и расширение службы уведомлений (см. раздел 2 о создании расширения службы уведомлений).

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

  • Элемент 2. Расширение службы уведомлений

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

Перейдите к этому официальному документу Apple. Выполните шаг "Добавление расширения приложения-службы в проект" и "Реализация методов обработчика расширения".

Обратите внимание, что на шаге "Реализация методов обработчика расширения" Apple предоставляет пример кода для расшифровки данных, и мы будем следовать общей структуре. Однако так как мы используем пакет SDK для чата для расшифровки, необходимо заменить часть, начиная с “// Try to decode the encrypted message data.” нашей настраиваемой логики. Ознакомьтесь с примером кода, чтобы увидеть связанную реализацию.NotificationService.swift

  • Элемент 3. Реализация PushNotificationKey служба хранилища протокол

В-третьих, PushNotificationKeyStorage требуется для расширенной версии. В качестве пользователя пакета SDK можно использовать класс по умолчанию AppGroupPushNotificationKeyStorage , предоставляемый пакетом SDK для чата. Если вы не используете App Group в качестве хранилища ключей или хотите настроить методы хранения ключей, создайте собственный класс, соответствующий протоколу PushNotificationKey служба хранилища.

Для PushNotificationKey служба хранилища определяет два метода: onPersistKey(encryptionKey:expiryTime) и onRetrieveKeys() -> [String].

Первый метод используется для сохранения ключа шифрования в хранилище устройства IOS пользователя. Пакет SDK чата устанавливает 45 минут в качестве срока действия ключа шифрования. Если вы хотите, чтобы chatClient.startPushNotifications(deviceToken:) push-уведомление действовало более 45 минут, необходимо запланировать вызов на сравнительно частой основе (например, каждые 15 минут), чтобы новый ключ шифрования мог быть зарегистрирован до истечения срока действия старого ключа.

Второй метод используется для получения допустимых ключей, ранее хранящихся. Вы можете обеспечить настройку на основе выбранного хранилища данных (элемент 1).

В расширении протокола пакет SDK чата decryptPayload(notification:) -> PushNotificationEvent предоставляет реализацию метода, который можно использовать. Ознакомьтесь с примером кода, чтобы увидеть связанную реализацию.NotificationService.swift

Тестирование

  1. Создайте поток чата с пользователем A и пользователем B.

  2. Скачайте репозиторий примеров приложений и выполните описанные выше действия в разделе предварительных требований и реализации.

  3. Поместите ACESS_TOEKN пользователя <и <ACS_RESOURCE_ENDPOINT>AppSettings.plist.>

  4. Установите для параметра "Включить Bitcode" значение "Нет" для двух целевых объектов Pod — AzureCommunicationChat и Trouter.

  5. Подключите устройство IOS к mac, запустите программу и нажмите кнопку "Разрешить", когда будет предложено авторизовать push-уведомление на устройстве.

  6. Как пользователь B, отправьте сообщение чата. Вы (пользователь А) должны иметь возможность получать push-уведомление на устройстве IOS.

Автоматическое продление регистрации

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

Здесь мы предлагаем два решения, согласованные с официальными рекомендациями Apple. Важно отметить, что эффективность любого решения может повлиять на различные факторы, такие как состояние батареи устройства, условия сети и ограничения для iOS, которые могут повлиять на способность приложения выполнять фоновые задачи, которые указаны в Apple WWDC Video и Официальном вики-сайте Apple. Мы рекомендуем реализовать оба решения вместе, чтобы повысить их эффективность.

Решение 1. Фоновые задачи

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

Шаг 1. Настройка автоматического обновления маркера доступа пользователей

Чтобы обеспечить непрерывный доступ к службам чата, необходимо поддерживать допустимые маркеры доступа пользователей. Маркеры обычно имеют срок действия по умолчанию (24 часа), после которого срок действия истекает, требуя продления. Реализация механизма автоматического обновления гарантирует, что маркер всегда действителен при активации приложения чата.
Пакет SDK чата упрощает управление маркерами, автоматизовав процесс обновления при реализации пользовательского средства обновления маркеров доступа. Выполните следующие действия, чтобы настроить приложение чата для поддержки автоматического обновления маркера:

1.1. Установка уровня служб для выдачи токенов

Чтобы приложение чата поддерживало непрерывный и безопасный доступ пользователей, необходимо реализовать уровень служб, выделенный для выдачи маркеров. Одним из вариантов является использование Функции Azure для этой цели.

Сведения о создании функции Azure см. в статье "Создание доверенной службы доступа пользователей с помощью Функции Azure". В этом руководстве описывается, как настроить приложение-функцию и развернуть код, необходимый для выдачи маркеров.

1.2 Реализация средства обновления маркеров в приложении чата

После настройки функции Azure:
Получите URL-адрес издателя токенов на портале Azure, который приложение чата использует для запроса новых маркеров.
Создайте и интегрируйте средство обновления маркеров в приложении чата. Это реализует компонент средства обновления маркеров, который запрашивает новые маркеры и инициализирует клиент чата с помощью этого компонента для простого автоматического обновления маркеров.

Для простой ссылки и реализации пример кода для средства обновления маркеров и его интеграции с клиентом чата доступен в нашем примере репозитория приложений.

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

Чтобы активировать и запланировать фоновые задачи в приложении, придерживайтесь рекомендаций Apple, как описано в их документации по использованию фоновых задач для обновления приложения. В этом руководстве приведены комплексные шаги по интеграции возможностей фоновых задач в приложение iOS.

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

Решение 2. Удаленное уведомление

Удаленное уведомление — это механизм выполнения фоновых задач приложений iOS в ответ на внешние триггеры. Их можно использовать для таких задач, как обновление регистраций без вмешательства пользователя. Вот как использовать удаленное уведомление для выполнения фоновой задачи:

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

2.Настройка Центра уведомлений Azure
Центр уведомлений Azure предоставляет масштабируемую инфраструктуру push-уведомлений, которая может отправлять уведомления на любую платформу (iOS, Android, Windows и т. д.) из любой серверной части (облачной или локальной среды). Важно управлять и отправлять уведомления на устройства. Вы можете повторно использовать тот же центр уведомлений, который используется для обычных push-уведомлений. Если вы хотите настроить новую, ознакомьтесь с документацией по Центрам уведомлений Azure.

3.Настройка приложения-функции Azure для регулярных уведомлений
Настройте приложение-функцию Azure, чтобы периодически отправлять удаленные уведомления через Центр уведомлений Azure. Эти уведомления перенаправляются в службу push-уведомлений Apple (APNS) и направляются на указанное устройство. Дополнительные инструкции см. в разделе "Функции-привязки-уведомления-центры".

4.Handle Notifications in Your App
В приложении iOS реализуйте метод экземпляра приложения, чтобы активировать автоматическое обновление регистрации при получении автоматического уведомления.