博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 跳转App的二三事
阅读量:6303 次
发布时间:2019-06-22

本文共 2448 字,大约阅读时间需要 8 分钟。

前言

在iOS平台上,经常有这样的需求,当用户在操作的时候需要唤醒或者说跳转到另外一个App中进行操作。 这其中的类型又分为:

  1. App -> App
  2. 浏览器web页面 -> App

第一种类型十分常见,比如你在某宝上买东西,支付的时候跳转到支付宝进行支付,然后再回来。 本文想要着重说明的是第二种类型。 这个业务场景往往是公司官网或者是宣传页面,用户操作如参加活动之类的,然后跳转至App,如果未安装App则跳转至App Store。

iOS 9之前的做法

在App中定义一个URLScheme,当web页面跳转至定义好的URLScheme时,手机会自动唤醒App。此方法的详细操作很多朋友已经分享过,有兴趣的可以上网查找。 此方法简单也方便,但iOS 9之后,Safari不再支持通过js,iframe等来触发scheme跳转,并且在唤醒App之前会有一个Aler提示用户确认操作,以往通过超时机制跳转至下载页面的方法同样也失去了效果。同时安卓端由于生态比较混乱,支持的机制也不太完善。 不推荐此方法。

Universal Links

iOS 9 之后,Apple推出了 。 Universal Link较URLScheme更优。如:避免了自定义的Scheme与他人重复的尴尬情况,web端无需知道手机端是否安装了App,避免无法打开的情况,同样适用于App与App之间的唤醒。

Universal Link的流程如图:

在项目中开启Universal Link

首先,需要在项目中开启Universal Link,并在其中添加一个目标地址。注意,目标地址应该以applinks:为开头。

注意:这个地址必须支持Https,并且这个地址不能与跳转之前所在页面在同一个域之下。如:我在 a.com下展示活动页面,此时用户点击操作以后,需要抛出我们事先设置好的此目标地址,活动页面与目标地址不要在同一个域之下。

设置 apple-app-site-association

我们需要准备一个json文件,并将其命名为apple-app-site-association,不要在文件后面拼上.json的后缀,必须严格按照此名字命名。 apple-app-site-association 文件的格式为:

{    "applinks": {        "apps": [],        "details": [            {                "appID": "9JA89QQLNQ.com.apple.wwdc",                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]            },            {                "appID": "ABCD1234.com.apple.wwdc",                "paths": [ "*" ]            }        ]    }}复制代码

appID : 你的TeamID.App的BundleID

paths:定义你的路径,支持通配符 *。如你的目标页面是b.com,如上json的写法,当用户点击b.com/wwdc/news/时将会触发唤醒App。

配置完 apple-app-site-association 文件之后,将此json文件上传到目标地址。如: https://b.com/apple-app-site-association or https://b.com/.well-known/apple-app-site-association

此时你可以通过访问Aapple准备的 来尝试验证你的 apple-app-site-association 是否有效。

apple-app-site-association 文件的作用是,当iOS第一次启动App时,会从设置好的目标网站中 如:https://b.com/apple-app-site-association 事先下载好json文件,并且放置在系统层级管理。

AppDelegate中处理

从外部唤醒App,在AppDelegate中处理跳转

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler {    // NSUserActivityTypeBrowsingWeb 由Universal Links唤醒的APP    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {        NSURL *webpageURL = userActivity.webpageURL;        NSString *host = webpageURL.host;        if ([host isEqualToString:@"yourURL"]) {                    } else {            [[UIApplication sharedApplication]openURL:webpageURL];        }    }    return YES;}复制代码

one more thing

事实上Apple提供了一种智能广告条的方式,但只在Safari上可用。并且指向的是App Store。 在页面Head中增加如下meta, 可以自动判断是否已安装应用,并展示出来。

 

转载地址:http://omfxa.baihongyu.com/

你可能感兴趣的文章
(算法)交错的字符串
查看>>
hdu 5471(状压DP or 容斥)
查看>>
oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver这两个驱动的区别
查看>>
NSQ部署
查看>>
git常用命令记录
查看>>
IBM发布新一代云计算工具包MobileFirst Foundation
查看>>
唯品会HDFS性能挑战和优化实践
查看>>
大规模学习该如何权衡得失?解读NeurIPS 2018时间检验奖获奖论文
查看>>
大厂前端高频面试问题与答案精选
查看>>
我们用5分钟写了一个跨多端项目
查看>>
Visual Studio 15.4发布,新增多平台支持
查看>>
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
Swift 5将强制执行内存独占访问
查看>>
中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>