0Pricing
Swift Academy · Урок

Регистрация для 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 — локальная установка не требуется.

Все уроки этого курса

  1. Регистрация для push-уведомлений
  2. Обработка полезных данных уведомлений
  3. Фоновые задачи и обновление
  4. Действия и категории уведомлений
← Назад к Swift Academy