初始化引擎
Android
CubeInitParam cubeInitParam = CubeInitParam.getDefault();
MP.init(this, MPInitParam.obtain().addComponentInitParam(cubeInitParam));iOS
[[CubeService sharedInstance] initWithConfig:config];初始化引擎参数
设置预置资源路径
Android
CubeEngineConfig config = new CubeEngineConfig();
config.setResourcePath("cube");
cubeInitParam.setCubeEngineConfig(config)iOS
CubeEngineConfig* config = [[CubeEngineConfig alloc] init];
[config setBundlePath:mockBundlePath];//本地卡片的地址设置自定义 JSAPI
Android
/**
* 注册 cube jsapi
* @param cubeModuleModels
*/
public CubeInitParam setCubeModuleModels(Collection<CubeModuleModel> cubeModuleModels)
cubeInitParam.setCubeModuleModels(generateModuleModel())iOS
NSDictionary *dic = @{@"方法名": @"实现的类名", @"abc": @"MPDemoModule"};
[[[CubeService sharedInstance] getEngine] registerModules:dic];设置自定义标签
Android
/**
* 注册自定义 view(自定义标签)
* @param cubeWidgetInfos
*/
public CubeInitParam setCubeWidgetInfos(Collection<CubeWidgetInfo> cubeWidgetInfos)
cubeInitParam.setCubeWidgetInfos(generateWidget())iOS
CubeWidgetInfo *widgetInfo = [CubeWidgetInfo new];
widgetInfo.tag = @"custom-widget";
widgetInfo.className = [MPDemoCustomCardView class];
NSMutableArray *widgetArray = [NSMutableArray array];
[widgetArray addObject:widgetInfo];
[[[CubeService sharedInstance] getEngine] registerWidgets:[NSArray arrayWithArray:widgetArray]];设置图片下载器
Android
cubeInitParam.setImageHandler(new ICKImageHandler() {
@Override
public String loadImage(String s, int i, int i1, Map<String, Object> map, LoadImageListener loadImageListener) {
return null;
}
@Override
public void cancel(String s) {
}iOS
CubeEngineConfig 支持拦截 Image 下载,定制图片参数;客户端需要遵循 CKImageHandler 代理,实现监听方法。
// 卡片引擎类 CubeEngineConfig 的属性
/// 图片 handler,如果为空,则内部默认实现,建议自定义 handler
@property (nonatomic, strong) id<CKImageHandler> imageHandler;// CKImageHandler.h
// CubePlatform
// Created by Joe on 2018/8/15.
// Copyright © 2018年 mQuick. All rights reserved.
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#ifndef CKImageHandler_h
#define CKImageHandler_h
extern NSString *const CKImageAppInstanceIDKey; // 触发加载图片对应的 AppInstanceID
extern NSString *const CKImagePageInstanceIDKey; // 触发加载图片对应的 PageInstanceID
extern NSString *const CKImageInstanceOptionKey; // instance option. 针对 falcon 链路添加
typedef void(^CKImageHandlerCallback)(UIImage *image, NSError *error);
@protocol CKImageHandler <NSObject>
@required
/**
@param url 图片下载 URL
@param size 图片尺寸
@param option 扩展参数,视图片下载库需求而定
@param callback 下载回调,下载完成后通过此接口回调
@return 返回表示本次下载任务的唯一 ID
*/
- (NSString *)fetchImage:(NSString *)url size:(CGSize)size option:(NSDictionary *)option callback:(CKImageHandlerCallback)callback;
@optional
/**
@param fetchID 任务 ID, fetchImage 的返回值
*/
- (void)cancel:(NSString*)fetchID;
@end@interface MPCubeManager () <CKImageHandler>
- (void)initEngine {
CubeEngineConfig *engineConfig = [[CubeEngineConfig alloc] init];
//设置 delegate
engineConfig.imageHandler = self;
[[CubeService sharedInstance] initWithConfig:engineConfig];
}
- (NSString *)fetchImage:(NSString *)url size:(CGSize)size option:(NSDictionary *)option callback:(CKImageHandlerCallback)callback {
NSLog(@"图片地址:%@", url);
NSLog(@"图片扩展参数:%@", option);
return @"20211202";
}设置异常监听
Android
cubeInitParam.setExceptionListener(new CExceptionListener() {
@Override
public void onException(CExceptionInfo cExceptionInfo) {
}
})iOS
CubeEngineConfig 支持异常监听,捕获前端代码异常。客户端需要遵循 CExceptionListener 代理,实现监听方法。
// 卡片引擎类 CubeEngineConfig 的属性
/// 异常监听
@property (nonatomic, strong) id<CExceptionListener> exceptionListener;// CExceptionListener 代理类
// CrystalExceptionProtocol.h
// CubeCrystal
// Created by hejin on 2021/9/10.
#import <Foundation/Foundation.h>
#import "CExceptionInfo.h"
#ifndef CExceptionListener_h
#define CExceptionListener_h
@protocol CExceptionListener <NSObject>
@required
/**
异常监听
@param info 异常信息
*/
- (void)onException:(CExceptionInfo *)info;
@end@interface MPCubeManager () <CExceptionListener>
- (void)initEngine {
CubeEngineConfig *engineConfig = [[CubeEngineConfig alloc] init];
//设置 delegate
engineConfig.exceptionListener = self;
[[CubeService sharedInstance] initWithConfig:engineConfig];
}
//实现监听方法,打印监听信息
- (void)onException:(CExceptionInfo *)info {
NSLog(@"异常类型:%lu", (unsigned long)info.type);
NSLog(@"异常信息:%@", info.message);
NSLog(@"异常卡片 id:%@", info.cardUid);
NSLog(@"异常信息扩展参数:%@", info.extraInfo);
}设置日志监听
Android
cubeInitParam.setLogHandler(new ICKLogHandler() {
@Override
public void log(Context context, int i, String s, String s1, Throwable throwable) {
//Android Log
}
@Override
public void jsLog(Context context, String s) {
//js Log
}iOS
CubeEngineConfig* config = [[CubeEngineConfig alloc] init];
config.logHandler = self;
[[CubeService sharedInstance] initWithConfig:config];
#pragma mark - CKLogHandler
- (void)nativeLog:(NSString *)log type:(CKLogType)type {
}
- (void)jsLog:(NSString *)log {
}
设置初始化回调
Android
cubeInitParam.setCubeInitCallback(new CubeInitParam.CubeInitCallback() {
@Override
public void onInit() {
}
@Override
public void onError(Exception e) {
}
})iOS
暂不支持
设置 RpcHandler
Android
CubeInitParam cubeInitParam
= CubeInitParam.getDefault()
···
.setRpcHandler(new ICRpcHandler() {
@Override
public CKTemplateInfo.CKTemplateInfoResponse fetchTemplateInfo(List<CKTemplateInfo.CKTemplateInfoRequestParam> list) {
// CKRpcHandler()是mpaas基础实现,客户在ICRpcHandler自行扩展
return null;
}
})iOS
//1、设置rpcHandler
CubeEngineConfig *engineConfig = [[CubeEngineConfig alloc] init];
engineConfig.rpcHandler = self;
[[CubeService sharedInstance] initWithConfig:engineConfig];
//2、实现CTemplateInfoProtocol,返回值可参考默认RPC请求时日志打印:
//rpc: templateaInfo rpc result,用户在自行实现RPC的基础上也可以使用SDK内部逻辑
- (id)getTemplateInfoFromRpc:(NSArray *)params {
//1、走自定义RPC逻辑
//2、走默认SDK内部RPC逻辑
Class clazz = NSClassFromString(@"CrystalTemplateInfoHandler");
if (clazz) {
id<CTemplateInfoProtocol> handler = [[clazz alloc] init];
return [handler getTemplateInfoFromRpc:params];
}
return @{};
}