MADP3.0iOS接口说明

iOS接口说明

自定义楼层组件

MADCoreNative 提供客户端注册自定义楼层组件,可实现下面方法

/// 自定义楼层组件注册
/// - Parameters:
///   - name: 组件标识
///   - clazz: 对应组件
+ (void)registryNativeComponent:(NSString *)name withClass:(Class)clazz;

此方法需要在MADCore初始化方法回调内实现 例:

//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;

[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
    [MADCoreNativeManager registryNativeComponent:@"ComponentCellID" withClass:NSClassFromString(@"ComponentCellClass")];
}];

自定义组件需继承 MADCoreNativeCell 并且在组件中实现如下方法

关联自定义cell,以ClassCell为例

//关联对应ID cell
+ (instancetype)cellWithType:(NSString *)type{
    <#ClassCell#> *cell = [[<#ClassCell#> alloc] init];
    return cell;
}

传输关联楼层数据

- (void)bindDataFromServer:(NSDictionary *)dataDict indexPath:(nonnull NSIndexPath *)indexPath{
    //自定义试图
    UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
    customView.backgroundColor = [UIColor orangeColor];
    //将试图添加到cell内
    [self addSubview:customView];
}

楼层关联数据

继承 MADCoreNativeCell 类后,可以获取对应的cell数据内容,可以通过 传输关联楼层数据 方法 dataDict 参数进行获取

/** ID */
@property (nonatomic , strong , readonly) NSString          * ID;
/** 类型 */
@property (nonatomic , strong , readonly) NSString          * type;
/** 标题 */
@property (nonatomic , strong , readonly) NSString          * title;
/** 宽 */
@property (nonatomic , assign , readonly) CGFloat            width;
/** 高 */
@property (nonatomic , assign , readonly) CGFloat            height;
/** 背景色 */
@property (nonatomic , assign , readonly) UIColor           * backGroundColor;
/** 背景图 */
@property (nonatomic , copy , readonly)   UIImageView           * backGroundImage;
/** 登录后是否要刷新 */
@property (nonatomic , assign , readonly) BOOL               loginRefresh;
/** 登录状态 */
@property (nonatomic , assign , readonly) BOOL               isLogin;
/** context */
@property (nonatomic , copy , readonly)  id               context;

更新当前楼层高度

当发交易或其他业务处理需改变楼层高度时,可调用下面方法,跟新cell的高度

/// 更新当前楼层高度
/// - Parameter height: 结算高度
- (void)updateForCellHeight:(CGFloat)height;

自定义容器

MADCoreNative 提供客户端注册自定义容器,可实现下面方法

/// 自定义注册Page
/// - Parameters:
///   - name: PageView标识
///   - clazz: 对应PageView
+ (void)registryNativeComponent:(NSString *)name withClass:(Class)clazz;

此方法需要在MADCore初始化方法回调内实现 例:

//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;

[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
    [MADCoreNativeManager registryNativeComponent:@"ComponentPageViewID" withClass:NSClassFromString(@"ComponentPageViewClass")];
}];

自定义首页容器需继承 NativeViewController 可以从 NativeViewController 类中得到关联的 场景ID标题Context对象路径

- (void)viewDidLoad {
    NSLog(@"场景ID:%@",self.stageId);
    NSLog(@"标题:%@",self.title);
    NSLog(@"Context对象:%@",self.ctx);
    NSLog(@"页面路径:%@",self.url);
}

自定义普通页容器需继承 MADBaseViewController 可以从 MADBaseViewController 类中得到关联的 场景ID标题Context对象路径

- (void)viewDidLoad {
    NSLog(@"场景ID:%@",self.stageId);
    NSLog(@"标题:%@",self.title);
    NSLog(@"Context对象:%@",self.ctx);
    NSLog(@"页面路径:%@",self.url);
}

自定义首页弹框视图

包含 首页悬浮框首页广告弹框App应用版本更新弹框

MADCoreNative 提供客户端注册首页弹框视图,可实现下面方法

/// 自定义注册Page
/// - Parameters:
///   - name: PageView标识
///   - clazz: 对应PageView
+ (void)registryNativeComponent:(NSString *)name withClass:(Class)clazz;

此方法需要在MADCore初始化方法回调内实现 例:

//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;

[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
    [MADCoreNativeManager registryNativeComponent:@"ComponentPageViewID" withClass:NSClassFromString(@"ComponentPageViewClass")];
}];

自定义容器需继承 MADCoreNativeView 并且在组件中实现如下方法

弹框的父试图是在 Window层

-(void)nativeViewBindDataFromServer:(NSDictionary *)dataDict{
    //自定义试图
    UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
    customView.backgroundColor = [UIColor orangeColor];
    //将试图添加到windowl内
    [[[UIApplication sharedApplication].windows objectAtIndex:0] addSubview:customView];
}

网络数据请求

请求MADP后管资源数据

/**
 * 普通get方法请求后管资源数据
 *
 * @param url     请求网址路径
 * @param success 成功回调
 * @param fail 失败回调
 */
+ (void)GET:(NSString *)url success:(ResponseSuccess)success fail:(ResponseFail)fail;

请求网络数据

/**
 * 请求网络数据
 *
 *  @param request 请求头
 *  @param parameters 请求参数
 *  @param response 返回内容
 */
+ (void)request:(NSMutableURLRequest *)request parameters:(NSDictionary *)parameters response:(void(^)(NSData *resBody, NSString *header, NSInteger code))response;

动态卡资源请求

MADCoreNative 暴露 WorkerNetworking 类; 基于 MADP2.0 框架封装的网络请求

