H5中使用通用链接universallink跳转iOS App的坑

UniApp深度解析:如何通过URL Scheme与Universal Link实现精准页面跳转 本文深度解析了在UniApp中实现外部链接精准跳转的两大核心技术:URL Scheme与Universal Link。详细阐述了其配置方法、代码实现、安全策略及调试技巧,帮助开发者打通从短信、网页到App内页的无缝跳转链路,有效提升用户体验与业务转化率。 阅读详情

一、背景

移动端H5开发中,经常有需要点击某个按钮直接跳转打开app的需求。比如:我们有一个邀请注册的页面,从app分享到微信,用户在微信内浏览页面,点击页面中的“打开app”按钮引导跳转浏览器(微信内限制了直接跳转APP,故需要先引导到浏览器,若需微信内直接跳转,参考:微信官方文档,需要满足一些特定条件才可以),在浏览器中再点击“打开app”跳转app,传统的scheme跳转打开APP会有一个“在xxapp中打开”的二次确认弹窗,且当APP未安装时点击会提示“浏览器打不开该网页,因为网址无效”,体验比较差。故需要使用通用链接跳转,但是通用链接跳转也有很多需要注意的坑,为防止后续再走弯路,这里将通用链接配置和使用流程做个完整的记录。

二、通用链接的配置

参考苹果官方文档

  • 将关联的域名文件添加到您的网站。
    在你的网站域名根目录或 /.well-known 目录下,上传一个名为 apple-app-site-association(无后缀名)的JSON文件 。该文件用于声明你的网站允许哪些对应的 App 打开哪些路径的链接。json文件内容参考如下配置:
{
    "applinks": {
        "details": [
            {
                "appIDs": [ "ABCDE12345.com.example.app" ],//你的Team ID + Bundle ID
                "components": [
                		{
                        "/": "/app/*",// 匹配/app/下的所有页面
                        "comment": "普通app页面都打开App"
                    },
                    {
                        "/": "/product/*",        // 匹配路径 /product/ 下的所有页面
                        "#": "share",             // 且 fragment 是 share(即#号后面的内容)
                        "?": { "albumname": "iPhone" }, // 且查询参数 albumname=iPhone
                        "comment": "只有当所有条件都满足时才匹配"
                    },
                    {
                        "/": "/checkout/success", // 匹配路径 /checkout/success
                        "#": "no_universal_links",// 但如果 fragment 是 no_universal_links
                        "exclude": true,          // 则排除(不打开 App)
                        "comment": "支付成功页有时需要显示网页内容"
                    },
                    
                ]
            }
        ]
    }
}
  • 将关联的域权限添加到您的应用。
    在XCode - Target - Signing & Capabilities - Associated Domains中添加域名。如图:
    在这里插入图片描述

三、通用链接的使用

  1. app中添加代码以响应通用链接
    假设链接是https://www.example.com/product/#share?albumname=iPhone,则如下代码会在打开app后输出album = iPhone
