0Pricing
Android Academy · レッスン

アクションとディープリンク

ボタンを追加して適切な画面を開きます

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

アクションとディープリンク

通知は何かを実行できると便利になります。通知をタップしたら適切な画面が開き、アクションボタンをタップしたら簡単なタスクを実行できるようにします。どちらもPendingIntentを利用します。

PendingIntentとは

PendingIntentは、後からシステムがアプリに代わってIntentを実行できるように、システムへ渡すトークンです。アプリが実行中でなくても実行できます。通知では、これを使ってアクティビティを起動します。

コンテンツ用PendingIntentの作成

開く画面用のIntentを作成し、それをPendingIntentでラップします。さらにsetContentIntentで設定すると、タップしたときにその画面が開きます。

val intent = Intent(context, MainActivity::class.java)
val pending = PendingIntent.getActivity(
    context, 0, intent,
    PendingIntent.FLAG_IMMUTABLE
)
builder.setContentIntent(pending).setAutoCancel(true)

可変性フラグ

Android 12以降では、PendingIntentにFLAG_IMMUTABLEまたはFLAG_MUTABLEを指定する必要があります。システムがデータを埋め込む必要がある場合(返信など)を除き、FLAG_IMMUTABLEを優先してください。

アクションボタンの追加

アイコン、ラベル、PendingIntentを指定してaddActionを使うと、通知にタップ可能なボタンを追加できます。たとえば「返信」や「既読にする」といったボタンです。

builder.addAction(
    R.drawable.ic_reply,
    "Reply",
    replyPendingIntent
)

アクションが起動するコンポーネント

アクションのPendingIntentは、Activity、Service、BroadcastReceiverのいずれかを対象にできます。「既読にする」ボタンでは、画面を開かずに動作できるよう、receiverを対象にすることがよくあります。

val markIntent = Intent(context, MarkReadReceiver::class.java)
val markPending = PendingIntent.getBroadcast(
    context, 0, markIntent, PendingIntent.FLAG_IMMUTABLE
)

画面へのディープリンク

ディープリンクを使うと、ホーム画面だけでなく、アプリ内の特定の場所を開けます。Navigation Composeでは、正確なルートに移動するPendingIntentを作成できます。

ディープリンク用PendingIntentの作成

Navigationコンポーネントには、目的地と引数を対象にするPendingIntentを作成するためのNavDeepLinkBuilderがあります(またはURIを使ったディープリンク用のIntentを使用できます)。

val deepLinkPending = NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.chatScreen)
    .setArguments(bundleOf("chatId" to "42"))
    .createPendingIntent()

URIベースのディープリンク

ナビゲーショングラフにURIパターンを登録し、そのUriを指定したIntentを作成することもできます。通知をタップすると、一致する画面へ直接移動します。

val intent = Intent(
    Intent.ACTION_VIEW,
    "myapp://chat/42".toUri(),
    context, MainActivity::class.java
)

バックスタックの維持

ディープリンクでは、戻るボタンを押したときにアプリが終了するのではなく、親画面に戻れるよう、適切なバックスタックを構成してください。TaskStackBuilderまたはナビゲーションのディープリンクビルダーがこれを処理します。

一意なリクエストコード

異なる複数のPendingIntentを作成する場合は、それぞれに異なるリクエストコード(2番目の引数)を指定してください。同一のIntentに同じコードを指定すると、同じPendingIntentとして扱われます。

理解度チェック

アクションとディープリンクについて理解できているか確認しましょう。

まとめ

通知にインタラクティブな機能を追加しました。

  • PendingIntentを使うと、システムがアプリに代わって処理を実行できます。FLAG_IMMUTABLEを使用します
  • setContentIntentでタップ時の動作を定義します
  • addActionで、アクティビティ、サービス、receiverを対象とするボタンを追加します
  • ディープリンクを使うと、バックスタックを維持したまま正確な画面を開けます

次は、通知のランタイム権限です。

よくある質問

「アクションとディープリンク」レッスンは無料ですか?

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

「アクションとディープリンク」で何を学びますか?

ボタンを追加して適切な画面を開きます ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「アクションとディープリンク」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 通知チャンネル
  2. 通知を作成する
  3. アクションとディープリンク
  4. 通知の実行時権限
← Android Academyに戻る