# 小组件集成
小组件是FinClip SDK 提供的能力,所以只需要集成FinClip SDK即可。
# 1. 集成指引
# 2. 示例 DEMO
# 3. 版本说明
- iOS SDK和Android SDK均是2.44.1以及之后版本才支持小组件功能。
- iOS SDK和Android SDK均是2.44.1以及之后版本才支持小组件功能。
- iOS SDK和Android SDK均是2.44.1以及之后版本才支持小组件功能。
# 4.打开小组件
# 4.1 iOS
通过FATClient类的widgetManager对象提供的API方法创建不同版本类型的小组件,以不同的request创建不同场景下的小组件。
# 4.1.1 打开服务器端正式版小组件
/// 创建widget
/// - Parameters:
/// - request: 请求参数
/// - parentViewController: 组件所在的视图控制器,如果不传,部分API可能没法使用
/// - completion: 创建结果,创建失败时widgetView为nil
- (void)createWidget:(FATWidgetRequest *)request parentViewController:(UIViewController *)parentViewController completion:(void (^)(FATWidgetView *_Nullable widgetView, FATError *error))completion;
示例代码:
FATWidgetRequest *widgetRequest = [[FATWidgetRequest alloc]init];
widgetRequest.widgetId = @"65e82e0778df2c00015c21a4";
widgetRequest.widgetServer = @"https://api.finclip.com";
[self showLoading];
[[FATClient sharedClient].widgetManager createWidget:widgetRequest parentViewController:self completion:^(FATWidgetView * _Nullable widgetView, FATError * _Nonnull error) {
[self hideLoading];
if (!error) {
if (widgetView) {
[self showWidgetView:widgetView];
}
}else {
[self handleOpenWidgetFail:error];
}
}];
# 4.1.2 二维码打开小组件
/// 以二维码方式创建widget
/// - Parameters:
/// - request: 请求参数
/// - parentViewController: 组件所在的视图控制器,如果不传,部分API可能没法使用
/// - completion: 创建结果,创建失败时widgetView为nil
- (void)createWidgetWithQRCode:(FATWidgetQRCodeRequest *)request parentViewController:(UIViewController *)parentViewController completion:(void (^)(FATWidgetView *_Nullable widgetView, FATError *error))completion;
# 4.1.3 打开本地小组件
/// 打开本地小组件
/// - Parameters:
/// - request: 请求参数
/// - parentViewController: 组件所在的视图控制器,如果不传,部分API可能没法使用
/// - completion: 创建结果,创建失败时widgetView为nil
- (void)createLocalWidget:(FATWidgetRequest *)request parentViewController:(UIViewController *)parentViewController completion:(void (^)(FATWidgetView *_Nullable widgetView, FATError *error))completion;
# 4.2 Android
# 4.2.1 打开服务器端正式版小组件
/**
* 打开小组件
*
* @param activity 小组件将被添加到的activity
* @param request 参数封装
*/
fun startComponent(
activity: FragmentActivity,
request: IFinAppletRequest,
callback: ComponentCallback
)
request 使用RemoteFinAppletRequest
类型即可。
示例代码:
// 打开小组件前先展示Loading
showLoading()
// 构造request对象
val request = IFinAppletRequest.Companion.fromAppId("https://api.finclip.com", "661ce3fb9876dc000158c94f")
// 可以通过request设置其他启动参数
// ...
FinAppClient.appletApiManager.startComponent(
this,
request,
object : ComponentCallback {
override fun onSuccess(result: String?) {
// 小组件加载成功
}
override fun onError(code: Int, error: String?) {
// 小组件加载失败,隐藏Loading,显示错误信息。
hideLoading()
showError(code, error.orEmpty())
}
override fun onComponentCreated(componentHolder: ComponentHolder) {
// 小组件创建成功, 将小组件视图添加到宿主Activity视图内
componentContainer.addView(
componentHolder.view,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
this@ComponentActivity.componentHolder = componentHolder
}
override fun onContentLoaded() {
// 小组件内容加载完成,隐藏Loading
hideLoading()
}
}
)
# 4.2.2 二维码打开小组件
/**
* 打开小组件
*
* @param activity 小组件将被添加到的activity
* @param request 参数封装
*/
fun startComponent(
activity: FragmentActivity,
request: IFinAppletRequest,
callback: ComponentCallback
)
request 使用QrCodeFinAppletRequest
类型即可。
示例代码:
val request = IFinAppletRequest.Companion.fromQrCode(qrCode)
FinAppClient.appletApiManager.startComponent(
this,
request,
object : ComponentCallback {
override fun onSuccess(result: String?) {
// 小组件加载成功
}
override fun onError(code: Int, error: String?) {
// 小组件加载失败,隐藏Loading,显示错误信息。
hideLoading()
showError(code, error.orEmpty())
}
override fun onComponentCreated(componentHolder: ComponentHolder) {
// 小组件创建成功, 将小组件视图添加到宿主Activity视图内
componentContainer.addView(
componentHolder.view,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
this@ComponentActivity.componentHolder = componentHolder
}
override fun onContentLoaded() {
// 小组件内容加载完成,隐藏Loading
hideLoading()
}
}
)
# 4.2.3 打开本地小组件
/**
* 打开小组件
*
* @param activity 小组件将被添加到的activity
* @param request 参数封装
*/
fun startComponent(
activity: FragmentActivity,
request: IFinAppletRequest,
callback: ComponentCallback
)
request 使用LocalFinAppletRequest
或LocalInterfaceFinAppletRequest
类型即可。
示例代码:
val request = IFinAppletRequest.Companion.fromLocalInterface("https://abc.com","661ce3fb9876dc000158c94f")
FinAppClient.appletApiManager.startComponent(
this,
request,
object : ComponentCallback {
override fun onSuccess(result: String?) {
// 小组件加载成功
}
override fun onError(code: Int, error: String?) {
// 小组件加载失败,隐藏Loading,显示错误信息。
hideLoading()
showError(code, error.orEmpty())
}
override fun onComponentCreated(componentHolder: ComponentHolder) {
// 小组件创建成功, 将小组件视图添加到宿主Activity视图内
componentContainer.addView(
componentHolder.view,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
this@ComponentActivity.componentHolder = componentHolder
}
override fun onContentLoaded() {
// 小组件内容加载完成,隐藏Loading
hideLoading()
}
}
)
# 5. 删除小组件
# 5.1 iOS
# 5.1.1 删除指定小组件缓存
删除小组件,会将小组件从页面上移除,并从内存中销毁
/// 清理wdiget
/// - Parameter widgetId: widgetId
- (void)cleanWidget:(NSString *)widgetId;
# 5.1.2 删除所有小组件缓存
删除所有的小组件,将小组件从页面上移除,并从内存中销毁
/// 清理所有widget
- (void)cleanAllWidget;
# 5.2 Android
# 5.2.1 清除指定小组件缓存
针对添加的小组件,调用其destroy方法。
示例代码:
componentHolder?.destroy()
componentHolder = null
# 5.2.2 清除所有小组件缓存
针对所有小组件,调用其destroy方法即可。