プッシュ通知への登録
許可を求め、デバイストークンを取得します。
「プッシュ通知への登録」は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 APNsNotification 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プッシュ通知への登録
- 通知ペイロードの処理
- バックグラウンドタスクと更新
- 通知のアクションとカテゴリ