iOS集成MobLink,实现H5激活原生APP指定页面

我们在浏览器、Safari中打开某个页面时,有时会有“打开APP”的这个功能,也就是说在web环境下调起该页面对应的APP,并进入APP中的这个页面。在iOS9之前,要实现这个唤醒APP的功能,通常只能使用scheme。而这种方式需要提前判断系统中是否安装了能够响应此scheme的APP,并且这种方式在微信环境中是没法响应的。iOS9之后,推出了Universal Link, 可以通过传统的HTTP链接来启动APP,这种方式即使在微信环境中也可以实现激活原生APP。

项目中通过MobLink三方集成了H5激活原生APP指定页面的功能。 本文主要介绍一下MobLink的集成:

一、AppKey的获取及相关信息的设置

在mob平台申请相应的AppKey,并在mob后台设置APP的相关信息。下载MobLink SDK

二、项目中的准备工作

1、将MobLink SDK导入项目中,同时导入系统库:libsqlite3、libz1.2.5、libstdc++
2、在项目中配置URL Scheme,URL Scheme要和Mob后台中设置的URL Scheme保持一致
3、将mob后台中的Universal Link配置到项目的Associated Domains中

开启此项功能,将Universal Link配置到此处

4、 在Info.plist中添加“MOBAppKey”和“MOBAppSecret”

三、代码部分的实现。

1、在需要打开的页面配置对应路径

//定义的路径
static NSString *const PMArticleMobLinkPath = @"/newsDetail";
+ (NSString *)MLSDKPath
{
    return NewsDetailMobLinkPath;
}

2、实现带有场景参数的初始化方法,并根据场景参数还原该控制器

- (instancetype)initWithMobLinkScene:(MLSDKScene *)scene
{
    if (self = [super init])
    {
        self.scene = scene;
    }
return self;

3、在分享的方法中获取mobId

-(void)shareAction{
    // 根据路径、来源以及自定义参数构造scene
    MLSDKScene *scene = [[MLSDKScene alloc] initWithMLSDKPath:NewsDetailMobLinkPath source:@"NewsDetailViewController" params:nil];
    __weak typeof(self) weakSelf = self;
    [MobLink getMobId:scene result:^(NSString *mobId) {
       
       weakSelf.mobid = mobId;
         
    }];

 [ShareSDKMethod shareToPlatformsWithNetImage:_imageURL 
                                   LocalImage:localImg
                                 ShareContent:_shareContent
      ShareLink:_shareLink 
     ShareTitle:_shareTitle];
}

4、MobLink在运行的时候会通过相应的delegate方法实现相应页面的还原跳转,MobLink的delegate方法不是必须实现的,但是要实现更多的自定义操作的话则需要通过这些delegate方法。

在APPdelegate中签代理IMLSDKRestoreDelegate,设置MobLink代理
[MobLink setDelegate:self];

实现相关的代理方法IMLSDKWillRestoreScene,根据回调的scene,判断要打开的页面

//网页打开app时根据路径打开相应的页面

- (void) IMLSDKWillRestoreScene:(MLSDKScene *)scene Restore:(void (^)(BOOL, RestoreStyle))restoreHandler
{

    NSLog(@"Will Restore Scene - Path:%@",scene.path);
     if ([scene.path isEqualToString:NewsDetailMobLinkPath]) {
        
            //新闻详情
 
         NewsDetailViewController *detailVC=[ NewsDetailViewController new];
           [detailVC setHidesBottomBarWhenPushed:YES];
           detailVC.newsID=[scene.params[@"id"] integerValue];
          [self.tabController.viewControllers[0] pushViewController:detailVC animated:NO];
       }
    } else{
        
        restoreHandler(YES, MLDefault);
    }
}

四、遇到的问题

在处理这部分时花费了不少时间,主要碰到的问题有两个,一是路径的配置,二是页面的打开方式。

1、 路径的配置。
一开始的时候,客户端和web配置的相同的路径,但是始终都是只能打开原生app,而不能跳转到具体的页面,知道是路径配置有问题,换了好些配置方式,均不可跳转,后来在打印跳转路径时发现,在web配置的路径,在客户端打印时路径前面会多了“/”,比如web页面配置的“newsDetail”,客户端也配置的“newsDetail”,路径看起来是一致的,但实际上客户端打印路径的时候是“/newsDetail”,也就是如果配置的路径前面未加“/”,sdk会自动为路径加上”/”,这时客户端必须把路径配置为“/newsDetail”,这样才能使得路径统一,跳转到对应的页面。

2、 页面的打开方式。
SDK处理页面的打开方式是: 如果APP中带有导航控制器(UINavigationController),则恢复时MobLink会采用Push的方式,但是如果APP中没有导航控制器,则恢复时MobLink会采用Modal的方式。由于APP的详情页中没有使用系统自带的导航栏,所以打开页面时MobLink会采用modal的方式打开,而在app中正常进入该页面时使用的是push的方式打开的,要想在web页面激活原生APP指定页面时也用push的方式呈现的话,需要客户端做相应处理,重写SDK中的代理方法
- (void) IMLSDKWillRestoreScene:(MLSDKScene *)scene Restore:(void (^)(BOOL, RestoreStyle))restoreHandler;在该方法中自行处理页面的打开方式。

五、总结

激活指定页面的整个原理和push有点类似。客户端和web双方定义好相应的落地页路径的规则,当点击web页面中的”打开APP”按钮时,MobLink充当客户端和web页面之间的媒介,将要去往的路径和页面所需的ID告诉客户端,客户端根据路径和ID,跳转到对应的页面。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,566评论 25 707
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,358评论 6 343
  • 在刷微博的时候,看到了一条消息:南昌某男子携小三逼死原配。当然类似于这样小三插足的婚姻,社会上可谓屡见不鲜...
    子烟灵阅读 997评论 0 0
  • 生活中,我喜欢观察,喜欢刨根问底。 发生我身边的几个现象,一直不解,直到最近才理清楚缘由。 现象一:十来岁的孩子,...
    江瑞阅读 711评论 0 2