iOS通用链接(UniversalLink)配置详细流程

news2024/9/23 7:29:02

一、Universal Links 配置过程

  1. 登录苹果账号后,点击创建的APP 的Bundle ID,跳转到APP 信息页面。
  2. 记录下Team ID 和Bundle ID 备用。
  3. 勾选上 功能列表上的 ”Associated Domains“选项。

配置苹果后台

  1. 创建一个text空文本文件,去掉文件后缀,命名为apple-app-site-association(不能修改,且不能添加后缀)。
  2. 文件内添加json格式数据,内容如下

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID":"8ARUHGUQNH.com.YHKJ.AppSample",
                "paths": [ "/AppSample/*"]
            }
        ]
    }
}

如果一个域名下面有多端APP,可写作

{
    "applinks":{
        "apps":[],
        "details":[
            {
                "appID":"8ARUHGUQNH.com.YHKJ.AppSample",
                "paths":["/AppSample/*"]
            }
            {
                "appID":"8ARUHGUQNH.com.YHKJ.appManage",
                "paths":["/manageAppSample/*"]
            }
        ]
    }
}

apps:为必写且固定为[ ]
appID是指:TeamID.BundleId的组成
paths:是一个支持的路径列表字符串数组,可以是一个也可以是多个,用于过滤可以跳转到App的链接,支持通配符*,通配符表示允许该域名下的任意路径。
details数组中可以配置多个APP的信息,如果有多个APP需要支持Universal,则可以直接添加多个。
严格区分字母大小写

  1. apple-app-site-association文件创建好后 发给后台,让后台放到域名的服务器根目录下,也可以在根目录中添加.well-known文件夹,将文件上传到.well-known文件夹下(.点一定不能少),对应连接分别为

https://xxx/apple-app-site-association
https://xxx/.well-known/apple-app-site-association
xxx为服务端的域名
  1. 打开你的iOS工程,如下添加“Associated Domains”功能 和 域名地址,
    applinks:域名地址,Domains中的域名必须是使用applinks开头。

添加Associated Domains

添加域名地址

二、测试Universal Link链接

苹果提供了一个网页来验证我们编写的这个apple-app-site-association文件是否合法有效,
https://search.developer.apple.com/appsearch-validation-tool/

如果 Universal Link 配置成功,在iOS自带Safari浏览器中,打开 Universal Link 链接,下拉会出现应用入口,点击“打开”可以跳转至原生App;如打开微信的 Universal Link : https://help.wechat.com/app/ 如下图

打开微信通用链接

二 、Universal Link 的运行机制原理

  1. 当App初次安装后或者更新版本后的第一次启动(第二次启动就不会),向工程配置的applinks:的域名请求apple-app-site-association配置文件。
  2. App自动的将apple-app-site-association配置文件向iOS系统配置。
  3. 当任何WebView发起UniversalLink的url的时候,系统遍历注册过的通用链接,如果命中则直接打开App触发Delegate方法。
  4. 如果没命中,WebView继续跳转加载url。
    以上都是系统默默替你做的,我们要做的就是确保配置的正确性。

三 、注意事项

  1. 服务器的域名地址必须是HTTPS的,并且SSL证书必须通过苹果信任。苹果支持的HTTPS证书列表。
  2. apple-app-site-association名称不能变,不能加后缀,只能放在上面说的服务器位置。但是 iOS 会先去请求.well-known 路径,如果apple-app-site-association文件请求不到,再去请求根目录,所以如果想要避免服务器接收过多GET请求,可以直接把apple-app-site-association文件放到well-known目录下。
  3. 服务器上apple-app-site-association的更新不会让iOS本地的apple-app-site-association同步更新,Universal Link的更新 只有在APP第一次安装 和 更新版本的时候,如果Universal Link有变更,只能重新打包发版,然后让用户更新版本或者卸载重装。
  4. 跨域问题,如果由当前网页跳转Universal Link打开APP,当前网页的域名和Universal Link 的域名必须 不能一致,否则不会跳转,只会在当前的WebView里面跳转。
  5. 由浏览器或其他app应用跳转进入我自己的APP时接收回调,要在AppDelegate.m/SceneDelegate.m中实现下面回调方法:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    // NSUserActivityTypeBrowsingWeb 由Universal Links唤醒的APP
    if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        return YES;
    }
    NSURL *jumpUrl = userActivity.webpageURL; // 这个URL就是你跳转的那个URL,下载页地址,想要传参数可以直接在URL后面拼接
    // TODO:在这里进行跳转具体页面的操作
    return YES;
}

