iOS 跳转App的二三事

前言

在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 Links 。 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, 可以自动判断是否已安装应用,并展示出来。

<meta"apple-itunes-app"content"app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL"

复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值