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

# 代理方法

小程序的部分功能,需要原生端去实现才能调用,比如转发和获取主体App的用户信息等。

在2.37.13之前,所有的代理事件都添加在协议FATAppletDelegate中,所以 我们只需要设置[FATClient sharedClient].delegate即可。

而2.37.13之后,我们将代理方法按照功能做了拆分,您可根据需要设置对应的代理即可。 当然,旧版本的代理事件也是兼容的。需要注意的是:若同时实现的新的代理和旧的代理,那么只会响应新的代理方法。

  • configurationDelegate:小程序配置相关代理
  • buttonOpenTypeDelegate:小程序中button组件不同类型事件的代理
  • lifeCycleDelegate:小程序生命周期事件代理
  • moreMenuDelegate:更多视图相关的代理
  • waterMaskAndScreenCaptureDelegate:水印和截图、录屏相关代理
  • shareItemDelegate:分享按钮点击事件代理
  • authDelegate:小程序权限申请相关代理
  • customAboutViewControllerDelegate:小程序自定义关于页面相关代理
  • loadingPageLifeCycleDelegate:小程序加载loading页面的生命周期代理
  • logDelegate:小程序小程序日志输出的代理
  • appJsonDelegate:获取小程序appJson中内容的代理

设置示例

[FATClient sharedClient].configurationDelegate = self;
[FATClient sharedClient].buttonOpenTypeDelegate = self;
[FATClient sharedClient].lifeCycleDelegate = self;
[FATClient sharedClient].moreMenuDelegate = self;
[FATClient sharedClient].waterMaskAndScreenCaptureDelegate = self;
[FATClient sharedClient].shareItemDelegate = self;
[FATClient sharedClient].authDelegate = self;
[FATClient sharedClient].customAboutViewControllerDelegate = self;
[FATClient sharedClient].loadingPageLifeCycleDelegate = self;
[FATClient sharedClient].logDelegate = self;
[FATClient sharedClient].appJsonDelegate = self;


//[FATClient sharedClient].delegate = self;(2.37.13前 只有这一个代理)

# 1. configurationDelegate

FATAppletConfigurationDelegate中是小程序配置相关的代理事件。

# 1.1 灰度扩展参数配置

除了,我们平台提供的默认灰度配置项,您也可根据业务数据添加一些灰度控制项,这时业务参数小程序在打开时会通过如下代理方法来读取。

/// 小程序灰度扩展参数
/// @param appletId 小程序id
- (NSDictionary *)grayExtensionWithAppletId:(NSString *)appletId;

示例代码:

- (NSDictionary *)grayExtensionWithAppletId:(NSString *)appletId
{
    NSDictionary *grayExtension = @{@"key11":@"value1",@"key12":@"value2"};
    if ([appletId isEqualToString:@"5e017a61c21ecf0001343e31"]) {
        grayExtension = @{@"fckey1":@"fcvalue1"};
    }
    return grayExtension;
}

然后,SDK请求后台接口时会透传给后台服务匹配相关规则。

# 1.2 小程序配置项配置

初始化SDK时,可以设置一些通用的配置项,有的场景我们希望某个配置项只针对某个小程序生效,这时候就可以实现该代理方法。小程序在启动时,会通过该代理方法读取小程序的配置信息。

/// 给小程序设置配置项,使用场景:需要给某个特定小程序设置特殊配置项
/// @param appletInfo 小程序信息
- (FATAppletConfig *)getConfigWithAppletInfo:(FATAppletInfo *)appletInfo;

示例:

- (FATAppletConfig *)getConfigWithAppletInfo:(FATAppletInfo *)appInfo
{
    FATAppletConfig *appletConfig = [[FATAppletConfig alloc] init];
    appletConfig.header = @{@"userId":@"finclip18607180143",
                            @"User-Agent":@"finogeeks-Agent"
    };
    if ([appInfo.appId isEqualToString:@"5e017a61c21ecf0001343e31"]) {
        appletConfig.hideBackToHomeStatus = FATAppletConfigPositive;
    }
    
    return appletConfig;
}

