IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android App links 链接打开app功能 -> 正文阅读

[移动开发]Android App links 链接打开app功能

1、深链接Deep link(URI SCHEME协议)

深链接即我们通常说的scheme跳转,需要我们在清单文件中对activity添加intent-fillter,并定义scheme(包括但不限于HTTP协议)。如果用户手机内安装了多款能响应链接启动的应用,那么系统会弹出一个选择器,让用户自主选择用哪个应用打开。

2、安卓软件链接组 Android App Links

Android App Links是6.0以后才支持的链接方式,APP通过定义一组你自有的HTTP URL将该其设置为系统的默认打开对应域名的地址的应用(注意区分:不是6.0以下的默认打开某类数据)。当用户点击了包含你的域名的链接时,系统默认用你的APP打开该链接,如果用户手机未安装你的APP,那么会直接用浏览器打开。手机里的其他应用则不能打开。

3、两种区别

其实是一种技术的两种使用方式而已

区别项Deep linkApp Links
Intent URL schemehttp,https,自定义协议http,https
Intent action任何action需要android.intent.action.VIEW
Intent category任何category需要android.intent.category.BROWSABLE和android.intent.category.DEFAULT
链接验证不验证通过DAL文件和https验证
用户体验可能会弹出一个APP选择弹框让用户选择用哪个应用打开不弹APP选择弹框,直接用你的APP打开(已安装,否则直接打开网页)
兼容性所有版本系统6.0及以上

代码上的区别
在这里插入图片描述

因此,Android App Links相对于Deep link有以下几点优势:
1、安全:因为只有你自己的APP能打开,所以很可靠;
2、无缝的用户体验:因为只有自己的APP可以打开,所以不会出现让用户选择哪个应用的打开的弹框,如果用户没有安装你的APP,则直接用浏览器打开。
3、支持免安装的谷歌应用:当然,这条优势对国内开发者来说没什么影响,因为谷歌的免安装应用需要上传到google player。
4、支持从浏览器、谷歌搜索APP、手机快捷搜索和谷歌助手等多个地方通过链接启动APP。
但是,因为国内room厂商众多,如果在浏览器中打开链接,因为各方浏览器不一致,类似这种功能被限制了,往往会跳转新的网页,致使不能唤起APP。

Deep link支持:
当用户点击一个链接时,系统默认按以下顺序打开:
1、如果你设置了默认打开应用,则优先使用该应用打开;
2、如果只有一个应用能打开,则直接用该应用打开;
3、如果有多个应用能打开,才会弹出应用选择弹框。

4、代码实现

1.在清单文件中配置协议

AndroidManifest.xml

        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="活动中心"
            android:theme="@style/Theme.AppLinksDemo">
            <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:host="app.niceloo.com"
                    android:pathPrefix="/app/activityCenter"
                    android:scheme="youlu" />
            </intent-filter>
        </activity>

2.在Activity中实现代码

MainActivity.kt
因为页面可能第一次开启,也可能是在后台存活,故也需要在onNewIntent方法中进行判断是否有数据

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        WindowCompat.setDecorFitsSystemWindows(window, false)
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        
        parseIntent()

    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        parseIntent()
    }

    private fun parseIntent() {

        val appLinkAction = intent.action
        val appLinkData = intent.data
        //如果没有deep link信息,这里为空
        appLinkData?.let {
            val authority = appLinkData.authority
            val path = appLinkData.path
            val query = appLinkData.query
            binding.textviewFirst.text = "linkData:${appLinkData.toString()}"
        }
        
    }

}

3.第一种通过app入口应用 均可以唤起APP

binding.textviewFirst.setOnClickListener {
    val intent=Intent(Intent.ACTION_VIEW)
    intent.data= Uri.parse("youlu://app.niceloo.com/app/activityCenter?activityId=123456")
    startActivity(intent);
}

4.第二种通过浏览器中的链接均可以唤起APP

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>App link</title>
</head>
<body>
  <a href="youlu://app.niceloo.com/app/activityCenter?activityId=123456" style><font size="20">跳转打开活动中心123456</font></a>
</body>
</html>

5.当页面被打开时,判断意图是否有数据进入

在这里插入图片描述

6.根据链接协议的的参数内容进行业务逻辑的跳转

scheme是协议信息,当前demo中为youlu
authority是域名信息
path是路径信息,可选值
query是连接中的参数信息
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:17:25  更:2022-08-19 19:21:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:41:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码