func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
    // Get URL components from the incoming user activity.
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
        let incomingURL = userActivity.webpageURL,
        let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true) else {
        return false
    }
    // Check for specific URL components that you need.
    guard let path = components.path,
    let params = components.queryItems else {
        return false
    }    
    print("path = \(path)")

    if let albumName = params.first(where: { $0.name == "albumname" } )?.value{
        print("album = \(albumName)")
        return true
    } else {
        print("Either album name or photo index missing")
        return false
    }
}
  1. h5页面使用通用链接跳转
    • 浏览器直接输入通用链接
      按前面的配置。现在在浏览器直接输入https://www.example.com/app/123,在有安装app的情况下,就会在页面顶部提示,在“xxx”app中打开,点击打开即可跳转app。若没有安装,就单纯显示页面内容,没有提示。

    • 微信内引导跳转浏览器打开
      比较正常场景应该是从微信内引导跳转浏览器,如果通用链接生效并安装了app,则跳转浏览器后就会接着跳转app。如果想要跳转浏览器后点击“打开xxapp”按钮再跳转App,则页面路径和通用链接应使用不同域名,比如:页面路径是https://www.example.com/app/123,通用链接路径是https://www.universal.com/app/123。如果使用相同域名,浏览器会认为用户想要跳转页面而不是打开app,因此只会在浏览器中打开该链接。 注意,域名修改后XCode的Associated Domains配置也要相应修改成,applinks:www.universal.com,如图:
      在这里插入图片描述

    • 隐藏的坑。

      1. 如果用户修改了apple-app-site-association文件,必须重装app,否则修改的通用链接不会生效。因为iOS是在首次安装时拉取apple-app-site-association文件。如果卸载重装也不生效,可能是苹果的CDN缓存问题,测试时可将XCode配置改成applinks:www.universal.com?mode=developer,添加developer限制,跳过苹果的CDN缓存,这样的话测试的设备必须开启开发者模式,且启用 “设置”>“开发者”中的“关联域名开发” 选项。测试通过后再将配置还原成,applinks:www.universal.com,苹果的CDN缓存一般会在48小时后更新。
      2. 必须是真实用户点击。以下情况 一定不生效:JS 自动触发(setTimeout / onload)、页面一加载就调用。非点击事件(滚动、接口回调),必须用a标签,click事件herf跳转,且最好不要是异步操作。
      3. 如果用户之前有过以下几种操作:
      • 之前点击的时候app没装

      • App 装了但没及时响应

      • 用户点过 “在 Safari 中打开”

      • 之前用 scheme / JS 跳转失败过

        iOS 会记住这个决定,之后的行为就是:永远不再唤起 App,无论是 a标签,herf、跨域、Safari 地址栏,都会只打开网页。如果要恢复跳转,需要在浏览器或备忘录中输入这个地址,长按,选择“在xxapp中打开”,即可重置iOS的记忆。这也是建议通用链接不要和页面链接用同一个域名的原因之一,因为页面链接很容易触发这些行为,一旦用户触发,通用链接将永远无法在生效,用户不会和开发者一样知道如何重置,开发者维护和排查也比较困难。

    • 进一步优化
      如果需要对已安装app的用户,直接跳转app并在app打开目标H5,对于未安装app的用户,跳转下载页引导去appstore下载。则通用链接直接配置成子域名下的app下载页即可,目标H5路径可通过约定参数获取。如:通用链接为https://www.universal.com/h5/#/appdownload?destUrl=h5/#/share(destUrl指定打开app后需要跳转的页面路径),apple-app-site-association配置参考如下:

{
    "applinks": {
        "details": [
            {
            	"appIDs": [ "AB6B78BFS6E.com.xmyf.escort" ],
            	"components": [
		    		 {
		    		 	"/": "/h5/*",
		    		 	"#": "/appdownload",
		    		 	"comment": "匹配路径/h5/下的所有页面,且fragment是/appdownload(即#号后面的内容),对应app下载页https://www.universal.com/h5/#/appdownload"
                    }
                ]
            }
        ]
    }
}
H5页面如何优雅实现iOS App Store跳转与APP唤起 本文深入解析了在H5页面中实现iOS App Store跳转与APP唤起的核心原理与实战方案。针对iOS系统的安全限制,文章详细介绍了如何结合自定义URL Scheme、Universal Link,并利用定时器与页面可见性监听实现智能的“先尝试唤起,失败则跳转商店”的优雅流程。同时,提供了兼容微信等特殊环境的解决方案与高级优化技巧,帮助开发者提升用户体验。 阅读详情

相关推荐

微信H5使用<wx-open-launch-app>跳转App不生效问题自检

标签,找了很久的问题。最后时把其他项目的package-lock.json文件拿过来,至今没找到是哪个版本库的问题。H5注册WXApi时是服务号的AppId(微信开放平台-管理中心-公众号-找到自己的服务号)跳转的appid是移动应用的Appid(微信开放平台-管理中心-移动应用)正式环境才能测试,测试环境点击是没有反应的,不会有弹框。标签,我们用的Vue,一直没有生效,渲染出来还是。以上配置必须都是一级域名,H5的域名也是这个。标签后,配置没问题就可以跳转了。官方文档写的是会调用。

Yadea前端杂记 1413

【iOS特性】Universal Links打开app跳转指定页面

在项目中监听 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler。文件上传完成后,通过浏览器能正常访问。文件内容说明上传成功。

zww学习笔记 1021

iOS开发者必看:微信H5跳转App的Universal Link配置全指南(含SceneDelegate适配)

本文为iOS开发者提供了微信H5通过Universal Link跳转App的完整配置指南。详细解析了从域名服务器配置、Xcode工程设置、微信开放平台关键信息填写,到H5前端集成与iOS端SceneDelegate适配的全流程,并重点解决了wx-open-launch-app标签在iOS 13+设备上的回调问题,帮助开发者高效实现无缝跳转。

opencv7vision的博客 609

iOS 唤起APP之Universal Link(通用链接)

网上看到这篇关于IOS Universal Link的文章,很不错,这里分享一下。iOS 唤起APP之Universal Link(通用链接) - Code.Rookie - 博客园 (通用链接)是Apple在iOS9推出的一种能够方便的通过传统链接来启动APP的功能,可以使用相同的网址打开网址和APP。当你的应用支持(通用链接),当用户点击一个链接是可以跳转到你的网站并获得无缝重定向到对应的APP,且不需要通过浏览器。如果你的应用不支持的话,则会在中打开该链接。 在苹果开发者中可以看到对它的介

