Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

デスティネーションへのディープリンクを作成する

Android では、アプリ内部の特定のデスティネーションに直接移動できるリンクのことを「ディープリンク」と呼びます。

Navigation コンポーネントを使用すると、「明示的」と「暗黙的」という 2 つのタイプのディープリンクを作成できます。

明示的ディープリンクを作成する

明示的ディープリンクは、PendingIntent を使用してアプリ内の特定の場所にユーザーを誘導するディープリンクの単一インスタンスです。たとえば、通知やアプリ ショートカット、アプリ ウィジェットの一部として、明示的ディープリンクを提供できます。

ユーザーが明示的ディープリンクを通じてアプリを開くと、タスク バックスタックがクリアされ、ディープリンク デスティネーションに置き換えられます。グラフをネストしている場合は、各ネストレベルの開始デスティネーション(階層内の各 <navigation> 要素の開始デスティネーション)もスタックに追加されます。そのため、ユーザーがディープリンク デスティネーションから [戻る] ボタンを押すと、エントリ ポイントからアプリにアクセスしたかのようにナビゲーション スタック上に戻ることができます。

以下の例に示すように、NavDeepLinkBuilder クラスを使用して、PendingIntent を作成できます。提供されたコンテキストが Activity でない場合、コンストラクタは、起動するデフォルト アクティビティとして PackageManager.getLaunchIntentForPackage() を使用します(利用可能な場合)。

Kotlin

    val pendingIntent = NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent()
    

Java

    PendingIntent pendingIntent = new NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent();
    

既存の NavController がある場合は、NavController.createDeepLink() 経由でディープリンクを作成することもできます。

暗黙的ディープリンクを作成する

暗黙的ディープリンクは、アプリ内の特定のデスティネーションを参照する URI です。たとえば、ユーザーがリンクをタップしたときなど、URI が呼び出されると、Android は対応するデスティネーションをアプリで開きます。

暗黙的ディープリンクをトリガーする場合、暗黙的 IntentIntent.FLAG_ACTIVITY_NEW_TASK フラグ付きで起動したかどうかによって、バックスタックの状態が変わります。

  • フラグがセットされている場合、タスク バックスタックはクリアされ、ディープリンク デスティネーションに置き換えられます。明示的ディープリンクと同様、グラフをネストしている場合は、各ネストレベルの開始デスティネーション(階層内の各 <navigation> 要素の開始デスティネーション)もスタックに追加されます。そのため、ユーザーがディープリンク デスティネーションから [戻る] ボタンを押すと、エントリ ポイントからアプリにアクセスしたかのようにナビゲーション スタック上に戻ることができます。
  • フラグがセットされていない場合、ユーザーは、暗黙的ディープリンクをトリガーしれた以前のアプリのタスクスタック上にそのまま残ります。この場合、[戻る] ボタンを押すと、前のアプリに戻り、[上へ] ボタンを押すと、ナビゲーション グラフ階層内の親デスティネーション上にあるアプリのタスクが開始されます。

Navigation Editor を使用して、デスティネーションへの暗黙的ディープリンクを作成できます。手順は次のとおりです。

  1. Navigation Editor の [Design] タブで、ディープリンクのデスティネーションを選択します。
  2. [Attributes] パネルの [Deep Links] セクションで、[+] をクリックします。
  3. 表示される [Add Deep Link] ダイアログで、URI を入力します。

    注:

    • スキーマのない URI は、http または https のいずれかと見なされます。たとえば、www.google.com の場合、http://www.google.comhttps://www.google.com の両方にマッチングします。
    • {placeholder_name} 形式のプレースホルダは、1 つまたは複数の文字にマッチングします。たとえば、http://www.example.com/users/{id} の場合、http://www.example.com/users/4 にマッチングします。Navigation コンポーネントは、プレースホルダ名を、ディープリンク デスティネーション用の定義済み引数とマッチングすることによって、プレースホルダ値を解析して適切なタイプを設定しようと試みます。同じ名前を持つ引数が定義されていなかった場合は、デフォルト String タイプが引数の値として使用されます。
    • 「.*」ワイルドカードを使用すると、0 個以上の文字にマッチングさせることができます。
  4. (省略可)自分が URI のオーナーであることを Google に検証してもらうようリクエストするには、[Auto Verify] チェックボックスをオンにします。詳細については、Android アプリリンクを検証するをご覧ください。

  5. [Add] をクリックします。選択したデスティネーションの上部にリンクアイコン()が表示され、そのデスティネーションがディープリンクを持つことが示されます。

  6. [テキスト] タブをクリックして、XML ビューに切り替えます。ネストされた <deepLink> 要素がデスティネーションに追加されています。

    <deepLink app:uri="https://www.google.com" />
        

また、暗黙的ディープリンクを有効にするには、アプリの manifest.xml ファイルにも要素を追加する必要があります。既存のナビゲーション グラフをポイントするアクティビティに対して、単一の <nav-graph> 要素を追加します。次の例をご覧ください。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication">

        <application ... >

            <activity name=".MainActivity" ...>
                ...

                <nav-graph android:value="@navigation/nav_graph" />

                ...

            </activity>
        </application>
    </manifest>
    

プロジェクトをビルドする際、Navigation コンポーネントは、<nav-graph> 要素を、生成された <intent-filter> 要素に置き換えて、ナビゲーション グラフのすべてのディープリンクにマッチングするようにします。

参考リンク

ナビゲーションについて詳しくは、以下の参考情報をご確認ください。

サンプル

コードラボ

動画