プッシュ通知は、アプリインストール後にユーザーとやり取りする最も効果的な方法の1つです。新しいメッセージ、割引、コンテンツ更新の通知や、放置されたカートのリマインダーが可能です。プッシュ通知(push notifications)はクラウドサービスを通じて機能します:AndroidではFirebase Cloud Messaging(FCM)、iOSではApple Push Notification Service(APNS)です。この記事では、通知のアーキテクチャ、種類、および両プラットフォームの設定プロセスを解説します。詳細はFCM公式ドキュメントをご覧ください。
重要なポイント
プッシュ通知とは、サーバーがアプリからのリクエストなしにモバイルデバイスに送信するメッセージです。メッセージはクラウドサービス(FCMまたはAPNS)を通過し、アプリが閉じられていてもデバイスに配信されます。通知は2種類に分類されます:表示通知(ユーザーに表示される)とデータ通知(バックグラウンド処理用のデータを送信する)。
プッシュ通知のアーキテクチャは3つのコンポーネントで構成されます:(1)アプリサーバー — FCM/APNSにリクエストを送信;(2)クラウドサービス — 通知をルーティング;(3)クライアントアプリ — 通知を受信して処理。サーバーは通知を特定のデバイスに送信するために、そのデバイスのデバイストークンを知っている必要があります。一括送信にはトピックサブスクリプションが使用されます — デバイスをテーマ別チャンネル(ニュース、プロモーション、天気)に登録します。
各デバイスでは、通知はオペレーティングシステムによって処理されます:Android — NotificationManagerとNotificationChannel経由、iOS — UNUserNotificationCenter経由。ユーザーは各チャンネルの通知動作を設定できます:サウンド、バナー、ロック画面表示の許可、または完全な無効化。適切なチャンネル設定はエンゲージメントを高め、登録解除率を低下させます。
IT Sectrでは、プラットフォーム固有の機能を最初から考慮してプッシュ通知システムを設計します。主要な決定事項:FCMと直接APNSの選択、ペイロード形式、送信頻度、サブスクリプションの仕組み。これにより、通知が届かない、またはシステムによってブロックされる状況を回避できます。
Firebase Cloud Messaging(FCM)は、通知配信のためのGoogleのクロスプラットフォームサービスです。FCMはAndroid、iOS、Web、Flutterをサポートしています。iOSでは、FCMはAPNSを通じて機能します:FCMがAPNSにリクエストを送信し、APNSがデバイスに通知を配信します。FCMの利点:両プラットフォームに単一のAPI、組み込み分析、A/Bテスト、トピック、オーディエンスセグメント。
Apple Push Notification Service(APNS)はAppleのネイティブサービスです。Appleデバイス(iOS、macOS、watchOS、tvOS)でのみ動作します。TLS証明書またはトークン(JWT)による直接承認が必要です。APNSが提供するもの:最小限の配信遅延とiOS機能との直接統合:PushKit、Notification Service Extension、重大なアラート。
FCMとAPNSの選択はプロジェクトのアーキテクチャに依存します。アプリがiOSのみの場合 — APNSがより多くの制御を提供します。クロスプラットフォームの場合 — FCMが単一APIでより便利です。多くのプロジェクトはFCMを主要サービスとして使用し、iOSでVoIP用に追加でPushKitを設定します。ハイブリッドアプローチにより、両方のシステムから最良のものを得ることができます。
| 特性 | FCM | APNS |
|---|---|---|
| プラットフォーム | Android、iOS、Web、Flutter | iOS、macOS、watchOS、tvOS |
| 認証 | サーバーキー(Firebase Console) | TLS証明書またはJWTトークン |
| 最大ペイロード | 4 KB(data)、2 KB(notification) | 4 KB |
| トピック | 組み込み(Topic Messaging) | なし(サーバー側で実装) |
| サイレントプッシュ | 対応 | 対応(content-available) |
| PushKit | なし | あり(VoIP、ライブアクティビティ) |
| 分析 | Firebase Analytics | 組み込みなし |
| 端末停止時の配信 | 限定的(メーカーによる) | あり、PushKit経由 |
リッチ通知とは、テキストだけでなくメディアコンテンツ(画像、動画、音声、アクションボタン)を含む通知です。AndroidではNotificationCompatスタイルで実装されます:BigPictureStyle(大きな画像)、BigTextStyle(折りたたみ/展開テキスト)、InboxStyle(メッセージリスト)、MediaStyle(再生コントロール)。iOSではNotification Content Extensionが使用されます — 展開された通知用のカスタムUIを持つ個別のターゲット。
サイレントプッシュ(iOSではcontent-available)は、ユーザーに表示せずに配信される通知です。バックグラウンドでのデータ更新(コンテンツ同期、プリロード、ウィジェット更新)を目的としています。iOSではサイレントプッシュにBackground Modes → Remote notificationsの有効化が必要です。Androidではバックグラウンド通知の処理にFirebaseMessagingServiceをonMessageReceivedと共に使用します。重要:iOSではサイレントプッシュに頻度制限があり、アプリがフォアグラウンドにない場合、配信は保証されません。
インタラクティブ通知により、ユーザーはアプリを開かずにアクションを実行できます。Androidでは通知内のボタン(Action)です:「返信」「承認」「拒否」。アクションはPendingIntentを介して処理され、BroadcastReceiverまたはServiceを起動します。iOSではNotification ActionがUNNotificationActionとUNNotificationCategoryを介して登録されます。ボタンはforeground(アプリを開く)、background(バックグラウンドで実行)、destructive(元に戻せないアクション — 削除、ブロック)にできます。
Notification Content Extension(iOS) — 長押しまたは3D Touch時に拡張通知コンテンツを表示するカスタムビューコントローラー。Notification Service Extension(iOS) — 表示前に通知コンテンツを変更するミドルウェア:E2Eメッセージの復号、画像のロード、機密データの難読化。Androidには直接の類似機能はありません — すべての変更はFirebaseMessagingServiceで実行されます。
Androidでは以下が必要です:(1)プロジェクトにFirebase SDKを追加(google-services.json);(2)通知カテゴリごとにNotificationChannel(Android 8+)を作成;(3)トークンと受信メッセージを取得するためのFirebaseMessagingServiceを実装。Notification Channelは必須です — これがないとAndroid 8+で通知が表示されません。チャンネルには優先度があり(IMPORTANCE_HIGH — サウンド+ポップアップ、IMPORTANCE_LOW — サウンドなし)、ユーザーがシステム設定で構成できます。
iOSでは以下が必要です:(1)XcodeでPush Notifications機能を有効化;(2)Apple Developer PortalでAPNSキーを設定;(3)UNUserNotificationCenter.requestAuthorizationを介して承認をリクエスト — これは1回だけ表示されるシステムダイアログです。ユーザーの応答は重要です:許可が得られない場合、通知は配信されません。システムダイアログを表示する前に、通知が必要な理由をユーザーに説明することをお勧めします(事前許可プロンプト)。
デバイストークン(iOS)と登録トークン(Android)は、プッシュ通知のための一意のデバイス識別子です。トークンはアプリの初回起動時に生成され、変更される可能性があります:再インストール時、データ消去時、プライバシー設定のリセット時。サーバーは定期的にトークンを更新する必要があります。FirebaseはonNewTokenを介したトークン管理の便利なAPIと、テスト通知送信用のパネル(Firebase Console → Cloud Messaging)を提供しています。
トピックサブスクリプションはFCMの最も効果的なメカニズムの1つです。デバイスがトピック(例:「news」、「promo_users_ios」)に登録すると、サーバーはトークンリストを保持せずにトピックごとに通知を送信します。Firebase Topicsはトピックあたり最大100万人の登録者と、式言語による条件付き送信(Condition)をサポートしています:「'news' in topics && ('US' in topics || 'UK' in topics)」。
Notification PayloadはFCM/APNSを介して送信されるJSON構造です。FCMの場合:個別のnotification(表示部分 — タイトル、本文、画像)とdata(アプリ用のカスタムフィールド)。APNSの場合:alert、badge、sound、category、content-availableを含むaps辞書。正しいペイロード構造は重要です:notification + dataが同時に到着した場合、バックグラウンドのアプリがdataを受信できない可能性があります。Androidではdataメッセージのみを使用し、表示フィールドはFCM Consoleを介して別途渡すことをお勧めします。
よくある質問
FCM(Firebase Cloud Messaging)はAndroidおよびクロスプラットフォーム通知のためのGoogleのサービスです。APNS(Apple Push Notification Service)はiOS/macOSのみのAppleのサービスです。FCMは通知を配信できますiOSではAPNSを介して、プロキシサーバーとして機能します。
リッチ通知はメディアコンテンツ(画像、動画、音声、アクションボタン)を備えた拡張通知です。iOSではNotification Content Extensionを介して実装され、AndroidではBigPictureStyleとInboxStyleを介して実装されます。
デバイストークンはプッシュ通知を送信するための一意のデバイス識別子です。AndroidではFCMの登録トークン、iOSではAPNSのデバイストークンです。トークンは変更される可能性がありますアプリの再インストールや設定リセット時に、サーバーでの更新が必要です。
サイレントプッシュ(通知非表示)はユーザーに表示されない通知です。バックグラウンドデータ更新(コンテンツ同期、ウィジェット更新、プリフェッチ)に使用されます。iOSでは有効化が必要ですBackground Modes → Remote notifications。
PushKitはVoIPアプリ(通話、メッセンジャー)で使用される高優先度通知配信用のAppleフレームワークです。PushKitは通知を配信しますアプリが終了していても、処理のためにアプリの起動を保証します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。