帮助与文档

> >

一、到Mob官网申请MobLink所需的APPKey

  1. 打开Mob官网,在官网首页选择登录或注册,新用户先注册,老用户直接登录。

    mob

    注册页面如下图:

    mob_reg

  2. 注册或登录完成后,会返回至首页,点击右上角的“进入后台”,会跳转至管理后台,点击下拉列表,选择“创建新应用”。如下图:

    mob_back

    输入应用名称后点击“保存”,如下图:

    mob_create_app

    应用创建后在左边导航栏点击“添加产品”,如下图:

    mob_add_product

    在产品列表中选择MobLink并点击“马上开始”,如下图:

    mob_start

    此时左边导航栏就能看到您添加的产品了,点击“概况”即可看到您接下来需要的AppKey和AppSecret了,如下图:

    mob_appkey

  3. 后台基础配置。请务必根据自身客户端应用实际情况,进行相关项的配置。填写完毕后请点击“保存”以确保生效。

    mob_conf

    下面仅对iOS各项基础配置进行说明,安卓部分请参考:安卓集成文档

    配置说明
    字段名称 是否必填 字段作用/说明
    BundleID 项目唯一标识。请务必与项目中保持一致。可见于项目Info.plist文件的Bundle identifier
    下载地址 应用在App Store的下载地址
    URL Scheme 请务必与项目中的配置保持一致,否则可能会导致无法跳转应用(下文将介绍)
    Team ID 开发团队的ID,可在苹果开发者后台查看
    右上角跳转链接 通过Universal Link跳转到app后右上角会出现一个“mob.com”标志,点击后会通过Safari打开一个链接,可以在这里填写您想要打开的链接,如果不填,则默认打开之前的Web页面
    Universal Link开关 强烈建议使用Mob生成的Universal Link。iOS 9.0及以上使用Universal Link能优化场景恢复过程,提供更好的用户体验。选择并使用我们帮您生成的Universal Link并正确配置到您的项目中(下文将介绍),将为您节省大量工作和时间。

二、下载客户端SDK

请从官网下载客户端SDK,解压后可得到如下文件夹目录:

Snip20170525_2

说明:

  • Sample文件夹里存放MobLinkDemo – MobLink的演示demo(供使用参考)
  • SDK文件夹下的MobLink文件夹里存放MobLink.framework – 核心功能库(必要)
  • SDK文件夹下的Required文件夹里存放MOBFoundation.framework = 基础功能框架(必要)

三、快速集成SDK

