Руководство. Создание push-уведомлений в приложении iOS
В этом руководстве описано, как создать push-уведомления в приложении iOS с помощью пакета SDK для чата Службы коммуникации Azure.
Push-уведомления оповещают пользователей входящих сообщений в потоке чата, когда мобильное приложение не запущено на переднем плане. Службы коммуникации Azure поддерживает две версии push-уведомлений:
Базовая версия: значок индикатора отображается на значке приложения, устройство воспроизводит звук уведомления и появится всплывающее баннер оповещение.
Расширенная версия: помимо функций, поддерживаемых в базовой версии, можно настроить название и предварительный просмотр сообщения в баннере оповещения.
Изучив это руководство, вы:
- Настройте сертификат службы push-уведомлений Apple (APNs).
- Настройте Xcode для push-уведомлений.
- Реализуйте базовую или расширенную версию push-уведомлений.
- Проверьте уведомления в приложении.
- Настройте автоматическое продление регистрации для push-уведомлений.
Скачать код
Получите доступ к примеру кода для этого руководства на сайте GitHub.
Необходимые компоненты
Выполните все необходимые действия в кратком руководстве. Добавление чата в приложение.
Создайте центр уведомлений Azure в той же подписке, что и ресурс Служб коммуникации, а затем свяжите концентратор уведомлений с ресурсом Служб коммуникации. См. статью "Подготовка центра уведомлений".
Создайте сертификат APNS p12 и задайте его в центре уведомлений.
Если вы не являетесь внутренним клиентом Майкрософт, выполните все действия, описанные в следующей процедуре.
Если вы являетесь внутренним клиентом Майкрософт, отправьте запрос и укажите идентификатор пакета приложения, чтобы получить сертификат P12. Затем перейдите к последнему шагу в следующей процедуре.
Войдите на портал разработчика Apple.
Перейдите к сертификатам, идентификаторам и идентификаторам идентификаторов> приложений профилей>, а затем выберите идентификатор приложения, связанный с приложением.
На странице идентификатора приложения выберите "Возможности>push-уведомлений" и нажмите кнопку "Сохранить".
В появившемся диалоговом окне "Изменение возможностей приложений" нажмите кнопку "Подтвердить".
На странице идентификатора приложения выберите ">Параметры push-уведомлений>", а затем сделайте следующее:
- Для тестирования push-уведомлений при разработке приложения iOS нажмите кнопку "Создать сертификат " в разделе SSL-сертификат разработки.
- Чтобы отправить push-уведомления в рабочей среде, нажмите кнопку "Создать сертификат " в разделе "Рабочий SSL-сертификат".
На странице "Сертификаты, идентификаторы и профили" появится область создания сертификата.
В этой области вы отправляете запрос на подпись сертификата (CSR):
На новой вкладке браузера следуйте этой странице справки Apple, чтобы создать CSR и сохранить файл в качестве приложения name.cer. Инструкции включают использование помощника по сертификатам для запроса сертификата и заполнения сведений о сертификате.
Перетащите файл .cer в область выбора файла . Затем нажмите кнопку "Продолжить " в правом верхнем углу.
Щелкните Скачать.
Сохраните файл локально в формате P12.
Откройте скачанный файл .cer. В цепочки ключей выберите сертификат, щелкните его правой кнопкой мыши и экспортируйте сертификат в формате P12.
Перейдите в центр уведомлений. В разделе "Параметры" выберите Apple (APNS). Затем заполните сведения о сертификате:
- В режиме проверки подлинности выберите сертификат.
- Для отправки сертификата отправьте только что созданный P12-файл.
- В режиме приложения выберите нужный режим.
Завершив ввод всех сведений, нажмите кнопку "Сохранить".
Настройка Xcode
В Xcode перейдите к разделу Подписывание и возможности.
Добавьте возможность, выбрав пункт + возможность, а затем — Push-уведомления.
Добавьте еще одну возможность, выбрав пункт + возможность, а затем — Режимы фоновой работы.
В разделе "Фоновые режимы" выберите удаленные уведомления.
Для целевого объекта Pod — AzureCore задайте для параметра "Только API app-Extension-Safe" , как нет.
Реализация push-уведомлений
Базовая версия
Если вы хотите реализовать базовую версию push-уведомлений, необходимо зарегистрировать для удаленных уведомлений с помощью APN. Ознакомьтесь с примером кода, чтобы увидеть связанную реализацию в AppDelegate.swift.
Расширенная версия
Если вы хотите реализовать расширенную версию push-уведомлений, необходимо включить в приложение следующие элементы. Причина в том, что шифрование содержимого клиента (например, содержимое сообщения чата и отображаемое имя отправителя) в полезных данных push-уведомлений требует некоторых обходных решений.
Хранилище данных для ключей шифрования
Создайте постоянное хранилище данных на устройствах iOS. Это хранилище данных должно иметь возможность совместно использовать данные между основными приложениями и расширениями приложений.
В примере кода для этого руководства выберите группы приложений в качестве хранилища данных, выполнив следующие действия:
Добавьте возможности групп приложений в целевые объекты приложения (основные расширения приложений и приложений), выполнив действия, описанные в статье Apple " Добавление возможностей в приложение.
Настройте группы приложений, выполнив действия, описанные в статье "Настройка групп приложений Apple". Убедитесь, что основное приложение и расширения приложения имеют одинаковое имя контейнера.
Расширение службы уведомлений
Реализуйте расширение службы уведомлений, пакетированное с основным приложением. Это расширение приложения используется для расшифровки полезных данных push-уведомлений при получении устройства.
Перейдите к добавлению расширения приложения-службы в проект в документации Apple и выполните действия.
Перейдите к использованию методов обработчика расширения в документации Apple. Apple предоставляет код по умолчанию для расшифровки данных, и вы можете следовать общей структуре этого руководства. Однако, так как вы используете пакет SDK чата для расшифровки, необходимо заменить часть, которая начинается с
// Try to decode the encrypted message data
настраиваемой логики. Ознакомьтесь с примером кода, чтобы увидеть связанную реализацию в NotificationService.swift.
Реализация протокола PushNotificationKeyStorage
Протокол PushNotificationKeyStorage
необходим для расширенной версии push-уведомлений. Вы можете использовать класс по умолчанию AppGroupPushNotificationKeyStorage
, который предоставляет пакет SDK чата. Если вы не используете группы приложений в качестве хранилища ключей или хотите настроить методы хранения ключей, создайте собственный класс, соответствующий протоколу PushNotificationKeyStorage
.
PushNotificationKeyStorage
определяет два метода:
onPersistKey(encryptionKey:expiryTime)
: этот метод используется для сохранения ключа шифрования в хранилище устройства iOS пользователя. Пакет SDK чата задает 45 минут в качестве срока действия ключа шифрования. Если вы хотите, чтобы push-уведомления действовали более 45 минут, необходимо запланироватьchatClient.startPushNotifications(deviceToken:)
вызов чаще (например, каждые 15 минут), чтобы новый ключ шифрования можно было зарегистрировать до истечения срока действия старого ключа.onRetrieveKeys() -> [String]
: этот метод используется для получения допустимых ключей, которые были сохранены ранее. Вы можете обеспечить настройку на основе выбранного ранее хранилища данных.
В расширении протокола пакет SDK чата предоставляет реализацию decryptPayload(notification:) -> PushNotificationEvent
метода, который можно использовать. Ознакомьтесь с примером кода, чтобы увидеть связанную реализацию в NotificationService.swift.
Тестирование уведомлений
Создайте поток чата с пользователем А и пользователем B.
Скачайте репозиторий GitHub для примеров приложений.
Поместите пользователей
<ACESS_TOKEN>
A и<ACS_RESOURCE_ENDPOINT>
значения в AppSettings.plist.Установите для параметра "Включить bitcode " значение "Нет " для двух целевых объектов pod: AzureCommunicationChat и Trouter.
Подключите устройство iOS к компьютеру Mac и запустите программу. Когда вам будет предложено авторизовать push-уведомления на устройстве, нажмите кнопку "Разрешить".
Как пользователь B, отправьте сообщение чата. Убедитесь, что пользователь A получает push-уведомление на устройстве iOS.
Реализация продления регистрации
Чтобы корпорация Майкрософт предоставила безопасную службу чата, регистрация push-уведомлений на устройствах iOS остается допустимой только в течение 45 минут. Чтобы поддерживать функциональные возможности push-уведомлений, необходимо реализовать продление регистрации в клиентском приложении.
В этом руководстве предлагается два решения, которые соответствуют официальным рекомендациям Apple. Мы рекомендуем реализовать оба решения вместе, чтобы повысить их эффективность.
Примечание.
Различные факторы могут повлиять на эффективность любого решения. Например, состояние батареи устройства, условия сети и ограничения для iOS могут повлиять на способность приложения выполнять фоновые задачи. Дополнительные сведения см. в видео " Достижения в фоновом выполнении приложений" и в статье о отправке фоновых обновлений из Apple .
Решение 1. Фоновые задачи
Фоновые задачи предлагают способ выполнения действий, даже если приложение не находится на переднем плане. При реализации фоновой задачи приложение может запросить больше времени для выполнения конкретной задачи, например возобновления регистрации push-уведомлений.
В следующих разделах описано, как использовать фоновые задачи для продления регистрации.
Настройка автоматического обновления маркеров доступа пользователей
Чтобы обеспечить непрерывный доступ к службам чата, необходимо поддерживать допустимые маркеры доступа пользователей. Маркеры обычно имеют срок действия по умолчанию 24 часа, после которого срок действия истекает и требует продления. Реализация механизма автоматического обновления помогает гарантировать, что маркер действителен при активации приложения чата.
Пакет SDK чата упрощает управление маркерами, автоматизовав процесс обновления при реализации пользовательского средства обновления маркеров доступа. Выполните следующие действия, чтобы настроить приложение чата для поддержки автоматического обновления маркеров:
Чтобы убедиться, что приложение чата поддерживает непрерывный и безопасный доступ пользователей, необходимо реализовать уровень служб, выделенный для выдачи маркеров. Одним из вариантов является использование Функции Azure для этой цели.
Сведения о создании функции Azure см. в статье о создании доверенной службы доступа пользователей с помощью Функции Azure статьи. В нем описывается, как настроить приложение-функцию и развернуть необходимый код для выдачи маркеров.
После настройки функции Azure:
Получите URL-адрес издателя маркера из портал Azure. Приложение чата использует этот URL-адрес для запроса новых маркеров.
Создайте и интегрируйте средство обновления маркеров в приложение чата. Этот компонент запрашивает новые маркеры и инициализирует клиент чата для простого автоматического обновления маркеров.
Пример кода для средства обновления маркера и его интеграция с клиентом чата доступна в репозитории GitHub для примеров приложений.
Включение и планирование фоновых задач
Чтобы активировать и запланировать фоновые задачи в приложении iOS, выполните действия, описанные в статье Apple с помощью фоновых задач для обновления приложения.
Для практической реализации ознакомьтесь с репозиторием GitHub для примера приложений. Предоставленный пример использует BGProcessingTask
настроенную для запуска не более одной минуты в будущем, демонстрируя, как эффективно получить данные в фоновом режиме.
Решение 2. Удаленное уведомление
Удаленное уведомление — это механизм запуска фоновых задач приложений iOS в ответ на внешние триггеры. Вы можете использовать удаленные уведомления для таких задач, как обновление регистраций без вмешательства пользователя.
Чтобы использовать удаленные уведомления для выполнения фоновой задачи:
Реализуйте механизм активации.
Например, в качестве механизма активации можно использовать приложение-функцию Azure. Он позволяет запускать код в ответ на различные триггеры, включая HTTP-запросы, поэтому это полезно для запуска автоматических push-уведомлений. Не забудьте реализовать реестр устройств в конце, чтобы приложение-функция знало, куда доставлять уведомления.
Настройка концентратора уведомлений.
Служба Центров уведомлений Azure предоставляет масштабируемую инфраструктуру push-уведомлений, которая может отправлять уведомления на любую платформу (iOS, Android, Windows и т. д.) из любой серверной части (облачной или локальной).
Вы можете повторно использовать тот же центр уведомлений, который используется для обычных push-уведомлений. Если вы хотите настроить новую, ознакомьтесь с документацией по Центрам уведомлений Azure.
Настройте приложение-функцию Azure для регулярных уведомлений.
Настройте приложение-функцию для периодической отправки удаленных уведомлений через центр уведомлений. Эти уведомления перенаправляются в APN и направляются на указанное устройство. Дополнительные инструкции см. в разделе "Выходные привязки Центров уведомлений" для Функции Azure.
Обработка уведомлений в приложении.
В приложении iOS реализуйте метод экземпляра приложения, чтобы активировать автоматическое обновление регистрации при получении автоматического уведомления.
Дополнительные сведения см. в статье Apple о настройке удаленного сервера уведомлений.