android deep links即scheme uri跳转以及googlePlay跳转配置

news/2024/7/8 9:08:30 标签: android

请添加图片描述

对于googlePlay的Custom URL就是googlePlay上APP网址:
https://play.google.com/store/apps/details?id=com.yourapp

如果是国内一些应用,则考虑market://包名等方式,自行百度。

对于Android URI Scheme

首先需要在Manifest xml中定义:

<activity
	android:name="com.your.SplashActivity"
	...>
		<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="myapp" android:host="app"/>
		</intent-filter>
 </activity>

值得一提的是,作为启动应用,你必须分割开两个intent-filter,否则就会导致应用icon不见。而且BROWSABLE必须保证action和2个category。

测试方法
1. 写代码:
startActivity(
      Intent(
                 Intent.ACTION_VIEW,
                 Uri.parse("myapp://app")
             ).also { it.flags = it.flags or Intent.FLAG_ACTIVITY_NEW_TASK }
         )
2. adb命令:
adb shell am start -W -d "myapp://app"
3. webView支持:

html中添加:

<a href="myapp://app">跳转至MyApp</a>

对于真实的前端配置好以后,使用标准的浏览器去打开,是不会有问题的。
因为它肯定实现了类似下面的代码。

自定义WebView中,点击网页中链接进行跳转,出现err_unknown_url_scheme
解决办法,给WebViewClient添加如下代码:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
  boolean schemeUri = true; //可以额外定制代码,进行判断
  return schemeUri && this.overrideUrlLoadUrl(view, url) ? true : super.shouldOverrideUrlLoading(view, url);
}

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    String uri = request.getUrl().toString();
    boolean schemeUri = true; //可以额外定制代码,进行判断
    return schemeUri && !uri.isEmpty() && this.overrideUrlLoadUrl(view, uri) ? true : super.shouldOverrideUrlLoading(view, request);
}

private boolean overrideUrlLoadUrl(WebView view, @NonNull String url) {
    if (!url.contains("http://") && !url.contains("https://")) {
        BridgeUtil.startActivity(view, url);
        return true;
    } else {
        view.loadUrl(url);
        return false;
    }
}

static void startActivity(WebView view, @NonNull String url) {
     startActivity(view, Uri.parse(url));
}

static void startActivity(WebView view, @NonNull Uri uri) {
    Intent intent = new Intent("android.intent.action.VIEW", uri);

    try {
        view.getContext().startActivity(intent);
    } catch (Exception var6) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        try {
            view.getContext().startActivity(intent);
        } catch (Exception var5) {
            Exception e2 = var5;
            e2.printStackTrace();
        }
    }

}

参考:
https://developer.android.com/training/app-links/deep-linking?hl=zh-cn


http://www.niftyadmin.cn/n/5537001.html

相关文章

cache lookup failed for subscription XXXX

在 PostgreSQL 中,cache lookup failed for subscription 错误通常表示系统缓存中的不一致性问题,尤其是与订阅相关的数据结构问题。以下是更详细的排查和解决步骤: 确认订阅已删除: 查看所有订阅: SELECT * FROM pg_subscription;如果仍然存在订阅,请尝试删除: DRO…

rtsp client c++

直接上代码&#xff1a;源码 void doRtspParse(char *b) {std::vector<std::string> res;char *ptr b, *ptr1 nullptr;while ((ptr1 strstr(ptr, "\r\n"))) {res.push_back(std::string(ptr, ptr1 - ptr));ptr ptr1 2;}int len ptr - b;b[len - 1] \0;…

无人机测绘需要注意什么?

无人机测绘是一项高精度的测量工作&#xff0c;需要注意以下四点&#xff1a; 一、作业前准备&#xff1a;沟通相关事宜&#xff0c;现场勘查&#xff0c;飞行环境检查等&#xff1b; 二、航线规划与像控点布设&#xff1a;航线规划是任务规划的核心内容&#xff0c;需要综合…

【报错】【Ubuntu】/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34‘ not found

1 报错 /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34 not found 2 分析 系统中的GNU C Library(glibc)版本不满足要求。 具体来说,该程序或库需要使用2.34版本的glibc,但系统中当前的glibc版本不满足这个要求。 首先,查看版本: strings /lib/x86_64-linux…

用Docker搭建分布式 Redis 的方法

使用 Docker 搭建一个分布式的 Redis 集群可以帮助你快速部署和管理多个 Redis 实例。一个典型的 Redis 集群包括多个主从节点&#xff0c;通过分片来实现数据的分布式存储与高可用性。 以下是使用 Docker 搭建分布式 Redis 集群的详细步骤&#xff1a; 前提条件 安装 Docke…

使用PowerShell开启防火墙端口

使用PowerShell开启防火墙端口 引言 防火墙是网络安全的重要组成部分&#xff0c;它通过控制进出网络的流量来保护计算机和网络免受未经授权的访问。有时候&#xff0c;我们需要打开特定的防火墙端口以允许特定应用程序或服务的通信。本文将详细讲解如何使用 PowerShell 开启…

自动化立体仓库出入库能力及堆垛机节拍

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载 自动化立体仓库的出入库能力、堆垛机节拍以…

python实现API调用缓存

python实现API调用缓存 1.代码2.输出3.保存的json数据 想把python某些函数的参数及返回值记录下来,如果之前已计算过,则直接返回缓存中的数据 1.代码 import jsondef get_variable_name(var):变量转变量名local_varsglobals()return [name for name, value in local_vars.ite…