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

# 小程序可回溯功能

# 功能介绍

小程序可回溯是一项专业的用户行为记录功能,主要应用于:

  • 互联网保险销售场景
  • 在线理财产品销售
  • 其他需要合规留痕的金融场景

该功能可以:

  • 高性能记录用户操作轨迹
  • 精确还原交易场景
  • 满足金融监管合规要求
  • 提供完整的回溯管理能力

# 小程序接入

# 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)

# 上传录制文件

提供两种上传方式:

  1. 上传至 FinClip 管理后台
  2. 上传至自定义服务器
/**
 * 上传录制文件至 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:^{
    
}];

# 上传录制文件

提供两种上传方式:

  1. 上传至 FinClip 管理后台
  2. 上传至自定义服务器
/// 上报可回溯日志至 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)

# 上传录制文件

提供两种上传方式:

  1. 上传至 FinClip 管理后台
  2. 上传至自定义服务器
fun reportAppletTraceLog(
    context: Context,
    apiServer: String,
    appId: String,
    filePath: String,
    callback: FinCallback<Any?>
)

FinAppClient.appletTraceManager.reportAppletTraceLog(context, apiServer, appId, filePath, callback)
© FinClip with ❤ , Since 2017