Регистрация для push-уведомлений
Запрашивайте разрешение и получайте токен устройства.
«Регистрация для push-уведомлений» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Как работают push-уведомления от начала до конца
Push-уведомление проходит от вашего сервера через службу push-уведомлений Apple (APNs) к определённому устройству. Устройство подтверждает свою личность с помощью токена устройства, выданного APNs. До этого пользователь должен предоставить разрешение, а приложение — зарегистрироваться.
// Flow: App registers -> APNs returns device token ->
// you send token to your server -> server pushes via APNsЦентр уведомлений
UNUserNotificationCenter — это единственный объект, который используется для всех локальных и удалённых уведомлений: запроса разрешения, настройки делегата, планирования локальных уведомлений и чтения параметров. Получите общий экземпляр.
import UserNotifications
let center = UNUserNotificationCenter.current()
// All notification configuration goes through centerЗапрос разрешения
Перед показом уведомлений нужно спросить пользователя. requestAuthorization(options:) показывает системный запрос и возвращает результат согласия пользователя. Запрашивайте только нужные параметры: .alert, .sound, .badge.
import UserNotifications
func requestAuth() async throws -> Bool {
let center = UNUserNotificationCenter.current()
return try await center.requestAuthorization(
options: [.alert, .sound, .badge])
}Регистрация в APNs
Разрешение и регистрация — разные вещи. После получения разрешения или одновременно с этим вызовите registerForRemoteNotifications() на главном акторе. Это запрашивает у APNs токен устройства. Вызов должен выполняться в главном потоке.
import UIKit
@MainActor
func registerForPush() {
UIApplication.shared.registerForRemoteNotifications()
}Получение токена устройства
При успешной регистрации метод делегата приложения didRegisterForRemoteNotificationsWithDeviceToken вызывается с токеном Data. Преобразуйте его в шестнадцатеричную строку и отправьте на сервер, который использует её для выбора этого устройства.
import UIKit
func application(
_ app: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data) {
let token = deviceToken.map {
String(format: "%02x", $0) }.joined()
print("APNs token:", token)
// send token to your backend
}Обработка сбоя регистрации
Регистрация может завершиться ошибкой из-за отсутствия сети, разрешения APNs или запуска в неподдерживаемой среде. Реализуйте didFailToRegisterForRemoteNotificationsWithError, чтобы записать ошибку и корректно восстановить работу, а не допустить сбой приложения.
import UIKit
func application(
_ app: UIApplication,
didFailToRegisterForRemoteNotificationsWithError
error: Error) {
print("Push registration failed:", error)
}Токены могут измениться
Токен устройства не является постоянным. Он изменяется, когда пользователь восстанавливает данные из резервной копии, переустанавливает приложение или переходит на новое устройство. Всегда регистрируйтесь при каждом запуске и загружайте последний токен, заменяя старый на сервере.
// Best practice: register on each launch,
// always upload the freshly received token,
// never cache a token as permanent.
let rule = "re-register every launch"
_ = ruleПроверка текущих параметров
Позже пользователь может отозвать разрешение в настройках. Прежде чем полагаться на уведомления, запросите getNotificationSettings, чтобы прочитать текущий статус авторизации и узнать, какие функции разрешены.
import UserNotifications
func currentStatus() async -> UNAuthorizationStatus {
let settings = await UNUserNotificationCenter
.current().notificationSettings()
return settings.authorizationStatus
}Предварительное разрешение
Параметр .provisional позволяет уведомлениям тихо поступать в Центр уведомлений без предварительного запроса. Это удобно, чтобы дать пользователям попробовать уведомления до принятия окончательного решения, оставив возможность сохранить их или отключить.
import UserNotifications
func requestQuiet() async throws -> Bool {
try await UNUserNotificationCenter.current()
.requestAuthorization(
options: [.alert, .sound, .provisional])
}Необходимая возможность
Ничего из этого не будет работать без включения возможности «Push-уведомления» в целевом объекте Xcode, которая добавляет разрешение aps-environment. Для фоновой доставки также включите возможность «Фоновые режимы» с удалёнными уведомлениями.
// Xcode target > Signing & Capabilities:
// + Push Notifications
// + Background Modes > Remote notifications
let caps = "entitlements required"
_ = capsОбъединение регистрации в единый процесс
Чистый процесс запуска выглядит так: запросите разрешение, а при статусе granted зарегистрируйтесь для удалённых уведомлений на главном акторе. Затем токен поступит в обратный вызов делегата для загрузки.
import UIKit
import UserNotifications
func setupPush() async {
let center = UNUserNotificationCenter.current()
let granted = (try? await center.requestAuthorization(
options: [.alert, .sound, .badge])) ?? false
if granted {
await MainActor.run {
UIApplication.shared.registerForRemoteNotifications()
}
}
}Быстрая проверка
Вспомните связь между разрешением и регистрацией.
Итоги
Вы научились регистрировать уведомления:
- Используйте
UNUserNotificationCenter, чтобы запросить разрешение на.alert/.sound/.badge. - Авторизация и регистрация — разные этапы; вызывайте
registerForRemoteNotifications()в главном акторе. - Преобразуйте токен
Dataв шестнадцатеричный формат и отправьте его на сервер; регистрируйтесь при каждом запуске, поскольку токены меняются. - Включите возможность отправки уведомлений и рассмотрите авторизацию
.provisional.
Часто задаваемые вопросы
Урок «Регистрация для push-уведомлений» бесплатный?
Да — полный текст урока «Регистрация для push-уведомлений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Регистрация для push-уведомлений»?
Запрашивайте разрешение и получайте токен устройства. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Регистрация для push-уведомлений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Регистрация для push-уведомлений
- Обработка полезных данных уведомлений
- Фоновые задачи и обновление
- Действия и категории уведомлений