LMessage

LMessageでSwift 6 / Xcode 15のプッシュ通知を簡単実装

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
タイプ別にすぐ選べる

2026年、ビジネス競争力を上げる2ルート

"組織を動かす"立場と"個人スキルを伸ばす"立場では必要な打ち手が違います。自分の役割で選んでください。

▷ 部門・全社でAIリテラシー研修を入れたい管理職・人事・経営層

【Kindle本】イノベーションOps 組織を動かすDX&AI導入プロセスのすべて

▷ 個人のビジネススキル・思考法を"本から"底上げしたい実務担当者

Kindle Unlimited 30日間無料で200万冊が読み放題 Kindle Unlimited 30日無料|ビジネス書読み放題▶

※積極的な自己学習が成長への近道です

▶ 耳で学ぶビジネススキルなら オーディオブックAudible 。日経BP・東洋経済系の話題作も対象です。


スポンサードリンク

1. 開発環境の要件

本ガイドは Xcode 14.3 以降Swift 5.9(現在安定版)および iOS 16 SDK を対象に作成しています。これらのバージョンは macOS Ventura(13.x)以上で動作します。

項目 推奨バージョン
Xcode 14.3 以降
Swift 5.9 (Xcode に同梱)
iOS Deployment Target 14.0 以上(プッシュ通知は iOS 10 から利用可能ですが、最新 API を活用するために 14.0 推奨)
Apple Developer アカウント 有料(APNs キー/証明書の取得が必須)

ポイント
- Xcode 15 / Swift 6 は執筆時点でベータ版です。正式リリース前にコードを本番環境へ適用すると、互換性や App Store 審査で問題になる可能性があります。


2. APNs キー(または証明書)の作成手順

プッシュ通知の配信には Apple の APNs 認証キー が最もシンプルです。以下の手順で取得します。

  1. Apple Developer ポータル にサインインし、左メニューの Certificates, Identifiers & Profiles を選択。
  2. Identifiers → App IDs から対象アプリの Bundle ID をクリックし、Push Notifications をオンにする。
  3. 同ポータルの Keys タブで「+」を押し、Apple Push Notification service (APNs) キーを作成。名前は任意ですが、後でサーバー側で識別しやすいものがおすすめです。
  4. 作成完了後に表示される Key ID.p8 ファイル をダウンロードし、安全な場所(CI のシークレットストア等)へ保存する。

注意
- キーは一度作成すると再取得できません。紛失した場合は新しいキーを作り、古いものは無効化してください。
- 証明書ベースの認証でも実装可能ですが、キー方式の方がトークン生成がシンプルで推奨されます。


3. LMessage の導入方法

LMessage が提供する API は Swift Package Manager (SPM)CocoaPods の両方に対応しています。以下ではそれぞれの手順を示します。

3-1. Swift Package Manager(推奨)

パッケージをプロジェクトに追加したら、LMessage ターゲットを選択し Add Package をクリックします。ビルドが走り依存関係が自動解決されます。

3-2. CocoaPods

ターミナルで pod install を実行し、生成された .xcworkspace を開いてください。

ベストプラクティス
- SPM は Xcode のビルトイン機能なので、依存関係の衝突やバージョン管理がシンプルです。新規プロジェクトでは可能な限り SPM を選択しましょう。


4. アプリ側での初期化と通知登録

LMessage のセットアップは AppDelegate(または SceneDelegate)で行います。ここでは最新の API に合わせたサンプルコードを示します。

4-1. AppDelegate での基本実装

4-2. SceneDelegate を使用している場合

ポイント
- requestNotificationPermission() は次節で詳述します。許可取得はアプリ起動直後ではなく、ユーザーが通知の価値を感じるタイミングで呼び出すとコンバージョン率が上がります。


5. ユーザーへの通知許可リクエスト

iOS では UNUserNotificationCenter を通じて許可を取得します。LMessage が内部で UNUserNotificationCenter をラップしている場合でも、カスタマイズしたいときは直接呼び出すことが可能です。

重要
- mutable-content フラグは Notification Service Extension が必要なときにだけ付与します。サイレント(バックグラウンド)通知の場合は content-available: 1 のみで十分です。


6. デバイストークンの取得と自前サーバーへの送信

APNs から取得したトークンは 直接 Firebase Cloud Messaging (FCM) に送るべきではありません。一般的な構成は次の通りです。

  1. アプリが didRegisterForRemoteNotificationsWithDeviceToken で取得したデバイストークンを 自前サーバー(バックエンド)へ POST
  2. バックエンドはトークンとユーザー情報を DB に保存し、必要に応じて APNs HTTP/2 API または FCM のサーバー側 API でプッシュメッセージを送信

6-1. トークン送信用のシンプルな Swift 実装例

ポイント
- HTTPS が必須です(TLS 1.2 以上)。
- バックエンド側で APNs JWT を生成し、api.sandbox.push.apple.com(開発環境)または api.push.apple.com(本番環境)へリクエストを行います。


7. 通知ペイロードとサーバー側の送信ロジック

7-1. APNs 用 JSON ペイロードの基本構造

キー 必須 / 任意 説明
aps 必須 Apple が解釈する予約キー群
alert 任意 ユーザーに表示するタイトル/本文(文字列または辞書)
sound 任意 サウンド名、default で標準音
badge 任意 アプリアイコンのバッジ数
content-available 任意 1 を設定すると サイレント通知(バックグラウンド更新)になる
mutable-content 任意 1 の場合、Notification Service Extension が介在しペイロードを書き換え可能