zzhongcy的专栏 7979

优化问题-半正定规划(Semi-Definite Program, SDP)

半正定规划(Semi-Definite Program, SDP)在MIMO无线通信相关的信号处理中具有广泛的应用,在某些场景可以分析证明SDP的得到的解释原问题的全局最优化或者次优解。

qq_33668008的博客 1万+

ubuntu20.04安装Qt5.15.2并配置环境

qt官方取消了离线安装的方式,所以推荐在线安装,当然,如果想要自己通过源码编译也可以,参考官方文档:https://wiki.qt.io/Building_Qt_5_from_Git。 在线安装: 1.到官方网站下载:wget https://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run 2.修改文件权限:chmod 777 qt-unified-linux-x64-online.run

f120854632的博客 8807

iOS 通用链接(Universal Link)唤起app的实现方法

第三步在 xcode里边添加 Caoability -> associated domains 里边添加 applinks:xxxxxxxxxxxxxx.com。第六步 ipone自带浏览器 输入www.xxxxxxxxxxxxxx.com/aaaa 就可以了。第二步: 把上述写好的文件上传到www.xxxxxxxxxxxxxx.com服务器的根目录。那么唤醒你的app的就是 www.xxxxxxxxxxxxxx.com/aaaa。假如接口地址是:www.xxxxxxxxxxxxxx.com。

weixin_42611061的博客 1846

机器人空间平滑过渡-6点5次贝塞尔曲线

在工业机器人应用中,空间直线或者圆弧等笛卡尔运动中常使用贝塞尔曲线作为过渡平滑, 而6个控制点5次贝塞尔曲线更具备轨迹平滑、速度可导、加速度连续等要求,往往应用于 高级的机器人控制系统中。 贝塞尔曲线(Bézier curve)定义: 五次贝塞尔曲线公式为 化简得到 从上述式子来看,跟五次多项式是一致的,因此跟5次多项式轨迹规划也有相似之处。 但也存在不一致的地方。若使用...

4327

h5跳转app指定页面及各种坑的总结

11.29更新项目中对微信内的处理方案及一些坑 12.3更新ios9后url scheme的坑及最终解决方案 最近遇到一个需求:如果用户安装了app,则跳app;如果用户没安装app,则跳app下载链接,这个在平常见的还蛮多的。查了一些资料,总结一下。 一、解决方案:URL scheme 或 universal link a)URL scheme是在app内配置的链接,比如:weixin...

細水、長流√的专栏 5395

Altium Designer(AD)的简易使用

一、绘制原理图、原理图库 首先来说明原理图的概念。 根据百度百科,原理图,顾名思义就是表示电路板上各器件之间连接原理的图表。也就是表示芯片上的引脚连接什么元件,各个元件谁和谁相连,电源电压的大小之类的。​ 再来说一下原理图和原理图库的区别和联系。 原理图是某个产品的原理图设计文件;原理图库是设计原理图时用到的电子元件的电路符号的集合。绘制PCB板时先设计原理图即建立原理图文件,而在原理图文件中设计原理图前必须将原理图库文件加载到原理图编辑环境才能使用其中的电路符号。 接下来说明如...

qq_52630607的博客 2万+

黏菌算法(Slime Mould Algorithm,SMA)

这是一篇关于黏菌算法的总结博客,包含算法思想,算法步骤,求函数最值(Python实现),算法改进等,持续更新ing

weixin_46838605的博客 1万+

iOS——通用链接(Universal Link)通过传统HTTPS链接来启动APP的功能

一、Universal Link(通用链接) 简介 Universal Link(通用链接)是Apple在iOS9推出的一种能够方便的通过传统HTTPS链接来启动APP的功能,可以使用相同的网址打开网址和APP。当你的应用支持Universal Link(通用链接),当用户点击一个链接是可以跳转到你的网站并获得无缝重定向到对应的APP,且不需要通过Safari浏览器。如果你的应用不支持的话,则会在Safari中打开该链接。 Universal Link(通用链接):看起来就是一条普通的https链接,当

cym_bj 5233

YOLOv8交通监控全方案:精准车辆计数+违章(闯红灯/压线)识别,拿来就落地!

作为深耕计算机视觉落地的开发者,我见过太多交通监控的“伪智能”——传统系统要么车辆计数不准(漏计/重复计数),要么违章识别滞后(靠人工回看录像),甚至连“闯红灯、压线”这类常见违章都无法实时判定,完全满足不了实际交通管理需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 646

微信环境下h5与小程序跳转app的陷阱

