Android中的深度链接技术实战

 更新时间:2022年03月23日 09:59:55   作者:星星同学  
本文主要介绍了Android中的深度链接技术实战,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言

日常中,我们经常需要从浏览器中的网页或者从其它APP中直接打开我们的APP,我们就需要使用到深度链接技术。实现方式分别是 Dee pLinks 和 APP Links。

Deep Links

deep links是谷歌支持的一种打开app指定页面的方式,常用于从H5页面跳转至app目标页面。其对应指定页面的匹配规则是按照URI来匹配的。常见URI格式如下图:

示例

  • H5测试页面
<html>
<a href="http://demo.deaven.com:2003/test/data?params1=value1&params2=value2" rel="external nofollow" >点击唤起app</a>
<a href="https://demo.deaven.com:2003/test/data?params1=value1&params2=value2" rel="external nofollow" >点击唤起app</a>
<a href="abc://demo.deaven.com:2003/test/data?params1=value1&params2=value2" rel="external nofollow" >点击唤起app</a>
</html>

如上

  • scheme = http、https、abc。 DeepLink中 scheme 可自定义
  • host = demo.deaven.com
  • port = 2003
  • path = test/data
  • 传递参数(key-value): params1 : value1 params2 : value2
  • Android配置
 <activity android:name=".MainActivity"
           android:exported="true"
           android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </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="http" /> 
                <data android:scheme="https" />
                <data android:scheme="abc" />
                <data android:host="demo.deaven.com"/>
                <data android:port="2003"/>
                <!--表示匹配 Path 以/test 开头的uri,此项可以不写-->
                <!-- 注意 "/" 在pathPrefix中是必须的-->
                <data android:pathPrefix="/test"/>

            </intent-filter>
        </activity>

3.Activity中解析Intents

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Uri uri = getIntent().getData();
    String scheme = uri.getScheme(); // http、https、abc
    String host = uri.getHost(); // demo.deaven.com
    String path = uri.getPath(); // test/data
    String query = uri.getQuery(); // params1=value1&params2=value2
    String value1 = uri.getQueryParameter("params1"); 
    String value2 = uri.getQueryParameter("params2");
}

为了更好的管理以及用户体验,app中可以声明一个中间页根据参数统一分发跳转请求。

注意事项

  • scheme为 htttp/https 开头的uri,部分浏览器和手机ROM 并不能链接至APP,而是在浏览器中打开了对应的链接。所以做Deep Links时建议全部采用自定义Scheme的形式。

  • 在询问是否用APP打开对应的链接时,如果选择了“取消”并且“记住选择”被勾上,那么下次你再次想链接至APP时就不会有任何反应!!!

  • 不同的host不要写在同一个Intent Filter中,最好为每种匹配规则新建一个Intent Filter

App Links

Android在Android 6.0 (API level 23) 及以后加入了App Links , 当用户点击对应的URI 时,会直接启动对应的APP,不会再出现类似Deep Links 中是否打开app 的对话框出现。

Intent Filter

 <activity android:name=".MainActivity"
           android:exported="true"
           android:launchMode="singleTask"
           android:autoVerify="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </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="http" /> 
                <data android:scheme="https" />
                <data android:host="demo.deaven.com"/>
                <data android:port="2003"/>
                <!--表示匹配 Path 以/test 开头的uri,此项可以不写-->
                <!-- 注意 "/" 在pathPrefix中是必须的-->
                <data android:pathPrefix="/test"/>

            </intent-filter>
        </activity>
  • Intent Filter和Deep Links 类似 但是 scheme只能使用 htttp 或 https 不支持自定义scheme。

  • android:autoVerify="true" 会让APP自动在所列的host中去验证,如果验证成功,APP将成为匹配URI默认打开方式。

配置 assetlinks.json

如不能翻墙,可复制下方代码修改为自己参数,生成 assetlinks.json文件 ,json文件名只能是 assetlinks 不能自定义

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target" : { "namespace": "android_app", "package_name": "com.deaven.link",
               "sha256_cert_fingerprints": [""14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5""] }
}]

2.部署assetlinks.json

我们的host为demo.deaven.com,那么我们就需将assetlinks.json放到https://demo.deaven.com/.well-known/assetlinks.json并可以正常访问。你也可以在 https://developers.google.com/digital-asset-links/tools/generator检查服务器上assetlinks.json是否可访问如下图:

3.Activity中解析Intents 类似 Deep Links

参考文档

https://www.jianshu.com/p/1632be1c2451

到此这篇关于Android中的深度链接技术实战的文章就介绍到这了,更多相关Android 深度链接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android设置全屏代码分享

    Android设置全屏代码分享

    本文是安卓代码分享的第一篇,给大家分享了一段简单的设置安卓全屏的代码,后续还会为大家分享一些。
    2014-10-10
  • Android开启新线程播放背景音乐

    Android开启新线程播放背景音乐

    这篇文章主要为大家详细介绍了Android开启新线程播放背景音乐,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • android实现蓝牙app代码

    android实现蓝牙app代码

    这篇文章主要为大家详细介绍了android实现蓝牙app的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android如何获取系统通知的开启状态详解

    Android如何获取系统通知的开启状态详解

    这篇文章主要给大家介绍了关于Android如何获取系统通知开启状态的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧啊。
    2017-08-08
  • Android中Service服务详解(二)

    Android中Service服务详解(二)

    这篇文章主要介绍了Android中Service服务,在前面一篇的基础上进一步分析了Android Service的绑定服务与解绑服务的相关使用技巧,需要的朋友可以参考下
    2016-01-01
  • Android状态栏微技巧(推荐)

    Android状态栏微技巧(推荐)

    这篇文章主要介绍了Android状态栏微技巧的相关资料,非常不错,具有参考借鉴价值,需要的朋友一起学习吧
    2016-12-12
  • Android开发之文本内容自动朗读功能实现方法

    Android开发之文本内容自动朗读功能实现方法

    这篇文章主要介绍了Android开发之文本内容自动朗读功能实现方法,结合实例形式分析了Android自动朗读TTS功能的操作步骤、相关函数使用方法与注意事项,需要的朋友可以参考下
    2017-09-09
  • Android布局中margin与padding的区别及说明

    Android布局中margin与padding的区别及说明

    这篇文章主要介绍了Android布局中margin与padding的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Android Gradle 三方依赖管理详解

    Android Gradle 三方依赖管理详解

    这篇文章主要介绍了Android Gradle 三方依赖管理详解,Gradle的依赖管理是一个从开始接触Android开发就一直伴随着我们的问题,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Framework源码面试之activity启动流程

    Framework源码面试之activity启动流程

    这篇文章主要为大家介绍了Framework源码面试之activity启动流程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论