0Pricing
Swift Academy · レッスン

プッシュ通知への登録

許可を求め、デバイストークンを取得します。

「プッシュ通知への登録」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

プッシュ通知の仕組みを端から端まで理解する

プッシュ通知は、サーバーからApple Push Notification service(APNs)を経由して特定のデバイスに届きます。デバイスは、APNsが発行したデバイストークンで自身の正当性を証明します。その前に、ユーザーから許可を得て、アプリを登録しておく必要があります。

// Flow: App registers -> APNs returns device token ->
// you send token to your server -> server pushes via APNs

Notification Center

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型のトークンとともに呼び出されます。これを16進数文字列に変換してサーバーに送り、サーバーはそのトークンを使ってこのデバイスを対象にします。

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のentitlementがない、サポートされていない環境で実行しているなどの理由で、登録に失敗することがあります。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オプションを使うと、最初に確認画面を表示せず、通知を目立たない形でNotification Centerに届けられます。ユーザーが通知を有効にするかどうかを決める前に試せるため便利です。通知を残すか無効にするかも選択できます。

import UserNotifications
func requestQuiet() async throws -> Bool {
    try await UNUserNotificationCenter.current()
        .requestAuthorization(
            options: [.alert, .sound, .provisional])
}

必要なCapability

XcodeターゲットでPush Notifications capabilityを有効にしなければ、これらは何も機能しません。有効にするとaps-environment entitlementが追加されます。バックグラウンド配信には、Remote notificationsを含むBackground Modes capabilityも有効にしてください。

// Xcode target > Signing & Capabilities:
//   + Push Notifications
//   + Background Modes > Remote notifications
let caps = "entitlements required"
_ = caps

登録処理をまとめる

起動時の処理は、許可をリクエストし、許可されたらメインアクター上でリモート通知に登録するという流れにすると整理できます。その後、デリゲートのコールバックにトークンが届くので、サーバーにアップロードします。

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型のトークンを16進数に変換してアップロードします。トークンは変わるため、起動するたびに再登録します。
  • Push Notificationsケイパビリティを有効にし、.provisionalによる許可の利用も検討します。

よくある質問

「プッシュ通知への登録」レッスンは無料ですか?

はい。「プッシュ通知への登録」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「プッシュ通知への登録」で何を学びますか?

許可を求め、デバイストークンを取得します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「プッシュ通知への登録」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. プッシュ通知への登録
  2. 通知ペイロードの処理
  3. バックグラウンドタスクと更新
  4. 通知のアクションとカテゴリ
← Swift Academyに戻る