Sean's Note: How to handle app links?

2016年2月1日 星期一

How to handle app links?

App Link 可以用來讓程式 A 把 程式 B 的某個 Activity 叫起來。
首先,需要在 AndroidManifest.xml 裡的 Activity 區段宣告以下:
<activity ...>
    <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" />
        <data android:host="profilePage" />
    </intent-filter>
</activity>
一個 URI 是由以下所組成:
<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]

所以程式 A 就可以透過 URI myApp://profilePage 把程式 B 給叫起來:
// Application A start application B via the intent with URI. 
Intent i = new Intent();
i.setData(Uri.parse("myApp://profilePage"));
// Check whether the intent can be resolved.
if (i.resolveActivity(getPackageManager()) != null) {
  startActivity(i);
}

甚至 URI 後面也可以帶 query:
myApp://profilePage?uid=12&uname=Sean
再透過 Uri 的方法 getQueryParameterNames 和 getQueryParameter 來取得 key 和 value。


測試的方法

測試的方法有三種:
  1. 直接寫程式碼執行。
  2. 用 Android Studio 來執行
    Run -> Edit Configuration... -> Launch Options -> URL
    在 URL 的欄位輸入 URI 然後執行。
    用這個方法的缺點是只能測 action=android.intent.action.VIEW 而且 category=android.intent.category.BROWSER 的 activity。

  3. 透過 adb command line (推薦的方法)
    輸入 adb 指令:
    adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSER -d myApp://profilePage

Ref:
  1. <data>
    https://developer.android.com/guide/topics/manifest/data-element.html
  2. Support HTTP URLs in Your App
    https://firebase.google.com/docs/app-indexing/android/app?hl=zh-tw#reference-the-noindexxml-file
  3. Testing URLs with Android Studio
    https://firebase.google.com/docs/app-indexing/android/test#lint-checks-for-links

沒有留言:

張貼留言