Вступление
Изначально Apple представила push-уведомления, чтобы приложения могли реагировать на события, если приложение не работает на переднем плане. Однако операционная система и устройства iOS значительно изменились за последние несколько лет, и приложениям не нужно полагаться исключительно на push-уведомления для выполнения задач в фоновом режиме.
Это не значит, что push-уведомления больше не нужны. Push-уведомления полезны для уведомления приложения о важных событиях и для привлечения пользователей вашего приложения. Кроме того, не забывайте, что приложение по-прежнему не может работать в фоновом режиме без ограничений. Другими словами, первоначальная цель push-уведомлений остается в силе.
Даже самые опытные разработчики iOS время от времени ломают голову, когда им приходится иметь дело с подготовкой приложений. К сожалению, push-уведомления увеличивают эту сложность. В этом уроке я надеюсь показать вам, что настройка push-уведомлений не должна быть кошмаром. Следуйте и я обещаю, что вы будете отправлять push-уведомления в кратчайшие сроки.
Если вы ищете быстрое решение, вы можете попробовать AZNotification: Уведомления для iPhone на Envato Market, который позволяет легко создавать привлекательные уведомления в кратчайшие сроки. Уведомления сбрасываются с панели навигации и могут отображать как информационные, так и сообщения об ошибках. Или нанять разработчика приложений Envato Studio, чтобы помочь вам.
1. Предпосылки
Вам понадобятся две вещи, если вы хотите следовать за мной. Первое, что вам нужно, это физическое устройство для получения push-уведомлений, потому что iOS Simulator не поддерживает push-уведомления. Второе, что вам нужно, это платная учетная запись разработчика iOS. Только платные учетные записи могут предоставлять приложения для запуска на физическом устройстве.
2. Настройка проекта
Цель этого руководства — создать приложение, настроенное на получение push-уведомлений. Откройте Xcode и создайте новый проект на основе шаблона приложения Single View .
Назовите проект Push , введите идентификатор компании и префикс класса, а также выберите « Устройства» для iPhone.
3. Регистрация
Несмотря на то, что я не буду обсуждать базовую инфраструктуру push-уведомлений, важно, чтобы вы знали и понимали, что должно делать ваше приложение для получения push-уведомлений и почему оно это делает.
Откройте TSPAppDelegate.m и обновите application:didFinishLaunchingWithOptions:
как показано ниже. Мы вызываем registerForRemoteNotificationTypes:
application
объекта application
, передавая типы уведомлений, которые нас интересуют. Теперь операционная система знает, что приложение заинтересовано в получении push-уведомлений.
1
2
3
4
5
6
|
— (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Register for Remote Notifications
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
return YES;
}
|
Операционная система связывается с серверами Apple и получает токен устройства для уникальной идентификации устройства, на котором запущено приложение. Этот маркер устройства используется вашей серверной инфраструктурой для отправки push-уведомлений. Это делается путем отправки токена устройства вместе с фактическим push-уведомлением на серверы Apple. Серверы Apple отвечают за распространение push-уведомлений на соответствующие устройства.
Обратите внимание, что маркер устройства отличается для каждого приложения и может даже меняться со временем для одного и того же приложения. Поэтому Apple рекомендует запрашивать токен устройства при каждом запуске приложения и отправлять токен устройства на сервер, чтобы убедиться, что токен устройства актуален.
Если вы пользуетесь такими услугами, как Parse или Urban Airship , вам не о чем беспокоиться. В этом случае вам нужно всего лишь отправить бэкенду устройства маркер iOS, который вам вручает.
Методы, которые сообщают вашему приложению, успешна ли регистрация для удаленных уведомлений или нет, являются application:didRegisterForRemoteNotificationsWithDeviceToken:
и application:didFailToRegisterForRemoteNotificationsWithError:
соответственно. На данный момент, реализовать эти методы, как показано ниже.
1
2
3
|
— (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@»Did Register for Remote Notifications with Device Token (%@)», deviceToken);
}
|
1
2
3
4
5
|
— (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@»Did Fail to Register for Remote Notifications»);
NSLog(@»%@, %@», error, error.localizedDescription);
}
|
Оба метода объявлены протоколом UIApplicationDelegate
. Этот протокол также объявляет другой метод application:didReceiveRemoteNotification:
который вызывается, когда приложение получает удаленное уведомление. Вам решать обрабатывать любые входящие push-уведомления. application:didReceiveRemoteNotification:
метод передает вам полезную нагрузку push-уведомления как объект NSDictionary
. Ваше приложение должно решить, как оно должно реагировать на push-уведомление.
Если вы запустите ваше приложение, то будет вызвано application:didFailToRegisterForRemoteNotificationsWithError:
method. Это неудивительно, поскольку мы еще не закончили настройку приложения для push-уведомлений. Напоминаем, что удаленные уведомления не поддерживаются симулятором iOS. Вам понадобится физическое устройство для завершения этого урока.
4. SSL-сертификат
Чтобы выполнить следующий шаг, вам необходимо войти в свою учетную запись разработчика iOS в Центре разработки iOS от Apple. Выберите « Идентификаторы» в разделах « Приложения для iOS» .
Нажмите кнопку «плюс» в правом верхнем углу и введите описание идентификатора приложения . Это поможет вам определить идентификатор приложения позже.
Вы можете оставить префикс идентификатора приложения как есть, но для суффикса идентификатора приложения необходимо установить явный идентификатор приложения , а не идентификатор приложения с подстановочными знаками . Если вы хотите, чтобы приложение получало удаленные уведомления, вам нужно использовать явный идентификатор приложения , например com.tutsplus.push , вместо com.tutsplus. * .
В разделе Службы приложений включите Push-уведомления . Нажмите « Продолжить», чтобы отправить форму, и нажмите « Отправить», чтобы создать идентификатор приложения.
В списке идентификаторов приложений выберите только что созданный и нажмите кнопку « Изменить» под ним. Прокрутите вниз, пока не увидите раздел, который охватывает push-уведомления. Вы должны увидеть две кнопки с надписью Создать сертификат …, как показано ниже.
Как я упоминал ранее, ваш сервер взаимодействует с серверами Apple для отправки удаленных уведомлений в ваше приложение. Ваш бэкэнд отправляет удаленные уведомления в ваше приложение через серверы Apple. По этой причине Apple необходимо знать, что только ваши серверы могут подключаться к своим серверам. Вы не хотите, чтобы кто-то еще отправлял удаленные уведомления в ваше приложение.
Поэтому Apple требует, чтобы вы создали сертификат SSL. Многие разработчики недовольны словами «сертификаты» и «обеспечение», но на самом деле это не так сложно. Следуйте, и вы будете готовы менее чем за две минуты.
Откройте Keychain Access на компьютере разработчика и выберите Certificate Assistant> Запросить сертификат в Центре сертификации … из меню Access Keychain . При выборе этой опции дважды проверьте, чтобы в Keychain Access не был выбран ключ.
Введите адрес электронной почты и общее имя, чтобы идентифицировать сертификат позже. Оставьте поле CA Email пустым и выберите Сохранено на диск . Нажмите Продолжить и сохраните запрос подписи сертификата на ваш жесткий диск.
Вы создали несколько вещей, выполнив этот шаг. Вы создали запрос на подпись сертификата, а также открытый и закрытый ключи. Ключи должны быть видны в Keychain Access, как показано ниже.
Вернитесь в iOS Dev Center и нажмите кнопку Create Certificate … , которую мы видели ранее. Apple сообщает вам, какие шаги необходимо предпринять, чтобы создать запрос на подпись сертификата, но мы уже выполнили их. Нажмите « Продолжить» , загрузите запрос на подпись сертификата, нажав кнопку « Выбрать файл …» , и нажмите « Создать», чтобы создать сертификат SSL.
В соответствии с инструкциями Apple, загрузите сертификат и дважды щелкните его, чтобы установить его в Keychain Access . Дважды проверьте, что сертификат добавлен в Keychain Access и связан с правильным закрытым ключом.
Следующим шагом, предоставлением приложений, является то, что сбивает с толку многих разработчиков. Позволь мне провести тебя через это.
5. Предоставление приложений
Прежде чем мы сможем протестировать нашу настройку push-уведомлений, нам нужно создать профиль обеспечения для нашего приложения. В Центре разработки iOS выберите « Разработка» в разделе « Профили подготовки ». Нажмите кнопку «плюс» в правом верхнем углу и выберите « Разработка приложений для iOS» в разделе « Разработка ».
Нажмите « Продолжить» и выберите свой идентификатор приложения из списка. Выберите сертификаты, которые хотите включить в профиль обеспечения, и нажмите « Продолжить» . Поскольку мы создаем профиль обеспечения для разработки, нам также необходимо указать, какие устройства необходимо включить в профиль обеспечения. Убедитесь, что ваше тестовое устройство включено. Дайте профилю предоставления разумное имя и нажмите « Создать» .
Загрузите профиль обеспечения и перетащите его в XCode, чтобы добавить его. Обновите параметры сборки своей цели в XCode, чтобы использовать новый профиль обеспечения. Создайте и запустите ваше приложение, чтобы убедиться, что все работает как положено.
Если вы столкнулись с проблемами, то дважды проверьте, совпадает ли идентификатор пакета вашего приложения с идентификатором приложения. Обратите внимание, что идентификатор пакета чувствителен к регистру.
Если вы выполнили действия, описанные в этом руководстве, ваше приложение должно запросить следующее сообщение.
Если вы нажмете ОК , ваше приложение запросит у операционной системы токен устройства. Если это успешно, application:didRegisterForRemoteNotificationsWithDeviceToken:
метод протокола UIApplicationDelegate
вызывается, вручая вам маркер устройства. Поскольку мы добавили оператор log к этому методу, токен устройства также должен быть зарегистрирован на консоли в XCode.
1
|
Push[2182:60b] Did Register for Remote Notifications with Device Token (<131cec1a 64cf8f4c 80009196 6157311d c774df92 056c74c2 e5538e52 db4848f1>)
|
6. Отправка push-уведомлений
Чтобы проверить, поступают ли какие-либо push-уведомления, которые вы отправляете, вам необходимо иметь внутренний сервер, на который ваше приложение может отправить токен устройства. Затем этот бэкэнд может соединяться с серверами Apple для отправки push-уведомлений.
Я не буду освещать этот аспект push-уведомлений в этом руководстве, но это самая простая часть push-уведомлений, особенно если вы используете такой сервис, как Parse или Urban Airship .
Вы также можете использовать Houston , драгоценный камень Ruby, разработанный Mattt Thompson , который делает отправку push-уведомлений очень простой.
Вывод
Я надеюсь, что этот урок показал вам, что push-уведомления не так сложны в настройке, как думает большинство разработчиков. Это правда, что нужно немного поиграться с ключами и сертификатами, но как только вы поймете движущиеся части, это не так сложно понять и настроить.
Правда в том, что сложная часть — это создание ключей и сертификатов. Обработка push-уведомлений в вашем приложении iOS очень проста и понятна.