/// 动态卡资源请求
/// @param request 请求头
/// @param success 成功回调
/// @param fail 失败回调
+ (void)downloadWebRequest:(NSMutableURLRequest *)request success:(ResponseSuccess)success fail:(ResponseFail)fail;

通过MADP请求后管图片资源文件

/// ImageView配置mado图片
/// @param url 相对地址
/// @param imgV ImageView对象
+ (void)setImagWithUrl:(NSString *)url imageV:(UIImageView *)imgV;

h5动态卡可调用MADP接口

1:获取动态卡楼层内部组件排序

h5动态卡可获取后管当前动态卡楼层的组件排序

getDynamicCardItemComponentList

2:获取当前展示的主题ID

用户在原生实现主题换肤功能是,动态卡获取到当前主题的ID

getNativeThemeID

自定义JSBridge插件

MADCoreNative通过注入Schema的形式,以显示Web端与Native端的交互方式

Web端掉用Native端实现方式

客户端自定义JSBridge集成步骤

1:创建继承NSObject类
2:引用头文件
#import <MADCore/MADCore.h"
3:注册当前类
JSBRIDGE_PLUGIN_REGEDITER(<#这里输入你当前的类名#>)
4:引用相关协议
CSIIJSBridgeProtocol
5:实现js交互方法
-(void)registerBridge:(CSII_WKWebViewJavascriptBridge *)bridge bridgeObject:(CSII_WKWebViewBridgeObject *)bridgeObject{

}

其中CSII_WKWebViewBridgeObject对象中暴露当前控制器、context对象以及webview控件

客户端自定义JSBridge案例

#import <MADCore/MADCore.h>
JSBRIDGE_PLUGIN_REGEDITER(MADPCustomBridge)
@implementation MADPCustomBridge
-(void)registerBridge:(CSII_WKWebViewJavascriptBridge *)bridge bridgeObject:(CSII_WKWebViewBridgeObject *)bridgeObject{
    /**
    * 其中 customMethod为方法名
    * hanler内的data为前端传递的参数数据
    * responseCallback为客户端需要返回的状态和参数数据
    * 如 - (void)customMethod:(id)param1 :(id)param2
    */
    [bridge registerHandler:@"customMethod" handler:^(id data, WVJBResponseCallback responseCallback) {
    if (![data isKindOfClass:[NSString class]]) {
        if (responseCallback) {
            responseCallback([self jsonStrWithObject:@{@"errMsg":@"参数不合法,请传json字符串!",@"state":@"fail"}]);
                return;
            }
        }
        NSData *jsonData = [data dataUsingEncoding:NSUTF8StringEncoding];        
        if (jsonData) {
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
            // customMethod 为方法名;jsonData为Web端传递过来的参数
            ..... 数据处理 调用方法
            
            // 返回给Web端
            NSDictionary *callbackDic = @{@"state":@"success",@"data":data};
            responseCallback([self jsonStrWithObject:callbackDic]);
        }
    }];
}


#pragma mark dic->json
- (NSString *)jsonStrWithObject:(id)object
{
    NSData *data=[NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonStr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    return jsonStr;
}

自定义触发app版本更新弹框时机

在所需之处调用方法[MADCoreNativeManager checkAppVersion];

业务需求分析

1.如何在产品提供的首页容器中做一些业务操作

MADP SDK暴露首页的容器类 MADCorePageViewController

实现方式

1.创建容器

客户端创建容器CustomHomeViewController继承于MADP提供的MADCorePageViewController

2.注册容器

在MADP初始化时注册容器兹定于的容器

//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;

[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
    [MADCoreNativeManager registryNativeComponent:@"PageVC1" withClass:NSClassFromString(@"CustomHomeViewController")];
}];
3.方法实现

此时可以在刚创建的容器中做一些对应的业务处理

注意:MADP首页使用的是同一个MADCorePageViewController类,所以像首页生活我的理财等首页都会触发此容器!需要在当前容器做了对应页面的判断处理

- (void)viewDidLoad {
    [super viewDidLoad];

    if ([self.title isEqualToString:@"首页"]) {
        // 首页业务逻辑处理 ....
    }

2.如何刷新指定楼层数据

MADP SDK在首页暴露属性楼层数据的接口

1.刷新全部楼层数据

方法介绍

调用此方法可以触发当且页面所有的楼层内刷新接口

/// 刷新楼层数据
/// - Parameters:
///   - dataDict: 后管配置数据
///   - indexPath: indexPath
///   - flag: 标识
- (void)reloadData:(NSDictionary *)dataDict indexPath:(NSIndexPath *)indexPath isRefreshFlag:(NSString *)flag;
代码
// 刷新数据
- (void)reloadData;

2.刷新指定楼层数据

方法介绍

调用此方法可以刷新指定indexFlag为标识的对应楼层数据,需要在楼层reloadData:indexPath:isRefreshFlag方法内取判断对应的indexFlag标识

代码
/// 刷新以indexFlag为标识的对应楼层数据
- (void)reloadRowsAtIndexFlag:(NSString *)indexFlag;

3.刷新指定楼层数据并携带参数

方法介绍

调用此方法可以通知指定indexFlag为标识的对应楼层,需要在楼层transmitData:isRefreshFlag方法内取判断对应的indexFlag标识,并且会携带参数数据!

代码
/// 刷新以indexFlag为标识的对应楼层并传递数据
- (void)reloadRowsWithDataDict:(NSDictionary *)dataDict indexFlag:(NSString *)indexFlag;