【Android】点击短信链接唤起APP的方案实践

这篇具有很好参考价值的文章主要介绍了【Android】点击短信链接唤起APP的方案实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.概述

    在很多业务场景中,需要点击短信链接跳转到App的指定页面。在Android系统中,想要实现这个功能,可以通过DeepLink或AppLink实现。

二.方案

1.DeepLink

    DeepLink是Android系统最基础、最普遍、最广泛的外部唤起App的方式,不受系统版本限制。

1.1 方案效果

    当用户点击链接时,系统会弹出弹窗让用户选择使用哪个App来处理这个链接,如下图所示:
短信直接打开app,Android,android,kotlin,前端

1.2 使用流程

1.2.1 配置监听链接

    在AndroidManifest文件中需要唤起的activity中加入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="yuwen.ggl.cn"
        android:scheme="http" />
    <data
        android:host="yuwen.ggl.cn"
        android:scheme="https" />
    <data
        android:host="ggl.ggl"
        android:scheme="prek" />
</intent-filter>

    注意:由于一个intent-filter中多个data,scheme、host、path等会进行组合。因此,按照上面XML的配置,最后会生成6个链接,如下所示:

  • http://yuwen.ggl.cn
  • https://yuwen.ggl.cn
  • prek://ggl.ggl
  • prek://yuwen.ggl.cn
  • http://ggl.ggl
  • https://ggl.ggl

    可以通过为每个data单独设置一个intent-filter来避免这个问题。

    若需要监听指定的路径,可以通过设置path属性实现,代码如下:

    <data
        android:path="/app"
        android:host="yuwen.ggl.cn"
        android:scheme="https" />

    https://yuwen.ggl.cn/app跳转,https://yuwen.ggl.cn不跳转。

1.2.2 点击短信中的链接

    大多数接近原生的Android系统会弹出如下弹窗,让用户选择使用哪个app打开该链接,如下图所示:
短信直接打开app,Android,android,kotlin,前端
    一些被魔改过的国产Android系统,会直接使用浏览器打开链接。

    同时,通常情况下浏览器都会监听全部的http和https协议的链接,代码如下:

<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="*"
        android:scheme="http" />
    <data
        android:host="*"
        android:scheme="https" />
</intent-filter>
1.2.3 通过浏览器唤起app

    浏览器唤起app共有两种方式,一种是通过自定义Scheme实现,一种是通过Intent Scheme实现。
1)自定义的Sheme
    语法格式:scheme://host/path?parameters

<a href = "http://yuwen.ggl.cn"> 点击跳转 </a> //❌
<a href = "https://yuwen.ggl.cn"> 点击跳转 </a> //❌
<a href = "prek://ggl.ggl"> 点击跳转 </a> //✅

    缺点:不支持scheme为http和https等非自定义scheme。部分浏览器不支持。存在信息泄漏安全风险。

2)Intent Scheme
    语法格式:intent:Host/Uri_path#Intent;package=[String];action=[String];component=[String];scheme=[String];end

<a href = "intent:prek://ggl.ggl#Intent;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;end"> 点击跳转 </a>

    缺点:格式复杂。部分浏览器不支持。存在信息泄漏安全风险。

    由于Intent Scheme格式过于复杂,因此可以通过Android Studio生成,代码如下:

var schemeUri = Intent().apply {
    action = Intent.ACTION_VIEW
    addCategory(Intent.CATEGORY_DEFAULT)
    addCategory(Intent.CATEGORY_BROWSABLE)
    data = Uri.parse("prek://ggl.ggl")
}.toUri(0)

// prek://ggl.ggl#Intent;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;end
1.2.4 解析链接携带的数据

    以https://yuwen.ggl.cn/app?a=123&b='ggl’为例,代码如下:

val data:Uri? = intent.data // https://yuwen.ggl.cn/app?a=123&b='ggl'
val scheme:String? = data?.scheme // https
val host:String? = data?.host // yuwen.ggl.cn
val path:String? = data?.path // /app
val valueA:String? = data?.getQueryParameter("a") // 123
val valueB:String? = data?.getQueryParameter("b") // 'ggl'

2.AppLink

    AppLink是DeepLink升级版,只支持Android6.0以上。

2.1 方案效果

    当用户点击链接时,系统会直接唤起对应的App处理这个链接,如下图所示:
短信直接打开app,Android,android,kotlin,前端

2.2 使用流程

