アプリコンテンツへのディープリンクの作成

クリックされたリンクまたはプログラムによるリクエ:

  1. URIが指定されている場合は、URIを処理できるユーザーの優先アプリを開きます。
  2. URIを処理できる唯一の利用可能なアプリを開きます。
  3. ユーザーがダイアログからアプリを選択できるようにします。

コンテンツへのリンクを作成してテストするには、以下の手順に従います。 Android StudioのApp Links Assistantを使用して、Androidアプリリンクを追加することもできます。

着信リンクのインテントフィルタの追加

アプリコンテンツへのリンクを作成するには、マニフェストに次の要素と属性値を含むインテントフィルタを追加します。

<action>ACTION_VIEWインテントアクションを指定して、Google検索からインテントフィルタに到達できるようにします。 <data>1つ以上の<data>タグを追加し、それぞれがアクティビティに解決されるURI形式を表します。 最低でも、<data>タグにはandroid:scheme属性が含まれている必要があります。

さらに属性を追加して、アクティビティが受け入れるURIの種類をさらに絞り込むことができます。 たとえば、類似したUriを受け入れるが、単にパス名に基づいて異なる複数のアクティビティがある場合があります。 この場合、android:path属性またはそのpathPatternまたはpathPrefixバリアントを使用して、システムが異なるURIパスに対してどのアクティビティを開くかを区別します。

<category>BROWSABLEカテゴリを含む。 Intentフィルターがwebbrowserからアクセスできるようにするには、これが必要です。 それがなければ、ブラウザでリンクをクリックすると、アプリに解決できません。

にはDEFAULTも含まれます。これにより、アプリは暗黙的なインテントに応答できます。 これがなければ、intentがアプリコンポーネント名を指定している場合にのみ、アクティビティを開始できます。

次のXMLスニペットは、ディープリンクのためにマニフェストでインテントフィルタを指定する方法を示しています。 Uri"example://gizmos""http://www.example.com/gizmos"はどちらもこのアクティビティに解決されます。

<activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > <intent-filter android:label="@string/filter_view_http_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "http://www.example.com/gizmos" --> <data android:scheme="http" android:host="www.example.com" android:pathPrefix="/gizmos" /> <!-- note that the leading "/" is required for pathPrefix--> </intent-filter> <intent-filter android:label="@string/filter_view_example_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "example://gizmos" --> <data android:scheme="example" android:host="gizmos" /> </intent-filter></activity>

二つのインテントフィルタは<data>要素によってのみ異なることに注意してください。同じフィルターに複数の<data>要素を含めることは可能ですが、uniqueURLsを宣言する場合(schemehostの特定の組み合わせなど)は、同じインテントフィルター内の複数の<data>要素が実際には結合された属性のすべてのバリエーションを考慮してマージされるため、別々のフィルターを作成することが重要です。 たとえば、次のことを考えてみましょう:

<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /></intent-filter>

これはhttps://www.example.comapp://open.my.appのみをサポートしているかのように見えるかもしれません。 しかし、実際にはこれらの2つに加えて、app://www.example.comhttps://open.my.appをサポートしています。

アクティビティコンテンツのUriを含むインテントフィルタをappmanifestに追加すると、Androidは実行時に一致するUriを持つIntentをアプリにルーティングできます。

インテントフィルタの定義の詳細については、”他のアプリにアクティビティの開始を許可する”を参照してください。

受信インテントからのデータの読み取り

システムがインテントフィルタを介してアクティビティを開始すると、Intentによって提供されたデータを使用して、レンダーする必要があるかどうかを判断できます。 呼び出し、getData()getAction()着信に関連付けられているデータとアクションを取得するメソッドIntent。 これらのメソッドは、アクティビティのライフサイクル中はいつでも呼び出すことができますが、通常はonCreate()onStart()などの初期のコールバック中に行う必要が

ここでは、データを取得する方法を示すスニペットです。Intent:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data}

Java

@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();}

ユーザーの操作性を向上させるには、次のベストプラクティスに従ってください:

  • ディープリンクは、プロンプト、インタースティシャルページ、またはログインなしで、ユーザーをコンテンツに直接移動させる必要があります。 ユーザーが以前にアプリケーションを開いたことがない場合でも、アプリのコンテンツを参照できるようにしてください。それは、その後の相互作用や、彼らはランチャーからアプリを開いたときにユーザーにプロンプトを表示することは大丈夫です。
  • “ナビゲーションのバックアップとアップ”で説明されている設計ガイダンスに従って、ディープリンクを介してアプリに入った後、アプリがユーザーの後方ナビゲーションに対する期待と一致するようにします。

ディープリンクのテスト

アクティビティマネージャ(am)ツールでAndroid DebugBridgeを使用して、ディープリンクに指定したintent filterURIsが正しいアプリアクティビティに解決 デバイスまたはエミュレータに対してadbコマンドを実行できます。

adbを使用してインテントフィルタURIをテストするための一般的な構文は次のとおりです:

$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>

たとえば、次のコマンドは、指定されたURIに関連付けられているターゲットアプリアクティビティを表示しようとします。

$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android

上記で設定したマニフェスト宣言とインテントハンドラーは、アプリとウェブサイトの間の接続と、着信リンクの処理を定義します。 ただし、システムでアプリを一連のUriの既定のハンドラーとして処理するには、システムにこの接続の確認を要求する必要があります。 次のレッスンでは、この検証を実装する方法について説明します。

コメントを残す

メールアドレスが公開されることはありません。

Previous post Toni Kukocとは誰ですか? シカゴ・ブルズの元選手で、マイケル・ジョーダンのThe Last Dance
Next post クループ&喘息-ReMed自然医学クリニック