iOS. Приемы программирования
Шрифт:
11. Перетащите ваш профиль инициализации в текстовый редактор для OS X — например, в TextEdit. Найдите в файле профиля ключ Entitlements. Весь этот раздел моего профиля инициализации выглядит так:
12. Создайте
13. Поместите разрешения вашего профиля инициализации прямо в файл Entitlements.plist, чтобы его содержимое выглядело вот так:
Значения, приведенные в рассматриваемых здесь листингах, относятся к профилям, которые создал я. В вашем профиле будут другие значения и, конечно же, будет другой идентификатор приложения (App ID). Поэтому внимательно выполните предыдущие шаги, чтобы правильно создать идентификатор вашего приложения и профиль. Потом возьмите разрешения из своего профиля и вставьте их в файл Entitlements.plist вашего проекта.
14. Далее перейдите в настройки сборки вашего проекта. В разделе Code Signing Entitlements (Разрешения для подписания кода) введите значение $(SRCROOT)/$(TARGET_NAME)/Entitlements.plist (если создали файл разрешений в целевом каталоге проекта) или $(SRCROOT)/Entitlements.plist (если создали файл разрешений в корневом каталоге, включающем в себя весь исходный код). Если не знаете, какой вариант выбрать, просто попробуйте оба этих значения, попытайтесь собрать проект с каждым из них. Если Xcode сообщит, что не может найти файл разрешений, поставьте второе значение, и оно сработает. Настройка сборки Code Signing Entitlements (Разрешения для подписания кода) требует указания относительного пути, идущего к файлу разрешений от корневого каталога исходного кода. Поэтому, если вы поместите файл разрешений в какой-то другой каталог, вам потребуется выстроить этот путь вручную, а потом записать полученный путь в это поле.
15. Соберите проект и убедитесь, что Xcode не выдает никаких ошибок.
Если получите сообщение о какой-либо ошибке, то, вероятно, дело в том, что вы задали неверный профиль инициализации либо указали в настройках сборки неверный путь к файлу разрешений для подписания кода.16. В делегате вашего приложения вызовите метод registerForRemoteNotificationTypes:, относящийся к классу UIApplication, а затем передайте этому методу значения UIRemoteNotificationTypeAlert, UIRemoteNotificationTypeBadge и UIRemoteNotificationTypeSound, как показано далее:
Так вы зарегистрируете ваше приложение для получения пуш-уведомлений. Такие уведомления могут содержать информацию с предупреждениями, изменения номера ярлыка вашего приложения, а также звуки. Пока не будем вдаваться в эти подробности. Просто зарегистрируйте приложение для получения пуш-уведомлений, как показано ранее. Как только вы это сделаете, iOS отошлет запрос о регистрации к APNS. Перед тем как это делать, iOS попросит у пользователя разрешения зарегистрировать данное приложение для получения пуш-уведомлений. Пользовательский интерфейс, открывающийся в iOS при этом запросе, показан на рис. 15.7.
Рис. 15.7. iOS выдает пользователю запрос о разрешении на получение пуш-уведомлений
17. Теперь реализуйте метод application: didRegisterForRemoteNotificationsWithDeviceToken: делегата вашего приложения. Этот метод вызывается, когда iOS удается успешно зарегистрировать устройство в APNS и присвоить ему маркер. Этот маркер действует только для конкретного приложения, установленного именно на данном устройстве.
18. Далее реализуйте метод application: didFailToRegisterForRemoteNotificationsWithError: делегата вашего приложения. Этот метод вызывается, если iOS не удается зарегистрировать приложение для получения пуш-уведомлений. Это может произойти потому, что ваш профиль настроен неправильно или устройство не подключено к Интернету, а также по многим другим причинам. В параметре didFailToRegisterForRemoteNotificationsWithError этого метода вы получите ошибку типа NSError. Ее можно проанализировать и узнать, по какой причине возникла проблема.
Теперь вы знаете все необходимое, чтобы настроить ваше приложение на получение пуш-уведомлений.
См. также
Раздел 15.0.
15.8. Доставка пуш-уведомлений в приложение
Постановка задачи
Требуется отправлять пуш-уведомления на пользовательские устройства, которые зарегистрированы для получения таких уведомлений.