Статьи

Настройка Push-уведомлений на iOS

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

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

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

Если вы ищете быстрое решение, вы можете попробовать AZNotification: Уведомления для iPhone на Envato Market, который позволяет легко создавать привлекательные уведомления в кратчайшие сроки. Уведомления сбрасываются с панели навигации и могут отображать как информационные, так и сообщения об ошибках. Или нанять разработчика приложений Envato Studio, чтобы помочь вам.

Уведомления AZNotification для iPhone
AZNotification: уведомления для iPhone

Вам понадобятся две вещи, если вы хотите следовать за мной. Первое, что вам нужно, это физическое устройство для получения push-уведомлений, потому что iOS Simulator не поддерживает push-уведомления. Второе, что вам нужно, это платная учетная запись разработчика iOS. Только платные учетные записи могут предоставлять приложения для запуска на физическом устройстве.

Цель этого руководства — создать приложение, настроенное на получение push-уведомлений. Откройте Xcode и создайте новый проект на основе шаблона приложения Single View .

Назовите проект Push , введите идентификатор компании и префикс класса, а также выберите « Устройства» для iPhone.

Несмотря на то, что я не буду обсуждать базовую инфраструктуру 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. Вам понадобится физическое устройство для завершения этого урока.

Чтобы выполнить следующий шаг, вам необходимо войти в свою учетную запись разработчика 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 и связан с правильным закрытым ключом.

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

Прежде чем мы сможем протестировать нашу настройку 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>)

Чтобы проверить, поступают ли какие-либо push-уведомления, которые вы отправляете, вам необходимо иметь внутренний сервер, на который ваше приложение может отправить токен устройства. Затем этот бэкэнд может соединяться с серверами Apple для отправки push-уведомлений.

Я не буду освещать этот аспект push-уведомлений в этом руководстве, но это самая простая часть push-уведомлений, особенно если вы используете такой сервис, как Parse или Urban Airship .

Вы также можете использовать Houston , драгоценный камень Ruby, разработанный Mattt Thompson , который делает отправку push-уведомлений очень простой.

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

Правда в том, что сложная часть — это создание ключей и сертификатов. Обработка push-уведомлений в вашем приложении iOS очень проста и понятна.