アプリをWebページや他のアプリから起動するためにDeep Linkが使われています
起動したいActivityに対してAndroidManifest.xmlに以下のintent-filterを追加すると、myapp://detail?page=1
のリンクによりアプリを起動することができます
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myapp" android:host="detail" />
</intent-filter>
1つのActivityに複数のスキーム、ホストを対応させることもできます。
このとき、1つのintent-filterに複数のdataを持つか、2つのintent-filterにそれぞれdataを持つかどうかで対応するURLが変化します
Activity,intent-filter,dataの関係
Activity内に複数のintent-filterを持つとOR指定、intent-filter内に複数のdataを持つとsheme, host, pathそれぞれのAND指定となります
1つのintent-filterに2つのdata
試しに1つのintent-filterに2つのdata(片方はpathを未設定)を持つと以下のようになります
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myapp" android:host="detail" />
<data android:scheme="https" android:host="myapp.com" android:pathPattern="/detail.*" />
</intent-filter>
起動したURL
myapp://detail/detail?page=1
https://myapp.com/detail?page=1
起動しないURL
myapp://detail/?page=1
https://myapp.com?page=1
ここで、1つめのdataにpathPattern=".*"
を追加すると、4つ全てのURLでアプリが起動します
2つのintent-filterにそれぞれ1つのdata
また、activity内に2つのintent-filterを持ち、それぞれにdataを持たせると以下のようになります
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myapp" android:host="detail" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="myapp.com" android:pathPattern="/detail.*" />
</intent-filter>
起動したURL
myapp://detail/?page=1
myapp://detail/detail?page=1
https://myapp.com/detail?page=1
起動しないURL
https://myapp.com?page=1
ここで1つ目のdataにpathPatternを追加するとmyapp://detail/detail?page=1
のときアプリは起動しません
複数のintent-filterに対応した気になって、試すと動かなかったのでまとめました