前言:
最近因为公司业务需求,需要使用阿里云的mpaas,其实mpaas的是一个具有强大功能的框架,我们包含推送,扫码,UI,H5等很多的模块的。我们此次使用的是其H5容器功能。下面跟大家分享一下我们过程以及遇到的问题!
一、接入方式
mpaas接入方式分为三种,基于 mPaaS 框架接入、基于已有工程且使用 mPaaS 插件接入、基于已有工程且使用 CocoaPods 接入。
具体实现方式可以参考接入文档 https://help.aliyun.com/document_detail/106620.html?spm=a2c4g.11186623.6.643.70067652T9ijOn,这里就不过多叙述了。我们采用的插件接入的方式。原因就是其中一些第三方插件跟我们工程中的插件有冲突!
需要注意的点
1、config文件的配置,这个文件只用一次,最好不要放在工程里,放在外面,导入的时候用一下就行,会自动在你的工程里生成一个mate的文件,跟config一样的内容。
2、如果合作开发的话,最好在导入模块的右下角选择copy,否则容易造成别人拉去代码拉去不到的情况(本人呗坑了整整半天,最后才发现是缺少配置)
3、导入之后,可能会提示缺少某些framework,自己手动添加就成了,纯粹的步骤操作
二、初始化
当你插件导入完成以后,你的工程了会多出来一个mpaas文件夹,找到MPaaS——Targets——XXX(你的工程名)——APMobileFramework——DTFrameworkInterface+XXXX,里面的beforeDidFinishLaunchingWithOptions,里面使用初始化方法,[MPNebulaAdapterInterface initNebula];[MPNebulaAdapterInterface initNebulaWithCustomPresetApplistPath:@"" customPresetAppPackagePath:@"" customPluginsJsapisPath:pluginsJsapisParth];我们由于要使用jsApi,所以我们使用的是第二种。与具体的话根据自己的需求去使用
三、导航栏
因为项目是整体是swift,架构采用的是storyboard,所以使用的H5serview,获取一个view,添加到对应的控制器,又因为项目使用右滑返回的,为了保证界面的流畅性,使用自定义的导航栏,默认导航行栏是隐藏的!而mpaas中的导航栏是h5那边控制的,所以刚开始的时候导航栏出不来,所以需要在对应的跳转页面不同的生命周期进行设置,tabbar也是同样的道理。
注意:为了更好的适配,我选用的是自定义的H5控制器,需要在初始化以后进行指定,在自定义的H5控制器中可以获得对应webView,实现的一些对应的代理方法就在这里,获取webView的时候,需要放在viewDidAppear里面,因为我的项目中放在viewDidLoad,会导致下拉刷新不生效,放在viewWillAppear,导航栏标题又无法出现,(仅对本项目)。
四、jsApi接入
mpasa提供native与h5的交互,h5那边提供方法名,native或则捕获并且实现想要的效果。需要注意的是如果采用plist文件接入,最好直接复制官方demo中的bundle。然后在其中添加自己的jsapi。还有就是自定实现的时候,最好使用的是OC,mpaas大量使用了runtime运行时机制,但是Swift中貌似不能实现。
五、导航栏设置
在这里我建议是通过自定义webViewController来实现,继承与H5WebViewController,通过传递的参数来设置对应导航栏的配置AUBarButtonItem,在他给的官方demo里是可以看到的
总结,配置其实不难,用起来也不难,难得就是跟自己的项目进行融合。需要注意的比较多,写这篇文章的目的是为了给自己提个醒,下次在遇到类似的问题,可以多一种解决思路!
不足之处,请指正,纯手打,表述有误请指正,我会及时修改的,大神轻喷。