一、iOS 快速集成

  1. 在项目中添加SDK

    i. 将MobLink.framework,MOBFoundation.framework添加到项目中,如下图:

    Snip20170525_3

    ii. 选择将文件夹复制到项目中,如下图:

    Snip20170525_4

    iii. 添加依赖库

    Snip20170525_7

    选择项目Target – Build Phases – Link Binary With Libraries,然后选择“+”进行添加系统库:

    • libsqlite3
    • libz1.2.5
    • libstdc++
  2. 配置URL Scheme及Universal Link

    i. URL Scheme
    项目中需要配置URL Scheme以用于场景恢复时跳转到应用中。请参考下图配置您自己的URL Scheme:

    mob_url

    这里所配置的务必与后台填写的一致,如下图:

    Snip20170525_8

    ii. Universal Link
    后台已经为您生成好您的Universal Link,如下图:

    Snip20170525_9

    然后在项目中配置Universal Link,请务必填写与后台生成的Universal Link地址 参考下图:

    Snip20170526_11

  3. 添加代码

    i. 在Info.plist文件中右键空白处,选择“Add Row”,添加“MOBAppKey”和“MOBAppSecret”对应值为上述在管理后台中获得的AppKey和AppSecret(点击“显示”查看),如下图所示:

    Snip20170526_12

    无需代码即可完成MobLink的初始化工作。

    ii. 在需要恢复的控制器中实现UIViewController+MLSDKRestore的两个方法,如下图所示:

    mob_restore_swift

    第一个是实现标识控制器路径的方法:

    // 控制器路径
    override class func mlsdkPath() -> String {
    
        // 该控制器的特殊路径
        return "/demo/a"
    }
    

    第二个是实现带有场景参数的初始化方法,并根据场景参数还原该控制器:

    // 根据场景信息初始化方法
    convenience init!(mobLinkScene scene: MLSDKScene!) {
        self.init()
    
        //记录返回的场景参数信息
        self.scene = scene
    }
    

    iii. 获取MobId

    /// 获取mobid
    func getMobId(){
    
        // 校验路径正确性
        let path = self.pathTextField?.text ?? ""
        if path != "/demo/a"  && path != "/demo/b" {
            let alert : UIAlertView = UIAlertView(title: "提示", message: "路径填写错误!请填写\"/demo/a\" 或\"/demo/b\"" , delegate: nil, cancelButtonTitle: "OK")
            alert.show()
            return;
        }
    
        // 构造自定义参数字典
        var customParams: [String: Any] = [String: Any]()
        let key1 = self.key1TextField?.text ?? ""
        let val1 = self.value1TextField?.text ?? ""
        let key2 = self.key2TextField?.text ?? ""
        let val2 = self.value2TextField?.text ?? ""
        let key3 = self.key3TextField?.text ?? ""
        let val3 = self.value3TextField?.text ?? ""
    
        if key1.lengthOfBytes(using: String.Encoding.utf8) > 0 && val1.lengthOfBytes(using: String.Encoding.utf8) > 0 {
            customParams[key1] = val1
        }
        if key2.lengthOfBytes(using: String.Encoding.utf8) > 0 && val2.lengthOfBytes(using: String.Encoding.utf8) > 0 {
            customParams[key2] = val2
        }
        if key3.lengthOfBytes(using: String.Encoding.utf8) > 0 && val3.lengthOfBytes(using: String.Encoding.utf8) > 0 {
            customParams[key3] = val3
        }
    
        // 生成scene用于获取mobid
        let source = self.sourceTextField?.text ?? ""
        let scene: MLSDKScene = MLSDKScene.init(mlsdkPath: path, source: source, params: customParams)
    
        MobLink.getMobId(scene) { [unowned self] (mobidStr: String?) in
            if let mobid = mobidStr {
                // 记录获取到的mobid
                self.currentMobId = mobid
    
                self.shareBtn?.setTitleColor(MOBFColor.color(withRGB: 0x4e8bed), for: .normal)
                self.shareBtn?.layer.borderColor = MOBFColor.color(withRGB: 0x4e8bed).cgColor
    
                let alert : UIAlertView = UIAlertView(title: "提示", message: "MobId获取成功!" , delegate: nil, cancelButtonTitle: "OK")
                alert.show()
            }
            else
            {
                self.shareBtn?.setTitleColor(MOBFColor.color(withRGB: 0xa4a4a4), for: .normal)
                self.shareBtn?.layer.borderColor = MOBFColor.color(withRGB: 0xe3e3e3).cgColor
    
                let alert : UIAlertView = UIAlertView(title: "提示", message: "MobId获取失败!" , delegate: nil, cancelButtonTitle: "OK")
                alert.show()
            }
        }
    }
    
    参数说明
    path 本次生成的mobid所对应的控制器唯一路径,即上述第2点中所提及的+ MLSDKPath方法返回的路径。在场景还原时(即客户端还原网页内容)会根据path寻找匹配的控制器进行还原。
    source 来源标识,可用于在场景还原时辨别来源,例如:传入一个当前控制器名称。
    params 字段类型,此时传入的字典数据,在场景还原时能够重新得到,例如:传入一些回复控制器时需要的参数。
    回调值说明
    mobid 生成的mobid可用于拼接到需要进行推广的链接后,例如:http://www.abc.com/?mobid=123456,注意:该网站页面必须集成了JS模块的代码(下文将说明),方可实现网页-应用无缝接合。

    备注:如果您的页面参数固定,则可以将获取到的这个mobid缓存起来,不用每次都去获取新的mobid以节约时间成本。

    到此,最简单的MobLink就集成好了,打开上述集成好JS模块(Web端集成请看下文)并带有mobid的链接即可跳转到您的APP并自动恢复到您实现了恢复方法的控制器中。 请注意:如果您的APP中带有导航控制器(UINavigationController),则恢复时MobLink会采用Push的方式,但是如果您的APP中没有导航控制器,则恢复时MobLink会采用Modal的方式,此时就需要您自行dismiss恢复出来的控制器了。