2.2.1 配置监听链接

    在AndroidManifest文件中需要唤起的activity中加入intent-filter,监听对应的链接。注意:scheme只能为http或https。代码如下:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data
        android:host="yuwen.ggl.cn"
        android:scheme="http" />
    <data
        android:host="yuwen.ggl.cn"
        android:scheme="https" />
</intent-filter>
2.2.2 生成assetlinks.json文件

    assetlinks.json文件共有两种生成方式,一种是对已有的assetlinks.json文件中的核心参数进行替换,一种是使用Android Studio生成assetlinks.json文件。

1)对已有的assetlinks.json文件中的核心参数进行替换
    assetlinks.json文件格式如下:

[
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "namespace": "android_app",
      "package_name": "build.gradle里定义的application ID",
      "sha256_cert_fingerprints": [应用签名的SHA256指纹信息]
    }
  }
]

    使用指令生成JSON文件中需要的指纹信息,代码如下:

$ keytool -list -v -keystore my-release-key.keystore

    替换指纹信息和App包名。

2)使用Android Studio生成assetlinks.json文件
    在Android Studio中点击Tools,然后在弹出的列表中选择App Links Assistant,弹出窗口如下:
短信直接打开app,Android,android,kotlin,前端
    窗口中四个选项的功能如下:

  • 1️⃣ 帮助添加需要监听的链接到AndroidManifest中指定的Activity。
  • 2️⃣ 帮助向处理对应链接的Activity中添加解析Intent中携带的参数的代码。
  • 3️⃣ 帮助生成assetlinks.json文件
  • 4️⃣ 验证链接对应域名是否正确部署JSON文件

    选择第三项,帮助生成assetlinks.json文件,如下图所示:
短信直接打开app,Android,android,kotlin,前端
    在当前窗口中填写域名和应用ID,选择对应的密钥库,最后生成文件并保存,生成文件如下所示:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.prek.android.ef",
    "sha256_cert_fingerprints":["FA:89:53:F3:5E:8D:AD:CF:EC:9A:79:6B:B5:48:50:CC:8A:BC:85:9E:21:9C:03:91:38:88:AA:39:6B:83:6C:3A"]
  }
}]
2.2.3 部署assetlinks.json文件

    将生成的assetlinks.json文件放到对应监听的域名的.well-known目录下。可通过浏览器进行访问:https://yuwen.ggl.cn/.well-known/assetlinks.json。

2.2.4 查看验证状态

    通过adb指令查看验证状态,代码如下:

adb shell dumpsys package d

    得到手机中所有App的AppLink验证信息,如下所示:

Package: com.prek.android.ef
  Domains: yuwen.ggl.cn
  Status:  ask

  Package: com.zhihu.android
  Domains: www.zhihu.com promotion.zhihu.com oia.zhihu.com zhuanlan.zhihu.com ms.zhihu.com
  Status:  always : 200000000

  Package: com.taptap
  Domains: d.taptap.com www.taptap.com
  Status:  always : 200000000

    ask未通过验证,always已通过验证。

2.3 注意事项

2.3.1 assetlinks.json文件的部署要求
  • assetlinks.json文件的content-type必须为application/json。
  • 不管监听链接的scheme为http或https,assetlinks.json必须能通过HTTPS链接访问。
  • assetlinks.json必须能不经过任何重定向被访问到,同时可以被爬虫访问到(robot.txt必须允许抓取/.well-known/assetlinks.json)。
  • 如果应用支持多种域名,需要把assetlinks.json发布在这几个域名的服务器上。
2.3.2 assetlinks.json文件的验证时机
  • App安装后(没有–>有),系统对会进行验证。若验证状态为通过,则覆盖安装后,不会进行验证。若验证状态为不通过,则每次覆盖安装后,会重新进行验证,直到验证状态为通过。
  • App卸载再安装后会进行验证。
  • 新版本中域名发生变化,覆盖安装后会进行验证。
  • 验证过程需要联网,否则验证不通过。若验证不通过,则AppLink退化为DeepLink。
  • 通过在浏览器中输入网址访问/.well-known文件夹下JSON文件的方式,无法触发验证。

三.总结

1.DeepLink

短信直接打开app,Android,android,kotlin,前端

2.AppLink

短信直接打开app,Android,android,kotlin,前端文章来源地址https://www.toymoban.com/news/detail-762400.html

