美文网首页DeepLink or AppLink
Android DeepLink vs AppLink

Android DeepLink vs AppLink

作者: Summer舒舒 | 来源:发表于2018-03-15 21:53 被阅读637次

一、概念

1. 介绍
  • DeepLink与AppLink,本质上都是基于Intent框架,使App能够识别并处理来自系统或其他App的某种特殊URL,在原生App之间相互跳转,实现良好的用户体验
  • DeepLink相对简单,有时不能直接唤起目标App,会出现多选项弹窗、确认弹窗等,需要用户进一步操作;AppLink相对复杂,需要App与Web协作完成系统验证,但可以保证直接唤起目标App,无需用户二次选择或确认
2. 区别
不同点 DeepLink AppLink
Intent scheme 任意 要求http或https
Intent action 任意 要求配置andorid.intent.action.VIEW
Intent category 任意 要求配置android.intent.category.BROWSABLE和android.intent.category.DEFAULT
链接认证 无需验证 要求进行Digital Asset Links文件验证
用户体验 可能展示一个多选项弹窗或确认弹窗,用户需要二次选择或确认 无弹窗,直接由App处理链接
兼容性 所有版本 Android6.0及以上版本

二、DeepLink实践

1. 被唤起方
1.1 首先,需要在AndroidManifest.xml文件进行配置
 <activity
            android:name=".activities.CalledActvity"
            android:screenOrientation="portrait">

            <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:host="www.example.com"
                    android:scheme="http" />
                <data
                    android:host="www.example.com"
                    android:scheme="https" />
                <data
                    android:host="www.example.com"
                    android:path="/user/profile"
                    android:scheme="https" />
                <data
                    android:host="www.example.com"
                    android:pathPrefix="/user"
                    android:scheme="https" />
            </intent-filter>

        </activity>

配置项作用:

  • ACTION_VIEW:支持被检索
  • CATEGORY_DEFAULT:响应隐式Intent
  • CATEGORY_BROWSABLE:可被Web浏览器唤起
  • data:一个或多个,必须含有scheme标签,决定被唤起的URL格式。

其中:

  • App可以配置多个支持唤起的Activity
  • Activity可以支持被多个URL唤起
  • 若一个App配置了多个支持唤起的Activity,它们的scheme和host一般一致,然后通过path、pathPrefix等进行定向区分
1.2 然后,被唤起后解析URL数据
@Override 
public void onCreate(Bundle savesInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  Intent intent=getIntent();
  String action=intent.getAction();
  Uri data=intent.getData();

  //解析data
  String scheme=data.getScheme();
  String host=data.getHost();
  String path=data.getPath();
  int port=data.getPort();
  Set<String> paramKeySet=data.getQueryParameterNames();
...
}

2. 唤起方
2.1 获取到被唤起方的URL后,使用Intent跳转
Intent intent=new Intent();
intent.setData(Uri.parse("example://www.example.com/user?uid=123&name=Ming"));
startActivity(intent);
  • 需要回调数据时,使用startActivityForResult

三、AppLink实践

链接

四、配置示例

1. DeepLink

腾讯视频Android客户端,反编译获取AndroidManifest文件

  <activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" android:name="com.tencent.qqlive.open.QQLiveOpenActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.qqlive.open.details"/>
                <action android:name="android.intent.action.qqlive.open.player"/>
                <action android:name="android.intent.action.qqlive.open.list"/>
                <action android:name="android.intent.action.qqlive.open.live"/>
                <action android:name="android.intent.action.qqlive.open.home"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </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="qqlive"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="tenvideo2"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="txvideo"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="videopush"/>
            </intent-filter>
            <intent-filter>
                <action android:name="com.tencent.qqlive.action.oppo.push"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
    </activity>

2. AppLink

淘宝Android客户端,反编译获取AndroidManifest文件

    <activity android:name="com.taobao.android.tbplay.GameDetailActivity">
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <action android:name="android.intent.action.NAV.ACTION"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="http"/>
                <data android:scheme="https"/>
                <data android:host="m.taobao.com" android:pathPattern="/tbplay.htm"/>
            </intent-filter>
            <meta-data android:name="bundleLocation" android:value="com.taobao.android.tbplay"/>
     </activity>

五、参考

Android Developers

相关文章

网友评论

    本文标题:Android DeepLink vs AppLink

    本文链接:https://www.haomeiwen.com/subject/xckkqftx.html