手把手教你系列- 变色龙SDK使用范例

以一个一个小demo,讲述变色龙SDK的使用方式,引领轻松入门。Demo 工程在根目录 “Example” 目录下,打开“Chameleon.xcworkspace”文件即可打开工程。

工程集成

在你的Podfile文件中,添加如下代码(以demo工程为例):

  1. platform :ios, '9.0'
  2. target 'Chameleon_Example' do
  3. #Chameleon
  4. pod 'Chameleon', :path => '../Chamleon/'
  5. #写入weex依赖。
  6. pod 'WeexSDK', '~> 0.19.0.2'
  7. #写入react_native依赖。
  8. pod 'React', :path => '../Chamleon/react_native/node_modules/react-native', :subspecs => [
  9. 'Core',
  10. 'CxxBridge', # 如果RN版本 >= 0.45则加入此行
  11. 'DevSupport', # 如果RN版本 >= 0.43,则需要加入此行才能开启开发者菜单
  12. 'RCTText',
  13. 'RCTNetwork',
  14. 'RCTWebSocket', # 这个模块是用于调试功能的
  15. ]
  16. pod 'yoga', :path => '../Chamleon/react_native/node_modules/react-native/ReactCommon/yoga'
  17. pod 'DoubleConversion', :podspec => '../Chamleon/react_native/node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  18. pod 'glog', :podspec => '../Chamleon/react_native/node_modules/react-native/third-party-podspecs/GLog.podspec'
  19. pod 'Folly', :podspec => '../Chamleon/react_native/node_modules/react-native/third-party-podspecs/Folly.podspec'
  20. end

将podfile保存,并运行pod install。

工程中使用

初始化变色龙环境

在appdelegate.m中的appDidFinishLaunchingWithOptions方法中添加:

  1. //初始化SDK实例
  2. [CMLSDKEngine initSDKEnvironment];
  3. //设置渲染引擎为weex
  4. [CMLEnvironmentManage chameleon].serviceType = CMLServiceTypeWeex;

如果需要使用预加载的功能,则:

  1. //设置预加载的链接地址
  2. [CMLEnvironmentManage chameleon].weexService.config.prefetchContents = @[@"http%3A%2F%2F172.22.139.32%3A8000%2Fweex%2Fchameleon-bridge.js%3Ft%3D1546502643623"];
  3. //启动预加载
  4. [[CMLEnvironmentManage chameleon].weexService setupPrefetch];
  • [CMLEnvironmentManage chameleon].weexService.config 实例中可以看到更多的设置选项。

使用

实例化一个Weex渲染页面

以demo为例:

  1. CMLWeexRenderPage *weexDemo = [[CMLWeexRenderPage alloc] initWithLoadUrl:encodeUrl];
  2. weexDemo.service = [CMLEnvironmentManage chameleon].weexService;
  3. [self.navigationController pushViewController:weexDemo animated:YES];

实例化一个ReactNative渲染页面

ReactNative的渲染容器待完善

添加一个自己的module

我们以CMLStorageModule为例:

在头文件中
  1. #import <Foundation/Foundation.h>
  2. #import "CMLModuleProtocol.h"
  3. //实现“CMLModuleProtocol.h”
  4. @interface CMLStorageModule : NSObject<CMLModuleProtocol>
  5. @property (nonatomic, weak) CMLInstance *cmlInstance;
  6. @end
在实现文件中
  1. #import "CMLStorageModule.h"
  2. #import "CMLUtility.h"
  3. #import "CMLConstants.h"
  4. @implementation CMLStorageModule
  5. @synthesize cmlInstance;
  6. //使用 CML_EXPORT_METHOD 导出方法以供JS所调用。
  7. CML_EXPORT_METHOD(@selector(setStorage:callBack:))
  8. - (void)setStorage:(NSDictionary *)parms callBack:(CMLMoudleCallBack)callback{
  9. NSString *key = parms[@"key"];
  10. NSString *value = parms[@"value"];
  11. if (!key || key.length <= 0 || !value || value.length <=0) {
  12. return;
  13. }
  14. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  15. [ud setValue:value forKey:key];
  16. [ud synchronize];
  17. if (callback) {
  18. NSDictionary *result = @{@"errno": @"0", @"msg": @""};
  19. if(callback) callback(result);
  20. }
  21. }
  22. @end