一、前言

项目中时常有这种需求, 是通过链接跳转到应用内部,现在iOS主流的方案有两个

  • Schema: 常用在于一个应用跳转到另一个应用内部,属于应用间的跳转。当然ios9以下,网页可以通过schema://跳转到App内部。但是这种方式跳转比较生硬,在每次跳转的时候都会弹框询问。如果iPhone中如果没有安装则会直接弹出错误提示。
  • Universal Links(通用链接): 常用于https链接来打开APP(手机中已经安装此APP),或者跳转到https链接(手机中没有安装此APP)。Universal Links就是一个通用链接,iOS9以上的用户,可以通过点击这个链接无缝的重定向到一个app应用,而不需要通过safari打开跳转。如果用户没有安装这个app,则会在safari中打开这个链接指向的网页。

备注:
  * 关于URL Schemes更多了解,可参考传送门      * 关于Universal Links更多了解,可参考传送门

二,需求场景

(1)第三方应用集成了友盟分享到QQ和微信的功能

(2)第三方应用分享了一个web页面到微信或QQ

(3)打开分享的web页面,点击上面的某一个按钮

(4)如果用户安装了该应用,直接打开应用根据web地址中的参数跳转到对应的页面

(5)如果用户没有安装应用,直接跳转到appStore

三,需求实现方案

iOS9 之后提供的 Universal Links 功能

四,需求实现步骤

(1)创建一个json文件,名称必须为 apple-app-site-association,⚠️该文件不可带 .json 的后缀名

apple-app-site-association 文件必须放在https服务器的根目录下,例:https://kahui.huankaun.com 这个路径下 ⚠️一定是根目录,也就是说该文件必须是一级目录,供下载使用

*  apple-app-site-association 文件格式:

{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleId",
"paths": ["/deaplink","/wwdc/news/","*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}

  1)appID :
    appID 格式为 teamID.bundleId形式,譬如说我的teamIDxxxxxxxxxxxbundleIdcom.mytest.app
    那么我的appID就是:xxxxxxxxxxx.com.mytest.app。  
      teamID:打开苹果官网,点击Account,点击左边栏的 Membership,查找teamID 

  2) paths
    设定一个App的路径支持列表,只有这些指定的路径链接才会被App所处理。格式如下:

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]
  • 使用*配置,则整个网站都可以使用

  • 使用特定的URL,例如/wwdc/news/来指定某一个特殊的链接。

  • 在特定URL后面添加*,例如 /videos/wwdc/2015/*, 来指定网站的某一部分。如果你的网站是www.yohunl.com,你的path写的是”/support/*”,那么当用户点击www.yohunl.com/support/myDoucument,就可以进入你的app了,相反www.yohunl.com/other 就不会.

  • 除了使用*来匹配任意字符,你也可以使用 ?来匹配单个字符,你可以在路径当中结合这两个字符使用,例如 /foo/*/bar/201?/mypage

需要注意的是:
配置的paths路径,是区分大小写的

*  验证apple-app-site-association文件

         文件配置完成之后,将其上传到你的服务器根目录或者.well-known这个子目录下。

  • 确保使用https://yourdomain.com/apple-app-site-association这个链接可以访问到,yourdomain.com为你的服务器域名。
  • 也可以使用苹果的验证网站,验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:
  • 出现该提示为apple-app-site-association文件配置正确。
  • 出现404错误码提示,则为apple-app-site-association文件未上传成功,或者使用https://yourdomain.com/apple-app-site-association路径无法访问。

(2) 建立web网页和app应用之间的关联 -> app IDs配置 和 项目配置

app IDs 配置

进入开发者网站,找到你自己的bundleId,可以点击edit按钮,开启associate domains,如下图:

  
项目配置

在项目的Capablities中开启Associated domains,如下图:

 
 

注意domains可以添加多个,前缀必须为applinks:applinks:后为你的服务器的域名。

代码接收Universal Links唤醒

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    NSLog(@"userActivity : %@",userActivity.webpageURL.description);
return YES;
}

在appdelegate中实现上面这个方法,当使用Universal Links唤醒app时就执行这个方法。

(3)验证以上配置

快捷验证,在备忘录中输入https://yourdomain.com/apple-app-site-association,长按这个链接,出现下图提示则配置成功。

 当没有安装该应用时的处理方式是:上传该html文件到 kahui.huankaun.com 路径下,如下图:

<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>神机算万年历-跳转中...</title>
</head>
<body>
<script type="text/javascript">
setTimeout(function(){
window.location = "第三方在应用宝的下载链接"
},)//延迟3s,给手机调起已安装应用,如果不能调起就调用下载链接。
</script> </body>
</html>

