プッシュ通知
Firebase Cloud Messagingでプッシュ通知を送信します。FCMを設定し、通知チャンネルを作成し、アクション付きの通知を構築して、フォアグラウンドとバックグラウンドでの配信を処理します。
「プッシュ通知」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/6です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全6レッスンが含まれています。
プッシュ通知とは
プッシュ通知を使うと、アプリがフォアグラウンドにない場合でも、サーバーからユーザーにメッセージを送信できます。一般的な用途は次のとおりです。
- 新着メッセージの通知
- 注文状況の更新
- 速報ニュース
- リマインダーやキャンペーン
Androidでは、Firebase Cloud Messaging(FCM)が標準的なプッシュ配信サービスです。
FCMの概要
Firebase Cloud Messaging(FCM)の流れ:
- 初回起動時にアプリがFCMへ登録され、デバイスのトークンを受け取る
- アプリがトークンをサーバーに送信する
- プッシュ通知を送るとき、サーバーがFCMにメッセージを送信する
- FCMがデバイスに配信する
FCMは無料で信頼性が高く、アプリが終了している場合でも動作します。
プロジェクトへのFirebaseの追加
Firebaseを追加する手順:
- Firebase Consoleを開き、「プロジェクトを追加」→「Androidアプリを追加」を選択します
- パッケージ名を指定してアプリを登録します
google-services.jsonをダウンロードし、app/に配置します- プラグインと依存関係を追加します
// project/build.gradle:
buildscript {
dependencies { classpath 'com.google.gms:google-services:4.4.1' }
}
// app/build.gradle:
plugins { id 'com.google.gms.google-services' }
dependencies {
implementation platform('com.google.firebase:firebase-bom:32.7.4')
implementation 'com.google.firebase:firebase-messaging-ktx'
}FCMの権限(Android 13以降)
Android 13(API 33)以降では、危険な権限と同じように、実行時にPOST_NOTIFICATIONS権限をリクエストする必要があります。
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
// In Activity (Android 13+):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestPermissionLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS)
}FirebaseMessagingService
FCMから受信したメッセージとトークンの更新を処理するサービスを作成します。
class MyFirebaseService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
// Send token to your backend to enable push delivery
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
val title = message.notification?.title ?: "New Message"
val body = message.notification?.body ?: ""
showNotification(title, body)
}
}マニフェストへのサービス登録
AndroidManifest.xmlでサービスを宣言します。
<service
android:name=".MyFirebaseService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>通知チャンネル(Android 8以降)
Android 8(Oreo)以降では、通知をチャンネルに割り当てる必要があります。ユーザーはチャンネルごとに、サウンド、バイブレーション、重要度を設定できます。
fun createNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
"messages_channel", // channel ID
"Messages", // user-visible name
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Incoming message notifications"
enableVibration(true)
}
val manager = context.getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
}通知の作成と表示
Androidのバージョン間で互換性を保つには、NotificationCompat.Builderを使用します。
fun showNotification(context: Context, title: String, body: String) {
val intent = Intent(context, MainActivity::class.java)
val pendingIntent = PendingIntent.getActivity(
context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val notification = NotificationCompat.Builder(context, "messages_channel")
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(body)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true) // dismiss on tap
.setContentIntent(pendingIntent) // open app on tap
.build()
NotificationManagerCompat.from(context)
.notify(System.currentTimeMillis().toInt(), notification)
}アクション付き通知
通知にアクションボタンを追加すると、アプリを開かずに操作できるようになります。
val replyIntent = Intent(context, ReplyReceiver::class.java)
val replyPending = PendingIntent.getBroadcast(
context, 1, replyIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val notification = NotificationCompat.Builder(context, "messages_channel")
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("New message from Alice")
.setContentText("Hey, are you coming?")
.addAction(R.drawable.ic_reply, "Reply", replyPending)
.addAction(R.drawable.ic_dismiss, "Dismiss", null)
.build()フォアグラウンドとバックグラウンドでの処理
FCMの動作はアプリの状態によって異なります。
- アプリがフォアグラウンド —
onMessageReceived()が呼び出され、自分で通知を作成して表示します - アプリがバックグラウンドまたは終了中 — FCMが
notificationペイロードから通知を自動的に表示し、onMessageReceivedは呼び出されません
常にonMessageReceivedで受け取る必要がある追加データは、notificationではなくdataペイロードに含めます。
FCMトークンの取得
サーバーに送信するため、現在のFCMトークンを取得します。
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Fetching token failed", task.exception)
return@addOnCompleteListener
}
val token = task.result
Log.d("FCM", "Token: $token")
// Send token to your server
sendTokenToServer(token)
}理解度チェック
アプリがバックグラウンドにあり、FCMが「notification」ペイロード付きのメッセージを配信すると、どうなりますか。
まとめ:プッシュ通知
AndroidでFCMを使ったプッシュ通知:
- Firebase、
google-services.json、firebase-messaging-ktxを追加する - Android 13以降では
POST_NOTIFICATIONSをリクエストする FirebaseMessagingServiceを作成し、onNewTokenとonMessageReceivedを実装する- Android 8以降では
NotificationChannelを作成する NotificationCompat.Builderで通知を作成する- 常に
onMessageReceivedで受け取るにはdataペイロードを使用する
次は、WorkManagerを使ってバックグラウンド処理をスケジュールします。
よくある質問
「プッシュ通知」レッスンは無料ですか?
はい。「プッシュ通知」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全6レッスンが含まれています。
「プッシュ通知」で何を学びますか?
Firebase Cloud Messagingでプッシュ通知を送信します。FCMを設定し、通知チャンネルを作成し、アクション付きの通知を構築して、フォアグラウンドとバックグラウンドでの配信を処理します。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/6です。
「プッシュ通知」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。