Статьи

Разработка Push-уведомлений для iOS 10

Хотя они часто используются слишком часто, уведомления — эффективный способ привлечь внимание пользователей и информировать их об обновлениях или действиях, которые им необходимо предпринять. iOS 10 приносит обновления для уведомлений, таких как новые сообщения, предложения и изменения расписания. В этом уроке я покажу вам, как использовать уведомления в ваших приложениях для iOS, и покажу новые функции, представленные в iOS 10. Для разработки push-уведомлений для iOS 10 вам потребуется последняя версия Xcode , бета-версия Xcode 8 , которая доступна на странице загрузки .

Вы можете скачать полный проект с GitHub .

Начиная

Включение Push-уведомлений легко в XCode , но вам нужно сделать пару шагов.

Создайте новый проект, дайте ему уникальное имя и идентификатор пакета .

Создав проект, перейдите в « Настройки проекта» и выберите вкладку « Возможности ». Включите Push-уведомления, как показано ниже.

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

Возможность push-уведомлений

Перейдите в раздел учетной записи разработчика и проверьте изменения, внесенные Xcode автоматически. Выберите « Сертификаты, идентификаторы и профили» в левом меню и выберите « Идентификаторы приложений» в разделе « Идентификаторы ». Найдите имя созданного приложения и выберите его, чтобы отобразить список служб. Обратите внимание, что есть два Настраиваемых статуса рядом с Push-уведомлениями.

Аккаунт разработчика

Пока не закрывайте этот экран, вы скоро вернетесь к нему.

Отправка уведомления

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

Чтобы создать сертификат, откройте Access Keychain Access и выберите пункт меню Keychain Access -> Certificate Assistant -> Запросить сертификат из центра сертификации .

Создать сертификат

Создать сертификат

Заполните форму и нажмите « Продолжить» . Убедитесь, что вы выбрали Сохранить на диск .

Создать сертификат

Вернитесь к экрану учетной записи разработчика . Вы можете создать сертификат для разработки или распространения в идентификаторах приложений . После выбора правильного приложения внизу нажмите « Изменить» . В разделе Push-уведомлений нажмите Create Certificate for development.

Создать сертификат

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

Создать сертификат

Вы создали сертификат и можете его скачать. Чтобы установить его, откройте загруженный файл.

Создать сертификат

Скачайте и запустите Pusher. Поле со списком в верхней части окна требует Push-сертификата . Поскольку он находится в вашей цепочке для ключей , OS X спросит, разрешить ли доступ в тот момент, когда Pusher пытается получить доступ к сертификату.

толкатель

толкатель

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

Получение уведомления

Время, чтобы получить кодирование. Устройство, которое получит уведомление, должно быть зарегистрировано в службе Apple Push Notification Service (APNS). Вы делаете это, отправляя уникальный токен, сгенерированный при запуске приложения.

Откройте AppDelegate.swift и добавьте следующий метод.

Примечание . Этот код содержит изменения по сравнению с Swift 3.0. Синтаксис может отличаться от того, к чему вы привыкли.

func registerPushNotifications() { DispatchQueue.main.async { let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil) UIApplication.shared().registerUserNotificationSettings(settings) } } 

В настройках вы указываете типы уведомлений, которые получит приложение, о чем я расскажу позже. Вызовите этот метод при запуске приложения в том же файле.

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { registerPushNotifications() return true } 

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

Запрос на разрешение

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

 func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) { if notificationSettings.types != UIUserNotificationType() { application.registerForRemoteNotifications() } } 

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

 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let chars = UnsafePointer<CChar>((deviceToken as NSData).bytes) var token = "" for i in 0..<deviceToken.count { token += String(format: "%02.2hhx", arguments: [chars[i]]) } print("Registration succeeded!") print("Token: ", token) } 

Если что-то пойдет не так, вызовите следующий метод.

 func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { print("Registration failed!") } 

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

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

Полезные нагрузки уведомлений

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

Уведомление отправляется пользователю в виде словаря JSON, который сам содержит словарь с ключом aps . Во втором словаре вы указываете ключи и значения полезной нагрузки.

Наиболее распространенными являются:

  • Уведомление показывается пользователю. Это может быть простая строка или словарь с такими ключами, как title, body и т. Д.
  • Звук, который устройство будет воспроизводить при получении уведомления. Это может быть пользовательский звук приложения или системный звук.
  • Номер, который приложение будет иметь в углу своего значка в виде значка. Установка этого в 0 удаляет значок.
  • content-available : используйте со значением 1, чтобы отправить пользователю уведомление в режиме без вывода сообщений. Он не будет воспроизводить звук или устанавливать какой-либо номер значка, но активирует приложение и сможет обмениваться данными с сервером.

Пример полезного уведомления для остальной части этого учебника:

 { "aps": { "alert": { "title":"Hello! :)", "body":"App closed..." }, "badge":1, "sound":"default" } } по { "aps": { "alert": { "title":"Hello! :)", "body":"App closed..." }, "badge":1, "sound":"default" } } 

Жизненный цикл приложения

Скопируйте маркер устройства, напечатанный в консоли Xcode, в Pusher. Затем скопируйте объект JSON выше в текстовое поле полезной нагрузки.

толкатель

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

Отправить уведомление

Для обработки уведомлений вам необходимо добавить новые методы:

 private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) { let aps = notification["aps"] as? [String:AnyObject] let alert = aps?["alert"] as? [String:AnyObject] let title = alert?["title"] as? String let body = alert?["body"] as? String return (title ?? "-", body ?? "-") } 

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

 func notificationReceived(notification: [NSObject:AnyObject]) { let viewController = window?.rootViewController let view = viewController as? ViewController view?.addNotification( title: getAlert(notification: notification).0, body: getAlert(notification: notification).1) } 

Этот метод добавит строку в UITableView в главном представлении приложения ( см. Полный проект для кода ViewController ).

Я проверил push-уведомления в трех случаях:

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

Если пользователь открывает приложение из уведомления, вызовите метод didFinishLaunchingWithOptions , обновленный следующим образом:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. application.applicationIconBadgeNumber = 0; // Clear badge when app launches // Check if launched from notification if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] { window?.rootViewController?.present(ViewController(), animated: true, completion: nil) notificationReceived(notification: notification) } else { registerPushNotifications() } return true } 

Значок очищается при условии, что пользователь видел уведомление. Затем проверьте, открывается ли приложение по значку или из уведомления. В первом случае вызовите метод registerPushNotifications() и процесс продолжится, как и раньше. В случае, если приложение запускается из уведомления, вызовите пользовательский метод notificationReceived и добавьте строку.

Когда приложение находится на переднем плане

Если пользователь использует приложение, то есть приложение находится на переднем плане, обработайте уведомление следующим способом. Это добавляет уведомление к tableView :

 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { notificationReceived(notification: userInfo) } 

Примечание . В этом случае уведомление не будет воспроизводить звук.

Когда приложение в фоновом режиме

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

 func applicationWillEnterForeground(_ application: UIApplication) { application.applicationIconBadgeNumber = 0; // Clear badge when app is or resumed } 

В итоге в таблице будет три строки с содержанием всех уведомлений.

TableView

Толкать вперед

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

Получайте удовольствие от отправки уведомлений. Пусть кодекс будет с вами!