FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# 小程序自定义同层组件

# 1. 创建自定义同层组件

支持的app类型

小程序✅ 小游戏🚫 H5应用🚫

SDK收到自定义同层组件的创建事件后,会触发FATClient的embedComponentDelegate代理方法- (void)onCreateEmbedComponent:(FATEmbedComponentInfo *)componentInfo completion:(void (^)(UIView * _Nullable componentView))completion,宿主APP实现这个方法,可以在completion回调中返回自定义的原生组件,自定义的原生组件需要实现FATCustomEmbedViewProtocol协议,sdk会将这个组件同层渲染到页面上。

- (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;
© FinClip with ❤ , Since 2017