美文网首页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