备注:如果我们在手机上没有安装相应的应用,就可以通过Universal Links重定向进行跳转到下载也进行下载操作。因为我们在paths设置了路径限制,只要我们重定向的路径符合限制,就能先走本地是否安装程序,如果没有再跳转到相应下载页。

iOS 微信打开第三方应用(Universal Links 和 URL Schemes)的更多相关文章

  1. iOS微信实现第三方登录的方法

    这篇文章主要介绍了iOS微信第三方登录实现的全过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2 ...

  2. iOS微信里打开app,Universal Links

    这两天在弄分享,从第三方应用或者浏览器打开自己app的东西 传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Schem ...

  3. iOS 9 通用链接(Universal Links)

    什么是Universal Links? 在iOS9之前,对于从各种从浏览器.Safari中唤醒APP的需求,我们通常只能使用scheme.但是这种方式需要提前判断系统中是否安装了能够响应此scheme ...

  4. iOS微信打开App

    传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Scheme方式微信内置的浏览器都是封锁了所有它投资的公司之外的,只有 ...

  5. iOS 9 的新功能 universal links

    什么是 universal links: (通用链接) 一种能够方便的通过传统 HTTP 链接来启动 APP, 使用相同的网址打开web page和 APP的方式. 第一点,链接打开网址 顾名思义 第 ...

  6. ios微信打开网页键盘弹起后页面上滑,导致弹框里的按钮响应区域错位

    input失去焦点,页面被顶起没有还原,所以就有以下的方法来处理 $("input").blur(function(){   setTimeout(() => {    co ...

  7. iOS Universal Links(通用链接)

    公司的运维,发现最近大量的请求 /.well-known/apple-app-site-association这个文件,造成了大量的404,可是这是谁请求的呢? 其实是苹果从iOS9.3开始更改了通用 ...

  8. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  9. 解决ios下的微信打开的页面背景音乐无法自动播放

    后面的项目发现,还有两个坑,需要注意下: ·本文的解决方案的核心是利用了 微信/易信 在ready的时候会有个 WeixinJSBridgeReady/YixinJSBridgeReady事件,通过监 ...

随机推荐

  1. <转>SQL Server CROSS APPLY and OUTER APPLY

    Problem SQL Server 2005 introduced the APPLY operator, which is like a join clause and it allows joi ...

  2. 【C++】C++中的迭代器

    目录结构: contents structure [-] 迭代器运算符 迭代器类型 begin和end运算符 迭代器的算术运算 可以使用下标来访问string对象或vector对象的元素,还有另外一种 ...

  3. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  4. 【原创 Hadoop&Spark 动手实践 9】Spark SQL 程序设计基础与动手实践(上)

    [原创 Hadoop&Spark 动手实践 9]SparkSQL程序设计基础与动手实践(上) 目标: 1. 理解Spark SQL最基础的原理 2. 可以使用Spark SQL完成一些简单的数 ...

  5. Android Studio打包程序时出现transformClassesWithDexForRelease错误

    百度半天.没找到直接原因..国外网站上有写这个错误的..国内的真心没找到..英语水平有太低..实在没看懂怎么搞.. 后来发现clean项目的时候是提示如下错误: Information:Gradle ...

  6. XMind8 破解激活教程(最详细,一定是有效的!!!)

    下载安装包 首先去xmind国外官网下载对应操作系统的安装包,国内官网的那个是有残缺的,不支持破解. 点击链接进行下载安装包:https://pan.baidu.com/s/1VITXSEQvwGDi ...

  7. #pragma multi_compile_fwdbase会增加很多个shader variants

    #pragma multi_compile_fwdbase是unity内置的用于前向渲染的关键字快捷方式,它包含了前向渲染光照计算需要的大多数关键字,因此会被shader带来很多的变体. 下面这个简单 ...

  8. libGDX开发环境搭建-Android Studio 最新版

    http://blog.csdn.net/renwuqiangg/article/details/53088720 —————————————————————————————————————————— ...

  9. kotlin语法使用笔记

    kotlin中文文档:http://www.kotlindoc.cn/ClassesAndObjects/Classes-and-Inheritance.html 1. 声明类的构造方法 例如继承Fr ...

  10. odoo:开源 ERP/CRM 入门与实践 -- 上海嘉冰信息技术公司提供咨询服务

    odoo:开源 ERP/CRM 入门与实践 看了这张图,或许你对odoo有了一些兴趣. 这次Chat就是和大家一起交流开源ERP/CRM系统:odoo 对以下读者有帮助:研发.产品.项目.市场.服务. ...