# 小程序自定义同层组件
# 1. 创建自定义同层组件
支持的app类型
小程序✅ 小游戏🚫 H5应用🚫
SDK收到自定义同层组件的创建事件后,会触发FATClient的embedComponentDelegate代理方法- (void)onCreateEmbedComponent:(FATEmbedComponentInfo *)componentInfo completion:(void (^)(UIView
- (void)onCreateEmbedComponent:(FATEmbedComponentInfo *)componentInfo completion:(void (^)(UIView * _Nullable componentView))completion {
CGFloat top = 0;
CGFloat left = 0;
CGFloat width = componentInfo.width;
CGFloat height = componentInfo.height;
FATComponentView *componentView = [[FATComponentView alloc]initWithFrame:CGRectMake(left , top, width, height)];
[componentView setComponentInfo:componentInfo];
completion(componentView);
}
# 2. 自定义同层组件的事件
自定义同层组件有更新事件、删除事件以及小程序发送给自定义同层组件的事件,自定义同层组件可以FATCustomEmbedViewProtocol协议方法,来接收处理这些事件。
支持的app类型
小程序✅ 小游戏🚫 H5应用🚫
/// 自定义组件更新
/// - Parameters:
/// - componentInfo: 组件更新的参数
/// - completion: 更新完成回调,必须触发
- (void)onUpdate:(FATEmbedComponentInfo *)componentInfo withCompletion:(void (^)(void))completion {
// 展示数据信息
NSString *dataText = @"Data Information:\n";
if (componentInfo.dataDic && [componentInfo.dataDic isKindOfClass:[NSDictionary class]]) {
for (NSString *key in componentInfo.dataDic) {
id value = componentInfo.dataDic[key];
dataText = [dataText stringByAppendingFormat:@"%@: %@\n", key, value];
}
} else {
dataText = [dataText stringByAppendingString:@"No data information available"];
}
self.dataTextView.text = dataText;
// 调用完成回调
completion();
}
/// 自定义组件被删除,可以在这个方法里做一些清理逻辑
/// - Parameter completion: 完成回调,必须触发
- (void)onRemoveWithComplete:(void (^)(void))completion {
completion();
}
/// 收到小程序发送给自定义组件的事件
/// - Parameters:
/// - event: 事件
/// - completion: 处理完成回调,必须触发,回调数据可以为nil
- (void)receiveComponentEvent:(FATEmbedComponentEvent *)event completion:(void (^)(NSDictionary * _Nullable))completion {
completion(@{@"test":@"abc"});
}
# 3. 宿主APP给小程序发送自定义同层组件事件
支持的app类型
小程序✅ 小游戏🚫 H5应用🚫
宿主APP可以通过FATClient的embedComponentManager对象给小程序的自定义同层组件对象发送事件。
/// 发送自定义组件事件给小程序
/// - Parameters:
/// - eventName: 事件名称
/// - appletId: 小程序id,不传的话会取发送给当前运行的小程序
/// - paramString: 事件参数
/// - pageId: 页面id,不传的话会使用当前页面
/// - componentId: 组件的domId
/// - handler: 事件结果回调
- (void)sendEvent:(NSString *)eventName applet:(NSString *)appletId paramString:(NSString *)paramString pageId:(NSNumber *)pageId componentDomId:(NSString *) componentDomId handler:(void (^)(id result, NSError *error))handler;
# 4. 宿主APP获取、删除自定义同层组件
支持的app类型
小程序✅ 小游戏🚫 H5应用🚫
宿主APP可以通过FATClient的embedComponentManager对象获取或删除自定义同层组件。 ps:建议宿主APP不持有自定义同层组件,sdk会在小程序页面对象上持有自定义同层组件,页面销毁后,自定义同层组件也会随着销毁。
/// 获取自定义同层组件
/// - Parameters:
/// - appletId: 小程序id,不传的话,会去当前小程序获取同层组件
/// - pageId: 页面id,不传的话,会去小程序最上层页面去获取同层组件
/// - componentId: 同层组件id
- (UIView *)getEmbedComponent:(NSString * _Nullable)appletId pageId:(NSString * _Nullable)pageId componentId:(NSString *)componentId;
/// 宿主APP删除自定义同层组件
/// - Parameters:
/// - appletId: 小程序id,不传的话,会删除当前小程序里的同层组件
/// - pageId: 页面id,不传的话,会删除小程序最上层页面去的同层组件
/// - componentId: 同层组件id
- (BOOL)removeEmbedComponent:(NSString * _Nullable)appletId pageId:(NSString * _Nullable)pageId componentId:(NSString *)componentId;