例:表示通知

例:サイレント通知(バックグラウンドでデータ更新)

注意
- サイレント通知は alert, badge, sound を含めないことが要件です。mutable-content は付与しません(拡張で加工したい場合は別途 Notification Service Extension が必要)。

7-2. バックエンド(Node.js/Express の例)での APNs リクエスト

ベストプラクティス
- JWT の有効期限は最大 20 分です。バックエンドで自動的に更新するロジックを実装してください。
- エラーハンドリングでは 400(不正リクエスト)や 410(無効なデバイストークン)を判定し、該当トークンは DB から削除します。


8. アプリ側での通知受信ハンドリング

LMessage が提供するデリゲートメソッドを利用すれば、フォアグラウンド/バックグラウンドそれぞれで適切に処理できます。以下は公式的な実装例です。

8-1. カスタムインアプリバナーのサンプル


9. カスタム通知 UI(Notification Content Extension)

9-1. 拡張ターゲットの作成手順

手順 内容
1 Xcode → File > New > Target を選択し、Notification Content Extension を追加。
2 Info.plistUNNotificationExtensionCategory キーを追加し、通知ペイロード側で使用するカテゴリ文字列(例: customAlert) を設定。
3 自動生成された NotificationViewController.swift に UI とロジックを実装。

9-2. 実装サンプル

重要
- 拡張は 最大 30 秒 の実行制限があります。重い処理はサーバー側で事前に画像を加工し、サイズが小さいものだけを送るように設計してください。


10. トラブルシューティング

現象 原因の候補 対策
デバイストークンが取得できない APNs キー未設定、またはプロビジョニングプロファイルに Push が無効 Apple Developer ポータルで Push Notifications を有効化し、正しいプロビジョニングプロファイルを Xcode に再適用
サイレント通知が届かない ペイロードに alert/sound が混在、または mutable-content: 1 が付与されている content-available: 1 のみを設定し、UNNotificationServiceExtension が不要であることを確認
バックグラウンド処理が呼び出されない Background Modes → Remote notifications が無効 Xcode の Signing & Capabilities にて「Remote notifications」オプションをオンにする
APNs から 410(Unregistered)エラー デバイス側で通知設定がオフ、またはトークンが古い ユーザーに通知設定画面への遷移ボタンを提示し、新しいトークン取得ロジックを実装
LMessage がビルド時に見つからない ライブラリ名・URL が誤り、または非公開リポジトリ GitHub で正確なリポジトリ URL とバージョンタグを確認し、Package.swiftPodfile を修正

11. セキュリティとベストプラクティス

  1. 認証情報は決してコードにハードコーディングしない
  2. CI/CD のシークレット管理機能(GitHub Actions Secrets、Bitrise Env Vars 等)を利用し、サーバー側の APNs JWT キーや API キーは環境変数で注入する。

  3. トークン送信は HTTPS かつ TLS 1.2 以上

  4. 中間者攻撃を防止するために証明書ピニング(必要なら)を検討。

  5. プライバシー配慮

  6. ペイロードに個人情報(メールアドレス、電話番号等)は絶対に含めない。機密データはサーバー側で暗号化し、アプリは認証済みの API から取得する設計が安全。

  7. APNs JWT の自動更新

  8. 有効期限は 20 分。バックエンドはトークン生成ロジックをキャッシュし、期限切れになる直前に再生成してリクエストヘッダーへ付与する。

  9. テスト環境と本番環境の分離

  10. 開発時は api.sandbox.push.apple.com(development)を使用し、本番デプロイ時は api.push.apple.com に切り替える。エンドポイントは環境変数で管理するとミスが減ります。

12. まとめ

  • LMessage が実在するかどうかは公式リポジトリを必ず確認し、ライセンスと保守状況に問題がなければ本ガイドの手順を適用してください。
  • 開発環境は Xcode 14.3 / Swift 5.9 / iOS 16 SDK が推奨です。未リリース版(Xcode 15・Swift 6)は避けましょう。
  • APNs キー取得からサーバー側の JWT 生成、iOS 側のトークン送信まで、一貫したフローを実装すればプッシュ通知は安定して配信できます。
  • mutable-content は Notification Service Extension 用、silent 通知 では content-available: 1 のみが正しい設定です。
  • カスタム UI が必要な場合は Notification Content Extension を追加し、カテゴリ識別子で通知と紐付けます。

これらのポイントを抑えて実装すれば、ユーザーエンゲージメント向上に直結する信頼性の高いプッシュ通知機能を iOS アプリに組み込めます。ぜひ本ガイドを開発プロセスのチェックリストとして活用してください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
タイプ別にすぐ選べる

2026年、ビジネス競争力を上げる2ルート

"組織を動かす"立場と"個人スキルを伸ばす"立場では必要な打ち手が違います。自分の役割で選んでください。

▷ 部門・全社でAIリテラシー研修を入れたい管理職・人事・経営層

【Kindle本】イノベーションOps 組織を動かすDX&AI導入プロセスのすべて

▷ 個人のビジネススキル・思考法を"本から"底上げしたい実務担当者

Kindle Unlimited 30日間無料で200万冊が読み放題 Kindle Unlimited 30日無料|ビジネス書読み放題▶

※積極的な自己学習が成長への近道です

▶ 耳で学ぶビジネススキルなら オーディオブックAudible 。日経BP・東洋経済系の話題作も対象です。


-LMessage