四 、Universal Links 与 URL Scheme

另一种 外部唤起App 的方式是URL Scheme,但是URL Scheme有一些弊端。

  1. Universal Links 具有唯一性,比较安全。它是使用标准的HTTPS协议链接到你的web站点,所以一般不会被其它的APP所声明。而URL Scheme是由开发者自定义的,没有限制,任何App都可以用同一个名字,有些钓鱼App可以 设置知名的APP 的URL Scheme 来欺骗用户。

  2. URL Scheme可以通过canOpenURL判断用户是否安装App,但是只有安装了APP才能跳转,未安装则没有效果。而Universal Links 如果安装了就跳转APP,如果未安装就跳转网页展示你网站的内容,比较灵活。

  3. 使用scheme跳转系统会弹框提示,替换成UL链接后可以实现无缝跳转。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux | Shell】构建基础脚本 - 读书笔记

目录 一、创建第一个Shell脚本1.1 执行多个命令1.2 创建 shell 脚本1.2.1 指定使用的shell1.2.2 在脚本文件各行输入命令1.2.3 添加执行权限1.2.4 执行脚本 1.3 显示消息——echo命令 二、使用变量2.1 三四五 一、创建第一个Shell脚本 前面得文章介绍过一些基础的 Linux 命令了…

【InnoDB 存储引擎】5.4.5 The Slow Query Log(慢日志实验, 详细描述了与 MySQL 相关的慢日志方方面面)

文章目录 1 慢日志实验环境准备2 开始实验2.1 实验 1&#xff1a;超过查询时间相关慢日志并观察2.2 实验 2&#xff1a;不使用索引相关慢日志并观察2.3 实验 3&#xff1a;打印额外的慢日志信息2.4 实验 4&#xff1a;使用 mysqldumpslow 工具分析日志文件2.5 实验 5&#xff1…

【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块5

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【计算机组成与体系结构Ⅰ】实验5 CPU组成与机器指令执行实验

一、实验目的 1&#xff1a;将微程序控制器同执行部件&#xff08;整个数据通路&#xff09;联机&#xff0c;组成一台模型计算机。 2&#xff1a;用微程序控制器控制模型机数据通路。 3&#xff1a;通过CPU运行几条机器指令&#xff08;排除中断指令&#xff09;组成的简单…

MARLIN: Masked Autoencoder for facial video Representation LearnINg

题目MARLIN: Masked Autoencoder for facial video Representation LearnINg译题MARLIN&#xff1a;用于面部视频表示的 maked 自动编码器 LearnINg时间2023年期刊/会议CVPR 论文链接&#xff1a;MARLIN_MASKED_Autoencoder_for_Facial_Video_Representation_Learning MARLIN…

C++11右值引用(移动构造、完美转发等)

在讲解移动构造和完美转发之前&#xff0c;我们需要先了解什么是右值引用。 但在讲解右值引用之前&#xff0c;我们也得知道左值和右值分别是什么&#xff0c;有什么区别。 目录 左值与右值 左值与左值引用 右值与右值引用 引用和右值引用的区别 移动构造 移动赋值 插…

基于simulink处理监控视频以选择包含运动的帧(附源码)

一、前言 此示例演示如何处理监控视频以选择包含运动的帧。安全问题要求使用摄像机对重要位置进行持续监控。为了有效地记录、查看和存档这些海量数据&#xff0c;您可以减小视频帧大小或减少录制的视频帧总数。此示例说明了后一种方法。在其中&#xff0c;相机视野中的运动会…

1762_gcc编译c语言makefile自动生成工具的Perl实现

全部学习汇总&#xff1a; GreyZhang/g_makefile: Learn makefile from all kinds of tutorials on the web. Happy hacking and lets find an common way so we may dont need to touch makefile code any more! (github.com) 前阵子实现了一个CodeWarrior嵌入式开发环境的自动…

【Java从入门到大牛】数组详解

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Java从入门到大牛 &#x1f320; 首发时间&#xff1a;2023年7月9日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e…

Python + pymysql 之 MySQL 查询操作

