• iOS端如何实现MobLink的场景还原功能


    下载SDK

    1.登录官网2.点击这里 下载SDK勾选Moblink,点击下载
    图片

    导入SDK

    1.将整个SDK文件,里面MobLinkPro.framework,MOBFoundation.framework拖到项目中,如下图:
    图片

    勾选如下3项
    图片

    添加依赖库
    图片

    图片
    选择项目Target - Build Phases - Link Binary With Libraries,然后选择“+”进行添加系统库:
    libsqlite3
    libz1.2.5
    libc++

    Mob后台与项目配置

    (1)如下,点击进去自己注册的应用,会看到MobLink下面的基础配置项,如下图:
    图片

    Universal Link (必填,我们已生成可以直接用我们生成的):强烈建议使用Mob自动生成的Universal Link。iOS 9.0及以上使用Universal Link能优化场景恢复过程,提供更好的用户体验。选择并使用我们帮您生成的Universal Link并正确配置到您的项目中,将为您节省大量工作和时间。项目里配置如下:
    图片

    Team ID (必填):
    开发团队的ID,可在苹果开发者后台查看:
    图片

    Bundle ID (必填):
    项目唯一标识。请务必与项目中保持一致。可见于项目Info.plist文件的Bundle identifierURL Scheme (必填):在后台填写格式如:XXX:// (前面任意,后面必须要带://),请务必与项目中的配置保持一致,否则可能会导致无法跳转应用,项目里配置不带://,如下图:
    图片

    下载/引导地址 (必填):
    应用在App Store的下载地址,或者是其他第三方托管地址,没有安装app会跳转到这里来下载app

    App Store下载地址 (选填):专业版有效,经典版无效,在这里配置了的话,会略过我们的下载引导界面,直接跳App Store下载

    app应用宝下载链接 :安卓需要,iOS不需要填写有效时间 :这个时间是点开链接后开始计时的,超过这个时候后,点击"打开app"无法成功场景恢复,建议设置为60分钟,测试阶段可自行修改以查看效果,设置为0时不进行场景恢复。

    (2)路由配置(必须)
    图片

    渠道标识:填写还原路径,如"/demo/a","/demo/b“等,这个填写的值需要与前端JS里传的path的值一致;

    iOS页面名称:填写跳转到app需要恢复的控制器的名称,如果不填写无法走客户端的场景还原的回调获取参数等

    (3)配置ATS

    1.在项目的info.plist中添加 App Transport Security Settings,类型为字典类型

    2.给它添加一个Key:Allow Arbitrary Loads,类型为Boolean类型,值为YES;
    图片

    初始化SDK

    在项目中的info.plist文件中添加键值对,键分别为 MOBAppKey 和 MOBAppSecret ,值为在之前在MobTech官网开发者后台申请的appkey和appSecret(注意:配置后需要保存好,看下项目Info选项里是否存在 )
    图片

    场景接口调用

    在需要恢复的控制器中实现UIViewController+MLSDKRestore的方法
    例如在MLDNewsDetailTableViewController.m是我需要恢复的控制器,在里面添加

    #import 
    #import 
    @property (nonatomic, strong) MLSDKScene *scene;
    //实现带有场景参数的初始化方法,并根据场景参数还原该控制器:
    -(instancetype)initWithMobLinkScene:(MLSDKScene *)scene
    {
        if (self = [super init]) {
            self.scene = scene;
        }
        return self;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    获取MobId
    将其用于分享。在场景数据还原时MobLink会根据MobId还原出场景数据,并回调给用户进行特定的操作
    (**注意:**MobId不是必须要用的,比如使用的场景是从网页跳转到App里的时候所有参数完全来源于网页上的时候,这时是不需要获取的MobId的,只需要在前端网页上js初始化的时候写上必要的参数就可以了。这个MobId适用于一般从App分享链接出去的时候有些参数是在App内指定的,比如分享者的id等等,此时就需要通过这个MobId来携带着客户端的参数到网页上转悠一圈,然后从网页跳转回App的时候又返回给App这样。)

    - (void)getMobId
    {
        // 构造自定义参数(可选)
        NSMutableDictionary *customParams = [NSMutableDictionary dictionary];
        customParams[@"key1"] = @"value1";
        customParams[@"key2"] = @"value2";
        // 根据路径、来源以及自定义参数构造scene(3.0.0以下版本)
        //MLSDKScene *scene = [[MLSDKScene alloc] initWithMLSDKPath:@"控制器对应的路径" source:nil params:customParams];
        // 根据路径、自定义参数构造scene (3.0.0以上版本,推荐)
        MLSDKScene *scene = [MLSDKScene sceneForPath:@"已在Mob后台配置的需要还原的控制器对应的路径" params:customParams];
    
        // 请求MobId
        __weak typeof(self) weakSelf = self;
       [MobLink getMobId:scene result:^(NSString *mobId, NSString *domain, NSError *error) {
            weakSelf.mobid = mobId;
            NSString *msg = mobId == nil ? @"获取Mobid失败" : @"获取Mobid成功";
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
        }];
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    参数说明

    • path 本次生成的mobid所对应的控制器唯一路径,即在Mob后台配置的需要还原的控制器对应的渠道标识。在场景还原时(即客户端还原网页内容)会返回path对应的类名或者根据path寻找匹配的控制器进行还原
    • source 来源标识,可用于在场景还原时辨别来源,例如:传入一个当前控制器名称。(3.0.0版本后,废弃)
    • params 字段类型,此时传入的字典数据,在场景还原时能够重新得到,例如:传入一些回复控制器时需要的参数

    回调值说明

    • mobid 生成的mobid可用于拼接到需要进行推广的链接后 例如:http://www.abc.com/?mobid=123456 注意:该网站页面必须集成了JS模块的代码(下文将说明),方可实现网页-应用无缝接合。
    • domain domain拼接mobid使用,无网页跳转方式(domain其实就是后台生成的Universal Link)。例如:https://7ne9.t4m.cn/NBjqIj (这种方式目前因为兼容性问题,暂不维护,建议不要用)

    场景还原
    (1)设置代理MobLink在运行的时候会通过delegate将整个运作过程呈现出来,所有的delegate方法都不是必须实现的,但这些delegate能够帮助您实现更多自定义的操作。设定delegate对象的方法如下图:

    在app启动的didFinishLaunchingWithOptions方法中增加

    #import 
    #import 
    #import @interface AppDelegate ()
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
         // 设置MobLink代理
         [MobLink setDelegate:self]; //必须添加代理
    
         return YES;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (2)实现场景还原回调(此回调里可获取到对应参数,可以自行获取参数做处理)

    - (void) IMLSDKWillRestoreScene:(MLSDKScene *)scene Restore:(void (^)(BOOL, RestoreStyle))restoreHandler
    {
        NSLog(@"path---%@",scene.path);
        NSLog(@"rawURL---%@",scene.rawURL);
        NSLog(@"params---%@",scene.params);
        NSLog(@"mobid---%@",scene.mobid);
    
        restoreHandler(YES, Default);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Web集成

    在开发者后台找到MobLink的页面配置 栏,在 引用JS文件 选项卡中,点击 一键复制 将JS代码复制到您自己写的前端页面中,加到script中执行即可
    图片
    其中path 的值需与后台 路由配置渠道标识 填写一致params可传自己自定义参数以上集成好,即可完成场景还原整个流程。

  • 相关阅读:
    FreeRTOS个人笔记-内存管理
    【acwing总结】归并排序模板
    MALUNet:一种多关注,轻量级的皮肤病变分割UNet
    防火墙ensp实验
    微信小程序可拖拽视频播放案例
    【快速学习系列】Mybatis缓存和使用SpringBoot开启MyBatis缓存+ehcache
    【MM小贴士】副产品 工单核算
    敏捷BI到底与传统BI有何不同?
    阿里云Elasticsearch搜索
    TI Sitara系列AM64x开发板(双核ARM Cortex-A53)软硬件规格书
  • 原文地址:https://blog.csdn.net/apkkkk/article/details/126547146