# 小程序可回溯功能
# 功能介绍
小程序可回溯是一项专业的用户行为记录功能,主要应用于:
- 互联网保险销售场景
- 在线理财产品销售
- 其他需要合规留痕的金融场景
该功能可以:
- 高性能记录用户操作轨迹
- 精确还原交易场景
- 满足金融监管合规要求
- 提供完整的回溯管理能力
# 小程序接入
# 1. 开启功能
在小程序的 app.ext.json
配置文件中添加:
{
"trace": {
"enable": true
}
}
# 2. 运行时控制
提供灵活的录制控制接口:
// 开启录制会话
ft.setTraceEnable({
enable: true
})
// 停止当前录制会话
ft.setTraceEnable({
enable: false
})
# 3. 隐私保护
为了保护用户隐私和敏感信息,提供了两种隐私保护机制:
# 3.1 内容遮罩
对敏感内容(如身份证号、银行卡号等)进行遮罩处理:
- 图片:将被替换为骨架图
- 文本:将被替换为星号(*)
使用方法:在需要遮罩的元素上添加 trace-mask
类名
<!-- 遮罩示例 -->
<view class="trace-mask">
<text>6222************1234</text>
<image src="/path/to/idcard.png" />
</view>
# 3.2 内容屏蔽
完全屏蔽特定元素的录制:
- 被屏蔽的元素不会被采集
- 适用于高度敏感的信息(如密码输入框)
使用方法:在需要屏蔽的元素上添加 trace-exclude
类名
<!-- 屏蔽示例 -->
<view class="trace-exclude">
<input type="password" placeholder="请输入密码" />
</view>
# 鸿蒙接入
# 1. 用户授权管理
# 请求用户授权
小程序开启录制时,SDK 会触发小程序可回溯代理的 requestUserAuthorization
接口。该接口:
- 默认返回
true
- 支持自定义实现,如添加用户授权弹窗
- 返回
false
时会停止录制
示例代码:自定义授权弹窗
import { FinAppProxyHandlerManager, IFinAppConfig, IFinProxyHandlerItem } from '@finclip/sdk';
import { promptAction } from '@kit.ArkUI';
class AppletTraceHandler extends IFinProxyHandlerItem.AppletTraceHandler {
requestUserAuthorization(): Promise<boolean> {
return new Promise((resolve, reject) => {
promptAction.showDialog({
title: '是否开启录制',
message: '开启录制将记录您的操作轨迹,用于合规回溯', // 添加更详细的说明
buttons: [
{
text: '确定',
color: '#409EFF'
},
{
text: '取消',
color: '#000000'
}
]
}).then(data => {
resolve(data.index !== 1)
})
})
}
}
// 注册回溯代理
FinAppProxyHandlerManager.appletTraceHandler = new AppletTraceHandler()
# 2. 录制文件管理
# 获取录制文件列表
获取当前用户在指定小程序下的所有录制文件列表。
/**
* @param appId - 小程序ID
* @param apiServer - API服务器地址
* @returns Promise<Array<String>> 录制文件列表
*/
const files = await client.getAppletTraceLogs(appId, apiServer)
# 删除录制文件
支持删除指定的录制文件。
/**
* @param filepath - 录制文件路径
* @returns Promise<void>
*/
await client.deleteAppletTraceLogFile(filepath)
# 上传录制文件
提供两种上传方式:
- 上传至 FinClip 管理后台
- 上传至自定义服务器
/**
* 上传录制文件至 FinClip 管理后台
* @param appId - 小程序ID
* @param apiServer - API服务器地址
* @param filepath - 录制文件路径
* @returns Promise<void>
*/
await client.reportAppletTraceLog(appId, apiServer, filepath)
# iOS接入
# 1. 用户授权管理
# 请求用户授权
小程序开启录制时,SDK 会触发小程序可回溯代理请求授权方法:requestUserAuthorization
。
- 若未设置可回溯代理或者未实现该方法,则默认按照同意授权进行处理
- 支持自定义实现,如添加用户授权弹窗
- 回调结果为 enableTrace: YES,开始录制
- 回调结果为 enableTrace: NO,不进行录制
示例代码:自定义授权弹窗
// 设置代理
[FATClient sharedClient].appletTraceDelegate = self;
// 实现代理方法
#pragma mark - FATAppletTraceDelegate
/// 请求用户的授权,是否同意开启可回溯功能
/// - Parameter completion: 完成的回调 enableTrace: true 代表同意开启可回溯功能
- (void)requestUserAuthorization:(void (^)(BOOL enableTrace))completion {
UIAlertController *vc = [UIAlertController alertControllerWithTitle:@"授权提醒" message:@"是否同意授权开启回溯功能" preferredStyle:UIAlertControllerStyleAlert];
[vc addAction:[UIAlertAction actionWithTitle:@"同意" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
completion(YES);
}]];
[vc addAction:[UIAlertAction actionWithTitle:@"不同意" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
completion(NO);
}]];
UIViewController *topVc = [[UIApplication sharedApplication] fat_topViewController];
[topVc presentViewController:vc animated:YES completion:nil];
}
# 2. 录制文件管理
# 获取录制文件列表
获取当前用户在指定小程序下的所有录制文件列表。
/// 获取所有小程序的可回溯日志文件路径
/// - Parameters:
/// - apiServer: 服务器地址
/// - appletId: 小程序id
///
- (NSArray<NSString *> *)getAppletTraceLogs:(NSString *)apiServer appletId:(NSString *)appletId;
NSArray<NSString *> *logsFile = [[FATClient sharedClient].appletTraceManager getAppletTraceLogs:apiServer appletId:appletId];
# 删除录制文件
支持删除指定的录制文件。
/// 根据可回溯日志文件路径删除可回溯日志文件
/// - Parameter filePath: 可回溯文件日志路径
/// - Parameter complete: 完成的回调
///
- (void)deleteAppletTraceLogFile:(NSString *)filePath complete:(void(^)(void))complete;
[[FATClient sharedClient].appletTraceManager deleteAppletTraceLogFile:path complete:^{
}];
# 删除所有录制文件
支持删除所有的录制文件。
/// 清除所有的小程序可回溯日志文件
/// - Parameter complete: 完成的回调
- (void)deleteAllAppletTraceLogFiles:(void(^)(void))complete;
[[FATClient sharedClient].appletTraceManager deleteAllAppletTraceLogFiles:^{
}];
# 上传录制文件
提供两种上传方式:
- 上传至 FinClip 管理后台
- 上传至自定义服务器
/// 上报可回溯日志至 Finclip 管理后台
/// - Parameters:
/// - filePath: 日志的文件路径
/// - apiServer: ApiServer
/// - appletId: 小程序ID
/// - success: 成功的回调
/// - failure: 失败的回调
///
- (void)reportAppletTraceLog:(NSString *)filePath apiServer:(NSString *)apiServer appletId:(NSString *)appletId success:(void(^)(void))success failure:(void(^)(NSString *errorMessage))failure;
[[FATClient sharedClient].appletTraceManager reportAppletTraceLog:path apiServer:apiServer appletId: appletId success:^{
} failure:^(NSString * _Nonnull errorMessage) {
}];
# Android接入
# 1. 用户授权管理
# 请求用户授权
小程序开启录制时,SDK 会触发小程序可回溯代理请求授权方法:requestUserAuthorization
。
通过callback的allowAuthorization(boolean)方法回调结果:
- 若未设置可回溯代理或者未实现该方法,则默认按照同意授权进行处理
- 支持自定义实现,如添加用户授权弹窗
- allowAuthorization(true),开始录制
- allowAuthorization(false),不进行录制
示例代码:自定义授权弹窗
// 小程序进程
FinAppProcessClient.appletTraceHandler = object : AppletTraceHandler() {
override fun requestUserAuthorization(
context: Context,
appId: String,
callback: Callback
) {
AlertDialog.Builder(context).apply {
setTitle("授权提醒")
setMessage("是否同意授权开启回溯功能")
setPositiveButton("同意") { dialog, _ ->
callback.allowAuthorization(true)
dialog.dismiss()
}
setNegativeButton("不同意") { dialog, _ ->
callback.allowAuthorization(false)
dialog.dismiss()
}
create().show()
}
}
}
# 2. 录制文件管理
# 获取录制文件列表
获取当前用户在指定小程序下的所有录制文件列表。
fun getAppletTraceLogs(
context: Context,
apiServer: String,
appId: String,
callback: FinCallback<List<String>>
)
FinAppClient.appletTraceManager.getAppletTraceLogs(context, apiServer, appId, callback)
# 删除录制文件
支持删除指定的录制文件。
fun deleteAppletTraceLogFile(context: Context, filePath: String): Boolean
FinAppClient.appletTraceManager.deleteAppletTraceLogFile(context, filePath)
# 删除所有录制文件
支持删除所有的录制文件。
fun deleteAllAppletTraceLogFiles(context: Context, callback: FinCallback<Any?>)
FinAppClient.appletTraceManager.deleteAllAppletTraceLogFiles(context, callback)
# 上传录制文件
提供两种上传方式:
- 上传至 FinClip 管理后台
- 上传至自定义服务器
fun reportAppletTraceLog(
context: Context,
apiServer: String,
appId: String,
filePath: String,
callback: FinCallback<Any?>
)
FinAppClient.appletTraceManager.reportAppletTraceLog(context, apiServer, appId, filePath, callback)