iOS点击短信中的链接跳转到App

现在有这样一个需求:用户点击短信上的链接跳转到我们的App中或者App中的指定页面。

 

可行的方案大概有三种:

一、直接使用URL Scheme。(优点:十分简单,在plist文件中配置一个scheme,点击短信中的scheme或者将scheme输入到浏览器中就可以直接跳到App中。 缺点:当手机上没有安装App时,短信中点击scheme会没有反应,浏览器中会访问失败。而且在微信和QQ中这种方式是被禁用的)。

二、使用iOS9之后的新特性,通用链接(Universal Links)。

三、让后台人员写一个可以访问的网页,点击短信中的链接,跳转到网页,在网页中判断是iOS端还是安卓端,然后自动跳转对应的scheme,如果手机上安装了App,则直接跳到App,如果没有安装App,则停留在当前网页,在网页上有一个去下载的按钮,点击按钮可以去下载App。

 

接下来就细说一下三种方案的实现过程:

方案一、直接使用URL Scheme。

直接添加一个scheme,如下图中的两种方法都可以。

在plist文件中添加。

 

按照上边的任意一种方法,就算添加scheme成功了。

在Safari浏览器中输入 bbb://com.aa ,如果手机上安装了App,就会提示跳转到该App,如果没有安装,就会提示失败。在短信和记事本中输入 bbb://com.aa ,然后点击,如果安装了App就会进行跳转,没安装的话点击没有效果。

 

如果想解析对应的内容跳转到对应的界面只需要在Appdelegate的-(BOOL)application: openURL: options:的方法里判断传入进来的url链接后面的参数,进行不同的操作即可,如下

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    
    NSString *urlStr = url.absoluteString;
    if ([urlStr hasPrefix:@"bbb"]) {
        //获取参数
        NSArray *paramerArray = [urlStr componentsSeparatedByString:@"/"];
        NSLog(@"paramerArray- %@",paramerArray);
    }
    return YES;
}

 

 

方案二、iOS9之后的新特性,通用链接(Universal Links)

 

 

 

 

什么是通用链接(Universal Link)?

为了更好的用户体验,苹果针对iOS9或者以上系统,推出通用链接(Universal Link):一种能够方便的通过传统 HTTP 链接启动应用程序, 使用相同的网址打开网站和App。通过一个通用的链接便可实现,当移动设备里面已经有了某个应用,在点击了这个链接后便可实现深度链接而直接进入应用内的某个特定页面;如果手机内并没有该应用,可打开设定的网址(例如应用的落地下载页面)。

具体可以查看官方的说明文档

 

 

怎么使用Universal Links?

 

1.先决条件:你必须有一个域名,且这个域名需要支持https。

2.需要在开发者中心做配置:找到对应的App ID,在Application Services列表里有Associated Domains一条,把它变为Enabled就可以了。

配置App ID支持Associated Domains

3.打开工程配置中的Associated Domains,在其中的Domains中填入你想支持的域名,必须以applinks:为前缀。

配置项目中的Associated Domains

4.创建一个内容为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.yourapp’s bundle identifier。如上面的 9JA89QQLNQ就是teamId。登陆开发者中心,在Account - Membership里面可以找到Team ID。

paths:设定你的app支持的路径列表,只有这些指定的路径的链接,才能被app所处理。星号的写法代表了可识别域名下所有链接。

5.上传该文件到你的域名所对应的根目录或者.well-known目录下,这是为了苹果能获取到你上传的文件。上传完后,自己先访问一下,看看是否能够获取到,当你在浏览器中输入这个文件链接后,应该是直接下载apple-app-site-association文件。

验证

在iOS设备的短信中点击链接,就会直接跳转到你的app了。

或是你将要测试的链接在Safari中打开,在出现的网页上方下滑,可以看到有在”XX”应用中打开

出现菜单

在微信的网页浏览器中也是可以的,虽然微信屏蔽了所有的scheme方式跳转到其它app,但是Universal Links是由系统直接处理的,微信屏蔽不了,这也就实现了从微信跳转到我们的app。

苹果为了方便开发者,提供了一个网页来验证我们编写的这个apple-app-site-association是否合法有效,进入验证网址进行验证:

验证链接

进入app后的处理

现在用户点击某个链接,直接可以进我们的app了,但是我们的目的是要能够获取到用户进来的链接,根据链接来展示给用户相应的内容。
我们需要在工程里的 AppDelegate 里实现方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb])
    {
        NSURL *url = userActivity.webpageURL;
        if (url是我们希望处理的)
        {
            //进行我们的处理
        }
        else
        {
            [[UIApplication sharedApplication] openURL:url];
        }
    }

    return YES;
}

另外,这里有一篇使用通用链接需要注意的事项:点击打开链接

方案三让后台人员写一个可以访问的网页,点击短信中的链接,跳转到该网页,在网页中判断是iOS端还是安卓端,然后自动跳转对应的scheme,如果手机上安装了App,则直接跳到App,如果没有安装App,则停留在当前网页,在网页上有一个去下载的按钮,点击按钮可以去AppStore中下载App。

如果需要跳到指定页面,需要在发送短信时让后台人员将参数拼接在链接后边,之后拼接到scheme后面带到App中,然后我们在AppDelegate的-(BOOL)application: openURL和-(BOOL)application: openURL: options:的方法里接收传入进来的url链接后面的参数,之后进行指定页面的跳转就可以了。

好了,就总结到这里吧,希望对大家有所帮助。

 

 

 

 

 

 

 

 

 

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值