2022年微信环境下跳转app解决方案,包含小程序和h5两种全套方案集合,目前百度出来的内容比较老套,微信也是更新了很多次文档,看这里。

欢迎来到☆槿畔☆的博客 8725

AXI2APB_bridge 设计

此处研究AHB Slave到 APB master的桥接器,实现接口转化,例如下图之后是参数描述

Starry__的博客 4036

AI赋能数字人:打造与语音节奏完美匹配的高质量手势动画

想象一个场景:当你与一位数字人交谈时,它不仅能理解你的言语,还能恰到好处地挥动手臂、比划手势,就像真实的人类交流一样自然流畅。这正是当前AI技术致力于实现的目标——通过分析语音内容,自动生成与之相匹配的手势动作,为数字人赋予更加丰富的情感表达和非言语沟通能力。AI手势生成技术的出现,标志着数字人在模仿人类自然交流方式上迈出了重要一步。随着技术的不断成熟与应用场景的拓宽,未来我们可以期待更多富有表现力和情感互动的数字人出现在我们的日常生活中,开启人机交互的新篇章。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 793

H5页面在浏览器中跳转APP的方式/URL Scheme/Universal Link

两种方式

没沙发 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

H5如何实现唤起APP

写过hybrid的同学,想必都会遇到这样的需求,如果用户安装了自己的APP,就打开APP或跳转到APP内某个页面,如果没安装则引导用户到对应页面或应用商店下载。这里就涉及到了H5与Native之间的交互,为什么H5能够唤起APP并且跳转到对应的页面?就算你没写过想必也体验过,最常见的就是一些广告了,如果你点击了广告,他判断你手机装了对应APP,那他就会去打开那个APP,如果没安装,他会帮你跳转到应用商店去下载,这个还算人性化一点的,有些直接后台给你去下载,你完全无感知。

2401_83384536的博客 3110

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

H5通过Universal Link(通用链接)唤起app

问题:之前使用的通过网页打开app都是通过URL scheme打开app,但是我们在开发的过程中遇到过一个奇怪问题,本地的debug的时候都是可以正常打开的,但是打成安装包之后URL scheme没有起作用,解压了安装包,里面也是有配置的URL scheme,于是决定换Universal Link的方法去完成本次续期,当然在使用Universal Link过程中也遇到过很多坑,下面就简单介绍下: Universal Link简介: Universal Link是苹果在WWDC 2015上提出的iOS 9的新

xiazhengcheng的博客 4820

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ShareSDK iOS端 UniversalLink生成最佳实践

Universal Link (通用链接)是Apple在iOS9推出的一种能够方便的通过传统 HTTPS链接来启动APP的功能,可以使用相同的网址打开网址和APP。

apkkkk的博客 1645

H5 如何实现唤起 APP

写过hybrid的同学,想必都会遇到这样的需求,如果用户安装了自己的APP,就打开APP或跳转到APP内某个页面,如果没安装则引导用户到对应页面或应用商店下载。这里就涉及到了H5与Native之间的交互,为什么H5能够唤起APP并且跳转到对应的页面?就算你没写过想必也体验过,最常见的就是一些广告了,如果你点击了广告,他判断你手机装了对应APP,那他就会去打开那个APP,如果没安装,他会帮你跳转到应用商店去下载,这个还算人性化一点的,有些直接后台给你去下载,你完全无感知。

时清云的博客 2809

微信内H5页面唤醒App

首先,简述一下这个需求的背景,产品希望能够让用户在微信内,打开一个h5页面,然后就能唤醒公司中维护的app,这个是为了能够更好的引流。

qq_44859233的博客 5985

关于h5唤起App的方式

唤起 App 应该是很常见的问题了。我们在开发 H5 的时候,有一些链路上的功能在 H5 不支持,只能去 App 才能完成。比如,下单、支付等功能。那么在更多的场景能够唤起 App 就显得很重要了。 判断浏览器,动态加载对应浏览器的下载逻辑 通过universal link、URL Scheme、a 标签、iframe几种方式找出最适合这个浏览器的唤起方式。 如...

宋坚强大大~~ 3565

call-app H5 唤起 APP 的解决方案

call-app callapp-lib 是一个 H5 唤起 APP 的解决方案,能够满足大部分唤起客户端的场景,也预留了扩展口,帮你实现一些定制化的功能。 安装 npm install --save callapp-lib 使用 import CallApp from 'callapp-lib'; let scheme = { protocol: 'APP协议,URLScheme的scheme字段,就是你要打开的APP的标识', host: 'URL Scheme的host字段' } c

weixin_44785498的博客 3895
上一篇: iOS14使用stack布局的坑
devil_0311
博客等级 码龄10年 13粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值