二、Web 快速集成

  1. 在后台找到JS引入模块,点击“复制”来复制代码内容。如下图所示:

    Snip20170607_4

  2. 随后直接在页面引入文件,并且调用初始化方法。代码如下:
    // xxxxxx 对应你的AppKey
    <script type="text/javascript" id="-moblink-js" src="http://f.moblink.mob.com/moblink.js?appkey=xxxxxxx"></script>
    <script type="text/javascript">
        MobLink.init();
    </script>
    

     

    三、高级功能

    一、iOS 高级功能

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

      Snip20170607_3

    2. delegate中各个方法的说明如下:

    注意:其中将要进行场景恢复的代理方法的回调block有参数增加,需注意修改。

    方法名称 作用说明
    imlsdkStartCheckScene 开始检测是否需要场景还原 查看示例
    imlsdkEndCheckScene 结束检测是否需要场景还原 查看示例
    imlsdkWillRestore(_ scene: MLSDKScene!, restore restoreHandler: ((Bool) -> Void)!) 即将进行场景还原(注意:一旦实现该方法,请务必执行restoreHandler)查看示例
    imlsdkCompleteRestore(_ scene: MLSDKScene!) 完成场景恢复 查看示例
    imlsdkNotFound(_ scene: MLSDKScene!) 无法进行场景恢复(通常原因是在恢复时找不到对应的path,应检查需要恢复的控制器所实现的+ MLSDKPath中返回的路径是否与生成mobid时的传入的path参数一致) 查看示例

    开始检测是否需要场景还原示例代码

    func imlsdkStartCheckScene() 
    {
        print("开始检查场景.")
    }
    

    结束检测是否需要场景还原示例代码

    func imlsdkEndCheckScene() 
    {
        print("结束检查场景.")
    }
    

    即将进行场景还原示例代码

    func imlsdkWillRestore(_ scene: MLSDKScene!, restore restoreHandler: ((Bool) -> Void)!) 
    {
            print("将要进行场景恢复 path:\(scene.path ?? "")")
    
            // 可根据path决定是否进行场景恢复
            let alertCtr: UIAlertController = UIAlertController(title: "提示", message: "是否恢复场景?", preferredStyle: .alert)
    
            let cancelAction: UIAlertAction = UIAlertAction(title: "否", style: .cancel) { (action: UIAlertAction) in
                restoreHandler(false)
            }
    
            let sureAction: UIAlertAction = UIAlertAction(title: "是", style: .default) { (action: UIAlertAction) in
                restoreHandler(true)
            }
    
            alertCtr.addAction(cancelAction)
            alertCtr.addAction(sureAction)
    
            self.window?.rootViewController?.present(alertCtr, animated: true, completion: nil)
    }
    

    场景恢复完成示例代码

    func imlsdkCompleteRestore(_ scene: MLSDKScene!) 
    {
        print("场景恢复完成.")
    }
    

    找不到场景示例代码

    func imlsdkNotFound(_ scene: MLSDKScene!) 
    {
        print("没有找到控制器路径 path:%@", scene.path)
    }
    

    二、Web高级功能

    1. 初始化方法

      初始化方法目的是在页面加载完成后,获取请求下发的数据,生成或绑定跳转唤醒APP的事件。

      Moblink.init({
          debug: true,
          mobid: "qE",
          path: "demo/a",
          ...
      });
      

      详细参数如下表所示:

      参数名称 类型 默认值 说明
      debug Boolean true 是否开启调试。开启之后可以在浏览器中查看debug信息,以及部分会有弹窗提示。
      mobid String 从客户端分享出来的页面会自动在url携带mobid,也可以在页面初始化时手动写入。
      path String 与页面相对应的客户端页面路由。
      params Object 需要传给客户端的参数。例如,要传入一个pageid,则{pageid: “0”}
      showDefaultUI Boolean true 是否显示默认浮层样式。如果想要自定义打开按钮样式,则可以设置false,并且在自定义的元素上添加一个id,例如:id=”moblink-href”。
      initCallback Function 初始化成功的回调方法。
    2. 动态更新携带参数

      在初始化的方法中有个params的参数设置,这个参数是为了携带参数传入客户端内,初始化时则会自动合并生成携带了这些参数信息的链接。

      但是初始化传入的params参数是固定不变的,在很多情况下我们可能需要传入动态参数,例如一些订票场景,可能需要传入用户选择的数据,这些参数是动态不断在变化的,对此我们也提供了一个更新链接携带参数的方法。

      Moblink.updateScheme(data);
      
      参数名称 类型 默认值 说明
      data Object 需要更新的参数内容。
    3. 推荐位链接

      推荐位链接生成,是个衍生功能。方便在当前页面实现多个页面跳转。

      推荐位链接是打开跳转链接的简易版本。配置方式也比较简单,推荐位跳转方式也撇去了打开跳转中的引导页引导跳转,跳转失败默认是停留在当前页。

      集成方法: 在需要生成链接的元素上,添加一个属性 “moblink-featured”,如下图所示:

      web_feature

      设置的属性参数格式是: /path?key=value

      其中path是需要跳转到客户端中的路径。key=value 是携带的参数的序列化形式。

      推荐位的配置不像打开按钮的配置那么繁杂,是直接写在ui上的,自动生成链接的。因此为了部分需要自己绑定的开发者需求,我们提供了一个可以高级定制推荐位的方法。

      MobLink.updateFeatured(elementName, path, data, callback);
      

      参数详情:

      参数名称 类型 默认值 说明
      elementName String 需要绑定推荐位链接的元素名称。示例: “#mob-feature”
      path String 跳转至客户端的路径。示例:”scene/news”
      data Object 需要携带传入客户端的参数。示例:{“key1”: “value1″, “key2″: “value2″}
      callback Function 跳转失败后的回调方法。示例:function(){ alert(“跳转失败!”); }