在MySQL中构建一个测试表&#xff0c;如下&#xff1a; 查询单条数据 # -*- coding: UTF-8 -*- import pymysqldef mysql_query():"""MySQL查询:return:"""# 打开数据库连接db pymysql.connect(host"127.0.0.1",user"root"…

IDEA 配置 openjdk,jre

使用 idea 配置 zip 版本的 openjdk 和 jre&#xff0c;我使用的时 redhat 提供的 jdk 和 jre。 一、下载 idea、jdk 和 jre 红帽下载地址为&#xff1a; jdk 和 jre 安装地址根据个人配置&#xff0c;我的配置如下&#xff1a; 下划线的分别为我的 jdk 和 jre 保存路径 二…

简单学习UE5.2的PCG框架插件里的基础概念

目标 最近了解到5.2版本推出了实验性的功能PCG框架&#xff0c;以及用它做的范例 Electric Dreams。 本篇我简单学习它的一些基础概念&#xff0c;做一些记录。 0. 启用插件 此功能相关的类型都在PCG插件中&#xff0c;因此首先要确保启用了PCG插件&#xff1a; 1. PCGGr…

为什么进程地址空间中包括操作系统?

今天聊聊进程地址空间这点小事。 说到进程的地址空间&#xff0c;大家可能都知道这样一张图&#xff1a; 这张图就是Linux程序运行起来后所谓的进程地址空间&#xff0c;这里包括我们熟悉的代码区、数据区、以及堆区和栈区&#xff0c;今天我们不讲解这些区域&#xff0c;而是…

Vue生态及实践 - SSR(上)

目录 目标 理论 Rendering 你真的需要SSR亦或是同构吗&#xff1f; 同构实践 通用代码 同构第一步&#xff1a;避免单例 src/app.js src/store.js src/router.js 同构第二步&#xff1a;Server entry【服务端进入】&#xff1b;Client entry【客户端进入】 src/entry…

ESP32设备驱动-AS5600磁性旋转位置传感器

AS5600磁性旋转位置传感器 文章目录 AS5600磁性旋转位置传感器1、AS5600介绍2、硬件准备3、软件准备4、驱动实现1、AS5600介绍 AS5600 是一款可编程的 12 位高分辨率非接触式磁性旋转位置传感器。 AS5600可以作为磁性电位器或磁性编码器使用,具有出色的可靠性和耐用性。 与传…

网页版代码编辑器实现

接着前几天写的博客https://blog.csdn.net/woyebuzhidao321/article/details/131495855&#xff0c;提到了涉及vscode网页版工作区创建的api&#xff0c;这两天一时兴起&#xff0c;搞了一个网页版的代码编辑器&#xff0c;如果在2020年10月之前&#xff0c;实现一个网页版代码…

活动笔记 | 「企业人效提升路径」之数字化实践

6月27日&#xff0c;由人力资源智享会联合盖雅工场等机构主办的2023中国人力资源数字化论坛在北京顺利举办。盖雅工场高级解决方案顾问谷天毅先生发表了主题为 《企业人效提升路径之数字化实践》 的分享。 以下是分享内容&#xff0c;enjoy~ △ 盖雅工场高级解决方案顾问谷天…

httpx 返回都是乱码问题,非编码问题。

因为python 的requests 不能使用抓http2 的报文。所以看了一些httpx的使用。但是发现httpx 不能自动解压&#xff0c;text打印出来的都是乱码。一开始以为是编码格式的bug &#xff0c;但是使用chardet 确认了确实是utf-8.然后怀疑是压缩的问题。先去官网搜了一些文档 文档说会…

opencv4.7.0编译opencv-contrib-4.7.0以及CUDA

0、引言 最近工作中需要用到使用CUDA加速后的opencv进行传统算法的开发&#xff0c;在编程之前&#xff0c;需要先解决环境编译和lib库问题&#xff0c;本文就是记录自己编译opencv-4.7.0的全过程。 1、CUDA下载和安装 可参考我之前的博客WIN10安装配置TensorRT详解中的前几…

达尔文——生物医疗科学领域大模型

赛灵力官网 1. 生物医疗领域的挑战 1.1 复杂性 生物系统和生物过程非常复杂&#xff0c;包含大量的相互作用和调控机制&#xff0c;理解和解析这些复杂性是一项巨大的挑战。 举例来说&#xff0c;单单一个人类&#xff0c;体内的生物信息就非常复杂&#xff1a; 人类体内体内…