# 1.3 设置小程序加载H5时的Cookie

小程序运行时,你可能想在打开H5页面时注入cookie,可以通过该代理方法进行配置

/// 设置小程序的Cookie
/// @param appletId 小程序id
- (NSDictionary *)getCookieWithAppletInfo:(NSString *)appletId;

示例:

- (NSDictionary *)getCookieWithAppletInfo:(NSString *)appletId {
    NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
    [cookieProperties setObject:@"Hm_apvt_0d885a47c55a66238287cbd00b79a117" forKey:NSHTTPCookieName];
    [cookieProperties setObject:@"finogeeks" forKey:NSHTTPCookieValue];
    [cookieProperties setObject:@".myqcloud.com" forKey:NSHTTPCookieDomain];
    [cookieProperties setObject:@"finogeeks.com" forKey:NSHTTPCookieOriginURL];
    [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
    [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
    [cookieProperties setObject:[NSDate dateWithTimeIntervalSinceNow:36000] forKey:NSHTTPCookieExpires];
    return cookieProperties;
}

# 1.4 验证 js-sdk config信息

当对js-sdk调用config进行验证时,会触发该代理事件。需要返回验证结果,成功或失败。

/// 验证 js-sdk config信息 (未实现该代理方法则默认为验证通过)
/// @param appletInfo 小程序信息
/// @param config 验证信息
/// @param completion 执行完后的回调,验证通过则code返回FATExtensionCodeSuccess,失败返回FATExtensionCodeFailure
- (void)applet:(FATAppletInfo *)appletInfo onJSSDKConfig:(NSDictionary *)config completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;

# 1.5 H5 Hook事件

如果宿主app 使用URLProtocol拦截了http 或https,会导致H5中的request 丢失body。我们SDK为了兼容这一问题,会hook request请求。在发起请求之前,先将body中的参数,通过代理方法传递给宿主App,宿主App可自行存储每个request的body,然后在自定义的URLProtocol里发起请求之前,组装上body内容。

所以,当H5中发起request 请求时,集成了我们的js-sdk,就会触发该代理事件。

/**
 小程序H5中发出的request包含body时会触发该事件
 requestInfo 中会包含
 bodyType: body内容的类型
 requestHref: request做在页面的链接
 requestId:请求id,每次请求都会构造,后续拦截请求时,可在query参数中通过FinClipHookBridge-RequestId匹配
 requestUrl:发起request时,请求的地址。
 value: request的body内容。
 示例
 {
     bodyType = String;
     requestHref = "http://aaronly.gitee.io/aymj";
     requestId = 16499170263357297;
     requestUrl = "https://www.finclip.com/api/v1/mop/mop-fast-trial-manager/web/visits/statistics";
     value = "{\"type\":\"download_click\"}";
 };
 */
- (void)applet:(FATAppletInfo *)appletInfo hookRequestInfo:(NSDictionary *)requestInfo;

# 2. buttonOpenTypeDelegate

小程序中的button 有一系列的open-type事件,有部分行为需要App来实现,所以也会通过代理方法来触发对应的事件

注意

2.37.13前的open-type事件相关的代理方法无返回值

# 2.1 share

open-type为share时,触发行为是转发,与 更多菜单里的转发按钮行为一样。都是要转发小程序至其他(比如IM房间)地方。所以,SDK会通过该代理事件,将小程序以及当前页面信息传递出来。若App要实现转发功能,实现该代理方法即可。

/** 转发事件
 当你点击小程序右上角更多里的转发菜单,或者 点击open-type属性为share的Button时,会触发小程序里shareAppMessage方法,然后回调到原生该方法
 @param contentInfo 小程序相关信息,里面包含小程序id、小程序名称、小程序图标、小程序截图(5:4)等。
 {
    appAvatar = "小程序图标地址";
    logoImage=UIImage对象,只有本地小程序且设置了该参数时,才包含。
    appDescription = "小程序的描述信息";
    appId = "小程序id";
    appInfo =  {}; // 客户可在appInfo中自定义字段,appInfo内容会透传
    appStartParams =     {
        path = "点击转发时的小程序页面路径";
    };
    appThumbnail = "小程序封面图的路径,可能是网络路径或者本地路径,宽高比是5:4";
    appTitle = "小程序名称";
    userId = "小程序开发者id";
}
 @param completion 执行完后的回调,如果你转发操作执行完后,希望告知小程序端转发结果,就需要调用该block。
 @return 实现该方法后返回YES
 参考链接:/develop/component/form.html#button
 */
- (BOOL)forwardAppletWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;

# 2.2 getUserInfo

调用获取用户信息API(getUserInfo) 或者 点击open-type属性为getUserInfo的Button时触发该代理事件

/**
 调用获取用户信息API(getUserInfo) 或者 点击open-type属性为getUserInfo的Button时触发
 @param appletInfo 小程序信息
 @param bindGetUserInfo 获取用户信息回调
 @return 实现该方法后返回YES
  result参考格式如下(可由宿主App自定义):
 {
    nickName = "昵称"
    avatarUrl = “头像地址”
    gender = "性别"
    province = "省份"
    city = "城市"
    country = "国家"
    userId = "值为[FATClient sharedClient].config.currentUserId" // sdk默认添加
    baseUrl = "值为appletInfo.apiServer" //// sdk默认添加
 }
*/
- (BOOL)getUserInfoWithAppletInfo:(FATAppletInfo *)appletInfo bindGetUserInfo:(void (^)(NSDictionary *result))bindGetUserInfo;

# 2.3 getUserProfile

调用获取用户信息的Api(getUserInfo) 时,会触发该代理方法。

/**
 调用获取用户信息API(getUserProfile)
 @param appletInfo 小程序信息
 @param bindGetUserProfile 获取用户信息回调
 result参考格式如下(可由宿主App自定义):
{
    code = 0c19xo000DiCWP1qgw2000xlSi49xo0u;
    userInfo =  {
         nickName = "昵称"
         avatarUrl = “头像地址”
         gender = "性别"
         province = "省份"
         city = "城市"
         country = "国家"
         is_demote = 1
         language = ""
        }
}
 参考链接:https://www.finclip.com/mop/document/develop/component/form.html#button
*/
- (BOOL)getUserProfileWithAppletInfo:(FATAppletInfo *)appletInfo bindGetUserProfile:(void (^)(NSDictionary *result))bindGetUserProfile;

# 2.4 contact

当open-type为contact时,会触发该代理事件。

/// Button open-type属性为contact,打开客服会话。
/// @param appletInfo 小程序信息
/// @param sessionFrom 会话来源
/// @param sendMessageTitle 会话内消息卡片标题
/// @param sendMessagePath 会话内消息卡片点击跳转小程序路径
/// @param sendMessageImg 会话内消息卡片图片
/// @param showMessageCard 小程序信息
/// @return 实现该方法后返回YES
- (BOOL)contactWithAppletInfo:(FATAppletInfo *)appletInfo sessionFrom:(NSString *)sessionFrom sendMessageTitle:(NSString *)sendMessageTitle sendMessagePath:(NSString *)sendMessagePath sendMessageImg:(NSString *)sendMessageImg showMessageCard:(BOOL)showMessageCard;

# 2.5 getPhoneNumber

当open-type为getPhoneNumber时,会触发该代理事件。

/// Button open-type属性为getPhoneNumber,获取用户手机号。
/// @param appletInfo 小程序信息
/// @param bindGetPhoneNumber 获取用户手机号回调
/// @return 实现该方法后返回YES
- (BOOL)getPhoneNumberWithAppletInfo:(FATAppletInfo *)appletInfo bindGetPhoneNumber:(void (^)(NSDictionary *result))bindGetPhoneNumber;

# 2.6 launchApp

当open-type为launchApp时,会触发该代理事件。

/// Button open-type属性为launchApp,打开APP。
/// @param appletInfo 小程序信息
/// @param appParameter 打开 APP 时,向 APP 传递的参数
/// @param bindError 打开 APP 发生错误的回调
/// @param bindLaunchApp 打开 APP 成功的回调
/// @return 实现该方法后返回YES
- (BOOL)launchAppWithAppletInfo:(FATAppletInfo *)appletInfo appParameter:(NSString *)appParameter bindError:(void (^)(NSDictionary *result))bindError bindLaunchApp:(void (^)(NSDictionary *result))bindLaunchApp;

# 2.7 feedback

open-type为feedback时,会触发该代理方法。如果App未实现该代理方法,则会打开 更多菜单里的 投诉反馈页面。

/// Button open-type属性为feedback,打开“意见反馈”页面。(APP 未实现时,则打开菜单栏里面的反馈)
/// @param appletInfo 小程序信息
/// @return 实现该方法后返回YES
- (BOOL)feedbackWithAppletInfo:(FATAppletInfo *)appletInfo;

# 2.8 chooseAvatar

open-type为chooseAvatar时,会触发该代理方法。

/// Button open-type属性为chooseAvatar,获取用户头像。
/// @param appletInfo 小程序信息
/// @param bindChooseAvatar 获取用户头像回调
/// @return 实现该方法后返回YES
- (BOOL)chooseAvatarWithAppletInfo:(FATAppletInfo *)appletInfo bindChooseAvatar:(void (^)(NSDictionary *result))bindChooseAvatar;

# 3. lifeCycleDelegate

小程序生命周期代理事件:didOpen、didClose、init、didActive、resignActive、didFail、dealloc。

# 3.1 小程序打开完成的事件

/**
 小程序打开完成的事件
 @param appletInfo 小程序info
 @param error 错误对象
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didOpenCompletion:(NSError *)error;

# 3.2 小程序关闭完成的事件

/**
 小程序关闭完成的事件
 @param appletInfo 小程序info
 @param error 错误对象
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didCloseCompletion:(NSError *)error;

# 3.3 小程序初始化完成,首页加载出来的事件

/**
 小程序初始化完成,首页加载出来的事件
 @param appletInfo 小程序info
 @param error 错误对象
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo initCompletion:(NSError *)error;

# 3.4 小程序进入活跃状态的事件

/**
 小程序进入活跃状态的事件
 @param appletInfo 小程序info
 @param error 错误对象
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didActive:(NSError *)error;

# 3.5 小程序进入非活跃状态的事件

/**
 小程序进入非活跃状态的事件
 @param appletInfo 小程序info
 @param error 错误对象
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo resignActive:(NSError *)error;

# 3.6 小程序出错的事件

/**
 小程序出错的事件
 @param appletInfo 小程序info
 @param error 错误对象
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didFail:(NSError *)error;

# 3.7 小程序被销毁的事件

/**
 小程序被销毁的事件
 @param appletInfo 小程序info
 @param error 错误对象
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo dealloc:(NSError *)error;

# 4. moreMenuDelegate

更多视图面板相关的代理事件,这些代理方法可实现自定义更多视图 或自定义更多视图里的菜单项。

# 4.1 右上角胶囊中 【...】的点击事件

可在该事件中弹出自己设计的更多视图,返回YES,代表您要自己自定义更多视图;返回NO或不实现,代表不自定义更多视图。

/**
 右上角胶囊中 【...】的点击事件,可在该事件中弹出自己设计的更多视图。
 因此实现了该代理事件,就不会触发下面两个自定义菜单的事件
 @param appletInfo 小程序信息
 @path 小程序页面路径,示例:pages/index/index
 */
- (BOOL)appletInfo:(FATAppletInfo *)appletInfo didClickMoreBtnAtPath:(NSString *)path;

# 4.2 自定义更多视图中菜单项的代理方法

更多按钮中自定义的菜单,会在页面弹出菜单时调用该api来获取自定义菜单项的数据源

/**
 更多按钮中自定义的菜单,会在页面弹出菜单时调用该api
 @param appletInfo 小程序信息
 @param path 页面路径
 */
- (NSArray<id<FATAppletMenuProtocol>> *)customMenusInApplet:(FATAppletInfo *)appletInfo atPath:(NSString *)path;

# 4.3 点击自定义菜单时,会触发的事件

/**
 点击自定义菜单时,会触发的事件(新版)
 只有实现了该代理方法,才会触发【-clickCustomItemMenuWithInfo:completion:】
 @param contentInfo 分享信息
 @param appletInfo 小程序信息
 @param completion 分享回调(小程序分享回调:1.【code】回调状态码;2.【result】回传给小程序的回调信息)
 */
- (void)clickCustomItemMenuWithInfo:(NSDictionary *)contentInfo inApplet:(FATAppletInfo *)appletInfo completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;

# 4.4 点击添加到桌面时触发的代理方法

/**
 点击添加到桌面时触发的代理方法
 @param appletInfo 小程序信息
 @param desktopDict 拓展参数
*/
- (void)applet:(FATAppletInfo *)appletInfo addToDesktop:(NSDictionary *)desktopDict;

# 4.5 点击关闭按钮时触发的代理方法

/**
 右上角胶囊中关闭按钮的点击事件
 @param appletInfo 小程序info
 @param decisionHandler  是否允许关闭的回调,可在回调前执行相关业务处理
 */
-(void)appletInfo:(FATAppletInfo *)appletInfo decideCloseWithDecisionHandler:(void(^)(BOOL allowClose))decisionHandler;

# 5. waterMaskAndScreenCaptureDelegate 录屏、截屏、水印事件

# 5.1 小程序录屏代理事件

/// 录屏事件回调
/// @param appletInfo  录屏事件时,当前正在运行的小程序
/// @param isCapture  是否在录制屏幕
/// @param pagePath  录屏事件时,小程序当前的页面路径
- (void)applet:(FATAppletInfo *)appletInfo screenCaptureStatusChanged:(BOOL)isCapture atPagePath:(NSString *)pagePath;

# 5.2 小程序截屏代理事件

/// 截屏事件回调
/// @param appletInfo 截屏时,当前正在运行的小程序
/// @param pagePath  截屏时,小程序当前的页面路径
- (void)appletDidTakeScreenshot:(FATAppletInfo *)appletInfo atPagePath:(NSString *)pagePath;

# 5.3 小程序水印代理事件

在页面将要显示时,会调用该代理方法。如果要在页面上添加水印,可在这里的水印容器视图上绘制内容即可。

/// 自定义添加水印
/// @param appletInfo 小程序信息
/// @param watermaskView 水印容器视图,可在这个视图添加文字或图片等水印内容
- (void)applet:(FATAppletInfo *)appletInfo customizeWatermarkView:(UIView *)watermaskView;

# 6. shareItemDelegate

# 6.1 小程序分享按钮点击的代理事件

/**
 点击菜单栏的分享按钮会触发的代理的方法
 @param dic 小程序分享所需要的参数
 */
- (void)didClickShareItemWithAppletInfo:(NSDictionary *)dic;

# 7. authDelegate

小程序申请权限流程中的一系列相关代理方法,app可以通过这些代理方法拦截小程序权限申请、获取小程序权限申请结果、打开自定义设置页面等功能。

# 7.1 拦截小程序的权限申请

sdk通过调用代理的这个方法通知App某个小程序正在申请某个权限,app可以返回是否允许的结果。其中scopeScene为YES,则表示只申请小程序级别的权限,不会向系统申请权限

/// 小程序申请权限
/// - Parameters:
///   - appletInfo: 小程序信息
///   - authType: 权限类型
///   - scopeScene: 是否是小程序维度的权限申请
///   - grantCompletion: 是否允许的回调
- (void)applet:(FATAppletInfo *)appletInfo
   requestAuth:(FATAuthorizationType)authType
    scopeScene:(BOOL)scopeScene
applyCompletion:(void(^)(BOOL allowApply))grantCompletion;

# 7.2 小程序申请权限的结果

sdk通过调用代理的这个方法通知App某个小程序申请某个权限的结果。

/// 小程序申请权限的结果
/// - Parameters:
///   - appletInfo: 小程序信息
///   - authType: 申请的权限类型
///   - status: 权限申请的结果
- (void)applet:(FATAppletInfo *)appletInfo didRequestAuth:(FATAuthorizationType)authType withResult:(FATAuthorizationStatus)status;

# 7.3 是否配置了自定义的设置页面

sdk通过调用代理的这个方法询问App某个小程序是否配置了自定义的设置页面。

/// 是否自定义小程序的设置页面
/// - Parameter appletInfo: 小程序信息
- (BOOL)appletCustomizeSettingPage:(FATAppletInfo *)appletInfo;

# 7.4 显示自定义的设置页面

sdk通过调用这个代理方法显示自定义的设置页面。

/// 显示自定义的小程序页面
/// - Parameters:
///   - appletInfo: 小程序信息
///   - navigationController: 当前小程序的导航控制器
- (void)applet:(FATAppletInfo *)appletInfo openSettingPageWithNavigationController:(UINavigationController *)navigationController;

# 7.5 配置申请权限时隐私协议弹框的文案

sdk通过调用这个代理方法返回隐私协议弹框的文案,目前支持设置弹框标题、内容,其中内容中包含隐私协议名字需要跟在管理后台配置的一致,sdk会在内容中匹配管理后台配置的隐私协议名字,加上可点击效果,点击后打开管理后台配置的隐私协议链接。 2.43.9版本FATPrivacyAlertInfo新增了docName和docUrl,可配置自定义隐私协议名称和链接,显示弹框时会匹配配置的协议名称,加上可点击效果,点击后打开配置的协议链接。

/// 小程序的隐私协议弹框文案配置
/// - Parameters:
///   - appletInfo: 小程序信息
///   - authType: 申请的权限类型
///   - completion: 文案信息回调
- (void)applet:(FATAppletInfo *)appletInfo getPrivacyAlertInfo:(FATAuthorizationType)authType completion:(void(^)(FATPrivacyAlertInfo *alertInfo))completion;

# 7.6 设置小程序自定义隐私协议信息

sdk通过调用这个代理方法获取自定义隐私协议信息(名称和链接),关于页面会优先显示这个代理方法返回的自定义隐私协议名称,并会加上可点击效果,点击后打开对应链接。

/// 小程序的隐私协议自定义配置
/// - Parameters:
///   - appletInfo: 小程序信息
///   - completion: 自定义隐私协议信息回调
- (void)applet:(FATAppletInfo *)appletInfo getCustomPrivacyInfoWithCompletion:(void(^)(FATPrivacyCustomInfo *privacyInfo))completion;

# 7.7 自定义小程序隐私协议点击事件

当app实现该代理方法后,返回true,则代表app期望自定义隐私协议点击事件;返回false,代表走sdk默认的隐私协议点击处理。

/// 是否自定义隐私协议点击事件
/// 注意:返回值很重要。返回值为true,表示你需要自己实现协议点击行为,不会跳转至SDK内的协议页面;返回值为false,表示走默认的协议点击行为,跳转至SDK内协议页面
/// - Parameters:
///   - appletInfo: 小程序信息
///   - privacyContentInfo: 隐私协议内容信息。docUrl为空时,表示默认的隐私协议。
- (BOOL)applet:(FATAppletInfo *)appletInfo shouldChangePrivacyClickAction:(FATPrivacyContentInfo *)privacyContentInfo;

# 7.8 小程序权限变更的代理方法

当在小程序的设置页面修改小程序的权限时,可通过这个代理方法获取对应的变更类型和变更的结果

/// 小程序权限变更的代理方法
/// - Parameters:
///   - appletInfo: 小程序信息
///   - authType: 权限类型
///   - status: 权限变更的结果
- (void)AppleAuthChange:(FATAppletInfo *)appletInfo withAuthType:(id)authType withResult:(FATAuthorizationStatus)status;

# 8. customAboutViewControllerDelegate

小程序自定义关于页面相关的代理方法 ,app可以通过这些代理方法配置是否自定义关于页面,设置自定义的关于页面

# 8.1 是否自定义关于页面

sdk可以通过这个代理方法配置是否需要自定义关于页面,返回true则自定义

/**
 是否自定义关于页面
 @return 返回是否自定义关于页面
 */
- (BOOL)customAboutViewController;

# 8.2 自定义的关于页面

sdk可以通过这个代理方法配置自定义的关于页面。

/**
 自定义关于页面
 @param appletInfo 小程序信息
 @return 实现该方法后返回自定义的关于页面
 */
- (UIViewController *)customAboutViewControllerApplet:(FATAppletInfo *)appletInfo;

# 9. loadingPageLifeCycleDelegate

小程序loading页面的相关代理方法,app可以通过这些代理方法在loading页面弹出自定义视图,小程序会等待自定义视图相关页面逻辑完成后再继续打开小程序。

# 9.1 是否在loading页显示自定义视图

sdk可以通过这个方法配置是否需要在某个小程序启动后展示自定义的视图

/// 是否要在加载小程序的loading页展示自定义内容
/// @param appletInfo 小程序
/// @return 是否要显示自定义的内容(比如第三方内容跳转提醒) 返回NO,代表不需要自定义内容;返回YES,代表需要自定义内容,会阻断loading页逻辑。需要(-appletInfo:showCustomContentInLoadingView:completion:)的completionHandler里回调里选择退出还是继续执行。
- (BOOL)appletInfoShouldShowCustomContent:(FATAppletInfo *)appletInfo;

# 9.2 在loading页显示自定义视图

sdk可以通过这个方法在loading页弹出自定义视图,完成相关业务逻辑后,通过回调继续后面的小程序业务逻辑。

/// loadingView显示自定义的内容
/// @param appletInfo 小程序对象
/// @param loadingView loadingView (自定义的内容可以添加到这个视图)
/// @param completionHandler 自定义内容视图显示完毕的回调。resume返回YES,会继续加载小程序;resume返回NO,则退出小程序。
- (void)appletInfo:(FATAppletInfo *)appletInfo showCustomContentInLoadingView:(FATBaseLoadingView *)loadingView completionHandler:(void(^)(BOOL resume))completionHandler;

# 10. logDelegate

小程序日志输出的代理。我们可以使用日志管理中的api,来设置输出哪些等级的日志。然后,就可以在该代理方法中获取到日志内容。

# 10.1 获取所有log日志内容

/// 日志输出回调(当实现了这个代理方法,日志不写入到 xlog 中)
- (void)logMessage:(NSString *)message;

/// 输出性能数据记录回调
/// @param appletInfo 小程序信息
/// @param records 性能统计数据数组
- (void)applet:(FATAppletInfo *)appletInfo receivePerformanceRecords:(NSArray<FATPerformanceModel *> *)records;

# 10.2 获取小程序性能数据日志

/// 输出性能数据记录回调
/// @param appletInfo 小程序信息
/// @param records 性能统计数据数组
- (void)applet:(FATAppletInfo *)appletInfo receivePerformanceRecords:(NSArray<FATPerformanceModel *> *)records;

示例代码:

// 1.设置代理
[FATClient sharedClient].logDelegate = self;

// 2.实现代理方法
- (void)logMessage:(NSString *)message {
    NSLog(@"logMessage:%@", message);
}

- (void)applet:(FATAppletInfo *)appletInfo receivePerformanceRecords:(NSArray<FATPerformanceModel *> *)records {
    
}

# 11. appJsonDelegate

宿主app可以设置该代理,来获取小程序的appJson信息。 该代理方法返回的小程序信息是将app.json 以及各个page.json 处理合并之后的完整配置信息。

# 11.1 获取小程序全局以及页面配置信息

/// 收到小程序appJson的代理事件
/// - Parameters:
///   - appletInfo: 小程序对象
///   - appJson: 小程序app.json和page.json合并的字典
- (void)applet:(FATAppletInfo *)appletInfo didReceiveAppJson:(NSDictionary *)appJson;

© FinClip with ❤ , Since 2017