iOS Universal Link 结合第三方实现微信唤起app

一. 微信跳转app简介

  1. 能实现什么样的跳转? 由webView唤起app.
  • webView如果用safari打开, 将唤起app, 这是原生的功能
  • webView的按钮可以唤起app, 这是第三方的功能
  1. 为什么不能使用URL Scheme 实现app? 因为微信禁止.

一. Universal Link 基本使用

可参见这篇文章 <a href="http://www.jianshu.com/p/96649a73795b">iOS Universal Link(通用链接)</a>

三. 第三方网站: LinkedMe

此处我们利用第三方网站来实现

  1. linkedMe官网
  2. 技术支持QQ群: <em>209222314</em>

四. 集成步骤

  1. 自己注册得到LinkedME Key
  2. 此处我使用cocopods集成, 在Podfile中添加:
pod 'LinkedME-iOS-Deep-Linking-SDK_Pod_IDFA',:git=>"https://github.com/WFC-LinkedME/LinkedME-iOS-Deep-Linking-Demo.git"
  • 注: 文档中的pod地址不对, 上述地址是我询问 技术支持 得到.
  1. 配置URL Types:

    配置`URL Types`

  2. 配置 LinkedME Keyinfo.plist :

    配置 `LinkedME Key`.png

  • LinkedME Key 来自:
    `LinkedME Key`.png
  1. 配置Associated Domains:
    `Associated Domains.png
  • 注: 此处我配置了4值:
  • 1与2 是我们的后台正式与测试url
  • 3与4 是LinkedMe 要求的配置
  1. 配置LinkedMe 官网需要的信息: Bundle ID, Apple App Prefix, URI Scheme
  • 6.1 相关配置界面进入路径:


    路径.png
  • 6.2 6.2 配置上述三个值: Bundle ID, Apple App Prefix, URI Scheme

    Bundle ID`, `Apple App Prefix`, `URI Scheme`.png

  1. 集成代码:
  • 注: 需要JS端集成相关JS SDK, 几分钟即可集成完毕.

  • 7.1 在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 集成:

+ (void)yh_setupDeepLinkWithLaunchOptions:(NSDictionary *)launchOptions{
    ///deep link, 第三方linkedMe
    
    //初始化及实例
    LinkedME *linkedme = [LinkedME getInstance];
    
    //获取跳转参数
    [linkedme initSessionWithLaunchOptions:launchOptions automaticallyDisplayDeepLinkController:NO deepLinkHandler:^(NSDictionary* params, NSError* error) {
        if (!error) {
            //防止传递参数出错取不到数据,导致App崩溃这里一定要用try catch
            @try {
                
                YHLinkedMeM *linkedMeM = [YHLinkedMeM mj_objectWithKeyValues:params];
                
                if (linkedMeM.$control.link.length >0) {
                //if (title.length >0 && tag.length >0) {
                    //如果app需要登录或者注册后,才能打开详情页,这里可以先把值存起来,登录/注册完成后,再使用
                    
                    //自定义跳转, 下面是我自己的方法, 不是linkedMe的
                    [self yh_jumpTriggeredByDeepLinkWithLink:linkedMeM.$control.link];
                    
                }
            } @catch (NSException *exception) {
                
            } @finally {
            }
        } else {
            YHLog(@"LinkedME failed init: %@", error);
        }
    }];
    
}

注:

  • 1 )上面是我封装的一个方法.
    1. Deep Link唤起app, 无论此时app在后台还是前台, 都会调用这个回调, 所有相关逻辑要在这个回调中处理:
      处理回调.png
  • 7.2 必须实现的3个方法
  • 7.2.1 方法一
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    
    if ([[userActivity.webpageURL description] rangeOfString:@"lkme.cc"].location != NSNotFound) {
        return  [[LinkedME getInstance] continueUserActivity:userActivity];
        
    }else if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { //safari 跳转处理
        
        NSURL *webpageURL = userActivity.webpageURL;
        
        NSString *urlString = webpageURL.absoluteString;
        
        NSString *host = webpageURL.host;
        if ([host isEqualToString:@"app.cuiyuhe.com"] ||
            [host isEqualToString:@"apptest.cuiyuhe.com"]) {
            //进行我们需要的处理
            [YHDeepLinkTool yh_jumpTriggeredByDeepLinkWithLink:urlString];
        }
        
    }
    
    return YES;
}

  • 7.2.2 方法二
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{
    //判断是否是通过LinkedME的UrlScheme唤起App
    if ([[url description] rangeOfString:@"click_id"].location != NSNotFound) {
        return [[LinkedME getInstance] handleDeepLink:url];
    }
   
    return YES;
}
  • 7.2.3 方法三
//判断url 打开链接
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
   
    // 跳转自己控制器, scheme跳转
    NSString *kJumpPrefixStr = @"cuiyuhe://";
    if ([url.absoluteString hasPrefix:kJumpPrefixStr]) {
       
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            NSString *urlStr = url.absoluteString;
            
            NSString *subString = [urlStr substringFromIndex:kJumpPrefixStr.length];
            NSString *ecodeStr=[self URLDecodedString:subString];
            FMDetailsView *detailsView = [[FMDetailsView alloc]init];
            detailsView.hidesBottomBarWhenPushed = YES;
            detailsView.linkUrl = ecodeStr;
            [[FMTabBarViewController sharedManager].selectedViewController pushViewController:detailsView animated:YES];
           
           
        });
        return YES;
    }
   
   
    /********* linkedMe --------- begin ********/
    //判断是否是通过LinkedME的UrlScheme唤起App
    if ([[url description] rangeOfString:@"click_id"].location != NSNotFound) {
        return [[LinkedME getInstance] handleDeepLink:url];
    }
   
    /********* linkedMe --------- end *********/
   
    return YES;
}

四. 声明

我也只是linkedMe的一个用户, 且认为解决了我的需求, 没有任何推销之意 :)
类似的平台还有魔窗mLink等, 但是我没用过, 就不说啦.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,623评论 4 59
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 22,969评论 8 183
  • 万事有因果。 王宝强离婚,原因是老婆劈腿。 而老婆劈腿的原因,相当多网友认为“说一千道一万还不是因为宝宝丑”“丑是...
    蒋沛711022阅读 356评论 0 0
  • 喜欢摄影,喜欢旅游。但无奈本人还是学生党,还没攒下钱去买单反,却发现手机也能记录最美好的瞬间。 和...
    流氓都是兔阅读 397评论 3 8