到了这里,关于【Android】点击短信链接唤起APP的方案实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决hbuilderx打包网址成为5+app,点击返回按钮直接退出app的BUG

    直接上代码 这段代码是一个HTML文件的结构,它包含了一些基础的网页元素和一个JavaScript脚本,主要用于移动应用中的webview行为控制。我将逐部分为您详细解释: HTML部分 !DOCTYPE html : 声明文档类型,这里是HTML5。 html : HTML文档的根元素。 head : 包含了文档的元(meta)数据。

    2024年02月02日
    浏览(29)
  • iOS 中支持点击网页scheme超链接打开其他app

    网页内容如图所示 思路,点击网页中一个href 超链接的时候,会执行 decidePolicyForNavigationAction 方法,我们在改方法中截获URL, 判断如果是URL scheme类型的,则执行 [[UIApplication sharedApplication]openURL:URL options:@{} completionHandler:nil] 方法,打开URL,并取消这次加载 实现方法 app配置

    2024年02月16日
    浏览(47)
  • Unity中UGUI的Text实现超链接点击的解决方案

    1、同一个Text内可以实现多个不同字符区域的点击; 2、适配了中文、英文、韩文、日文、阿拉伯语等,更多语种待测试; 1、文本框内使用富文本,见截图 2、要使该文本的超链接功能生效,调用即可: 可以设置回调的灵活性就比较高了,各位自己扩展 https://github.com/Panda00

    2024年02月07日
    浏览(33)
  • Android 13.0 Launcher3 电话和短信app图标显示未读短信和未接来电的条数

    在13.0系统产品rom定制化开发中,最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动launcher时,查询未读短信和未接来电 在有未接来电时,更新未接来电的数量 在有未读短信时,更新未读短

    2024年01月17日
    浏览(59)
  • Android之点击Home键或者点击Google Play 对应的APP后再次打开:导致APP重启问题

    1.问题描述:当APP正常启动进入主界面后切后台或者打开别的APP,比如用户启动APP后将APP切后台同时打开Google Play,这个时候在Google Play 搜索到当前APP,点击打开当前APP,APP会打开,但是回不到之前的界面了。 2. 问题分析:一般APP启动流程是: 未登录:闪屏页SplashActivity--- 登

    2024年01月19日
    浏览(38)
  • Android S从桌面点击图标启动APP流程 (六)

    系列文章 Android S从桌面点击图标启动APP流程 (一) Android S从桌面点击图标启动APP流程 (二) Android S从桌面点击图标启动APP流程 (三) Android S从桌面点击图标启动APP流程 (四) Android S从桌面点击图标启动APP流程 (五) Android 12的源码链接: android 12 aosp http://aospxref.com/android-12.0.0_r3/ 上文

    2024年02月06日
    浏览(31)
  • el-select 在iOS手机上,无法唤起软键盘以及二次点击问题

    问题 element UI 中有一个 el-select 组件。我们经常用它来实现下拉框功能。 但是在手机上使用时,发现iOS手机上,该组件无法唤起软键盘。 主要是因为 组件中, input 上有一个 readonly 属性,而该属性规定输入字段为只读。阻止了用户对值进行修改,直到满足某些条件才行。 方

    2024年02月11日
    浏览(22)
  • Android 点击悬浮窗后台启动Activity问题及方案

    背景:开启悬浮窗,当app进入后台后,点击悬浮窗进入固定页面 问题:当app在后台运行时,点击悬浮窗,以下代码不能拉起app,经排查,部门手机需要开启后台弹出界面权限 如图  不同的机型这个权限的名称也不相同,要开启此权限,要跳转的界面也不同,所以需要获取不同机型的此页面路

    2024年02月11日
    浏览(31)
  • iOS- APP唤起微信小程序

    最近做了一个新功能。App里面点击按钮,唤起微信小程序。 稍后再说applink 的配置步骤。 上面的这些配置数据都需要从微信开发者平台申请获取。 1、要去微信开发者平台申请AppID以及AppSecret 申请地址:https://open.weixin.qq.com 下面就是需要填写的信息 第一步: 第二步: 这里可

    2024年02月15日
    浏览(40)
  • uniapp H5唤起手机App 中间下载页

    我这里直接是打开中间下载页,在下载页判断手机是否已存在App,有则唤起App,没有则可点击下载按钮下载app。 唤起App的关键语句是:window.location.href =  scheme  Scheme链接格式样式: [scheme]://[host]/[path]?[query] 直接放全部代码: 其中: 上述代码中的schemeLink:xxxApp:// Android和

    2024年02月20日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包