美文网首页
2018-09-27

2018-09-27

作者: 南调江南 | 来源:发表于2018-09-27 13:54 被阅读15次

    1、需求说明

    应用间跳转:通过一个AppA内的某一个操作打开另外一个一个AppB,AppB若下载则直接跳转过去,若未下载则跳到应用商店让用户下载;

    网页跳转App:手机打开网页,通过网页上的某一个操作打开App,若已安装App则跳转App,若未安装App则跳到应用商店让用户下载;

    2、使用方法

    应用间跳转可以通过URL Scheme来实现,将参数配置在url scheme后面,唤醒app再进行页面跳转逻辑;

    需要特别说明的微信和QQ分享内容url scheme和Universal Links方式统统被禁用了,除非你是腾讯系的加入他们的白名单;

    网页跳转App可以通过meta 标签来实现;

    下面我们对URL Scheme、meta 标签、Universal Links一一进行说明.

    方法一: URL Scheme

    URL Scheme是什么

    由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。

    URL Scheme有什么作用

    那么app之间的跳转有什么作用呢?我们所使用的每一个app就相当于一个功能,app的跳转可以使得每个app就像一个功能组件一样,帮助我们完成需要做的事情,比如三方支付,搜索,导航,分享等等

    URL Scheme怎么使用

    要跳转到别人的app,就要知道别人的app的跳转协议是什么,需要传入什么参数,我们常见的跳转协议有下面这些:

    1.打开email
    [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://info@icloud.com"]]
    2.打开电话
    [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"tel://18688886666"]];
    3.打开SMS
    [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"sms:18688886666"]];
    

    所以,如果我们希望别人打开我们的app,只要在plist文件中配置一下你的跳转协议即可,如下图所示:


    跳转协议配置.jpg

    “emp601602://”就是我的跳转协议了,编译一下app,在safari中输入“emp601602:// ”就可以跳转到我的app中。

    但是在Xcode 9 下,新建的工程,在plist文件中注册URL Schemes,是无法从safari启动app的。
    需要在如下位置注册URL Schemes,


    添加URL Schemes.jpg

    “emp601602:// ”只能让用户跳转到我们的app,之后的处理是在appDelegate的代理中,代理方法如下:

    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation
    

    在这个方法里,可以获取到触发这个方法的 URL,可以通过对这个 URL 进行判断,例如根据不同的 Host,不同的 Query String 来执行不同的动作。

    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation
    {
        NSLog(@"%@", [url absoluteString]);
        
        // 在 host 等于 item.taobao.com 时,说明一个宝贝详情的 url,
        // 那么就使用本地的 TBItemDetailViewController 来显示
        if ([[url host] isEqualToString:@"item.taobao.com"]) {
            
            // 这里只是简单地假设 url 形式为 taobao://item.taobao.com/item.htm?id=12345678
            // 先获取要查看的宝贝详情的 itemId
            NSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3];
            
            // 使用本地 ViewController 来显示淘宝商品详情
            TBItemDetailViewController *controller = [[TBItemDetailViewController alloc] initWithItemId:itemId];
            [self.navigationController pushViewController:controller animated:YES];
        }
    }
    

    在你的动作执行完成了之后,有可能时需要返回到原有app的,这样就需要你的app跳转协议的url里面应该能传入调用者app的跳转协议,这样用户跳转到你的app完成动作后就能跳转回去了。

    方法二 :meta标签

    现需要添加URL Scheme为 WideSchooliphoneApp,同时添加已上线的app-id以便于跳转AppStore

    <!DOCTYPE html>  
    <html>  
    <head>  
        <title>IOS 通过浏览器打开App(小阔学堂)</title>  
        <meta charset="UTF-8" name="apple-itunes-app" content="app-id=xxxxxxx, affiliate-data=myAffiliateData, app-argument=WideSchooliphoneApp://">     
    </head>  
    <body>  
        <div class="back">  
        <p>  
            <font size="20px">  
            实时互动<br>  
            直播课堂<br>  
            <a href="WideSchooliphoneApp://courseId=1234" >打开小阔学堂PP</a><br>  
            大数据分析<br>  
            </font>  
        </p>  
        </div>  
    </body>  
    </html>
    

    点击页面上的打开小阔学堂


    网页显示.png

    方法三 : Universal Links

    什么是Universal Links

    Universal Links就是一个通用链接,iOS9以上的用户,可以通过点击这个链接无缝的重定向到一个app应用,而不需要通过safari打开跳转。
    如果用户没有安装这个app,则会在safari中打开这个链接指向的网页。

    如何支持Universal Links

    按照苹果官方文档来说,支持通用链接非常简单哟,只需要三步:
    1.创建一个名字叫做apple-app-site-association,包含固定格式的json文件
    2.将这个文件上传到你的服务器,可以将这个文件放到服务器的根目录下,也可以放到.well-known这个子目录下。
    3.配置app,然后在app里面添加代理方法
    如果已经配置过Universal Links,那么在用户第一次安装app时,苹果会发送一个请求,请求你服务器上的apple-app-site-association文件。

    请求apple-app-site-association文件成功之后,用户就可以使用Universal Links唤醒app了。
    

    详细的配置流程如下

    (1) 关于apple-app-site-association文件的配置
    "applinks": {
            "apps": [],
            "details": [
                {
                    "appID": "C9ANJ7EAW8.com.codyy.iWideSchooliphone",
                    "paths": ["/h5/course.html*"]
                }
            ]
        }
    }
    

    创建一个包含上述格式的json文件,文件名字必须为apple-app-site-association,不能带后缀名,有的电脑设置的隐藏后缀名,这点需要注意。

    appID

    appID 的 格式为 teamID.bundleId形式。

    如何获取teamID

    登录开发者网站 ,找到Membership选项卡。

    1159656-469273e6ee19a927.png
    譬如说我的teamID是xxxxxxxxxxx,bundleId是com.mytest.app
    那么我的appID就是:xxxxxxxxxxx.com.mytest.app
    path路径

    paths配置,实际上就是限制哪些路径可以唤醒app,哪些路径不能唤醒app。格式如下:

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

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

    在特定URL后面添加,例如 /videos/wwdc/2015/, 来指定网站的某一部分

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

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

    验证apple-app-site-association文件
    文件配置完成之后,将其上传到你的服务器根目录或者`.well-known`这个子目录下。
    
    • 确保使用https://yourdomain.com/apple-app-site-association这个链接可以访问到,yourdomain.com为你的服务器域名。
    • 也可以使用苹果的验证网站,验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:
    WX20180927-133604.png
    (2) 建立web网页和app应用之间的关联 -> app IDs 配置 和 项目配置
    app IDs 配置

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

    associated domains.png
    项目配置:

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


    appLinks.png

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

    代码接收Universal Links唤醒

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

    -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    
        NSLog(@"userActivity : %@",userActivity.webpageURL.description);
        return YES;
    }
    
    (3)验证以上配置
    快捷验证,在备忘录中输入https://yourdomain.com/apple-app-site-association,长按这个链接,出现下图提示则配置成功
    
    IMG_0100.png

    目前知晓的就是以上三种方法,其中的坑还需要一个个踩踩.
    参考文章:
    iOS9 Universal Links踩坑之旅,移动应用之deeplink唤醒app

    相关文章

      网友评论

          本文标题:2018-09-27

          本文链接:https://www.haomeiwen.com/subject/ysqeoftx.html