# 其他方法
这里一般都是通用方法,不区分小程序、小游戏、H5应用
# 1.handleOpenURL
在小程序管理中,讲到使用URL Scheme 打开小程序时,需要在App 的(AppDelegate 或SceneDelegate)代理事件中调用该方法,才能打开指定的小程序。
/*
处理URL
@param URL 具体的URL路由
URL格式:${scheme}://applet/appid/${appId}?path=${path}&query=${encode过的queryDict}&apiServer=${apiServer}
例如:fatae55433be2f62915://applet/appid/617bb42f530fb30001509b27?path=/packages/d/index&query=key%3Dvalue%26name%3Dtable&apiServer=https://www.finclip.com/
其中,必须有的是scheme和appId,如:fatae55433be2f62915://applet/appid/617bb42f530fb30001509b27
*/
- (BOOL)handleOpenURL:(NSURL *)URL;
如果希望在Safari浏览器或其他App中打开自己的APP中的小程序,需要实现- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
方法。
示例代码:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
if ([[FATClient sharedClient] handleOpenURL:url]) {
return YES;
}
return YES;
}
# 2.handleOpenUniversalLinkURL
如果想要使用Universal Link 方式打开小程序,则需要在合适的代理方法中调用该方法。
/*
处理Universal Link
@param URL Universal Link URL
URL格式:${UniversalLink}?appid=${appId}&path=${path}&query=${encode过的queryDict}&apiServer=${apiServer}
例如:https://www.finclip.com/mop/scattered-page/#/mop-download?appid=xx&query=xxx&path=xxx
其中,必须有的是UniversalLink和appId,如https://www.finclip.com/mop/scattered-page/#/mop-download?appid=xx
*/
- (BOOL)handleOpenUniversalLinkURL:(NSURL *)URL;
同上面的handleOpenURL一样,如果想要支持universal link 的方式打开小程序。也得实现- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler
方法。
示例代码:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
NSLog(@"url = %@",url.absoluteString);
return [[FATClient sharedClient] handleOpenUniversalLinkURL:url];
}
return YES;
}
# 3.更多面板里的处理事件
当我们自定义更多小程序面板时,虽然UI是自己设计的,但是部分功能还可以复用SDK里的,比如 关于页面、设置页面、投诉反馈、转发等。可以在按钮的点击事件里调用FATMoreMenuHelper
下面的api来实现跳转和相应的逻辑。
# 3.1 跳转至关于小程序页面
/// 打开小程序的关于页面
/// @param appletId 小程序id
+ (void)goToAboutPage:(NSString *)appletId;
示例代码:
[FATMoreMenuHelper goToAboutPage:@"6007a0a122bad000012813eb"];
# 3.2 触发转发事件
/// 触发转发事件,用来获取转发时用到的小程序信息, 获取到小程序信息后,会触发- (void)forwardAppletWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode, NSDictionary *))completion 这个回调
/// @param appletId 小程序id
+ (void)invokeForwardMenuAction:(NSString *)appletId;
示例代码:
[FATMoreMenuHelper invokeForwardMenuAction:@"6007a0a122bad000012813eb"];
# 3.3 跳转至投诉反馈页面
/// 打开小程序的意见反馈页面
/// @param appletId 小程序id
+ (void)goToFeedbackPage:(NSString *)appletId;
示例代码:
[FATMoreMenuHelper goToFeedbackPage:@"6007a0a122bad000012813eb"];
# 3.4 跳转至设置页面
/// 打开小程序的设置页面
/// @param appletId 小程序id
+ (void)goToSettingPage:(NSString *)appletId;
示例代码:
[FATMoreMenuHelper goToSettingPage:@"6007a0a122bad000012813eb"];
# 3.5 获取小程序的debug模式
/// 获取小程序是否打开debug模式
/// @param appletId 小程序id
+ (BOOL)isEnableAppletDebug:(NSString *)appletId;
示例代码:
BOOL enableDeubg = [FATMoreMenuHelper isEnableAppletDebug:@"6007a0a122bad000012813eb"];
# 3.6 设置小程序的debug模式
/// 打开/关闭小程序的debug模式 如果config设置了enableAppletDebug为FATBOOLStateTrue,执行打开/关闭debug模式操作会无效
/// @param appletId 小程序id
/// @param enable 允许debug模式
+ (void)setEnableAppletDebug:(NSString *)appletId enable:(BOOL)enable;
示例代码:
[FATMoreMenuHelper setEnableAppletDebug:@"6007a0a122bad000012813eb" enable:YES];
# 3.7 检测小程序是否实现自定义菜单功能
由于部分自定义菜单需要小程序返回数据,功能类似onShareAppMessage的实现。可以调用如下方法判断小程序当前页面是否实现了on{menuId}ButtonHandler方法。
/// 检测小程序是否实现自定义菜单功能
/// @param appletId 小程序id
/// @param menuIds 自定义图标ID数组
/// @param complete 结果回调
+ (void)checkMenus:(NSString *)appletId menuIds:(NSArray<NSString *> *)menuIds complete:(void(^)(NSArray *result))complete;
示例代码:
[FATMoreMenuHelper checkMenus:@"6007a0a122bad000012813eb" menuIds:@[@"Dingding", @"Weibo"] complete:^(NSArray * _Nonnull result) {
}];
# 3.8 获取自定义菜单项的数据
针对于需要小程序返回数据的自定义菜单项,可以调用该方法获取到对应小程序页面on{menuId}ButtonHandler方法返回的小程序信息。
/// 获取自定义菜单项的数据(需要小程序配合实现的菜单项,需要小程序提供额外调用参数)
/// @param appletId 小程序id
/// @param menuId 图标ID
/// @param complete 结果回调
+ (void)getMiniProgramTypeMenuData:(NSString *)appletId menuId:(NSString *)menuId complete:(void(^)(NSDictionary *result,FATAppletInfo *appletInfo))complete;
示例代码:
[FATMoreMenuHelper getMiniProgramTypeMenuData:@"6007a0a122bad000012813eb" menuId:@"Weibo" complete:^(NSDictionary * _Nonnull result, FATAppletInfo * _Nonnull appletInfo) {
}];
# 4.生成token
/// 生成token。
/// 根据原始字符串,加上特殊字符,使用国密生成token。
/// @param originText 原始字符串
- (NSString *)generateTokenWithOriginText:(NSString *)originText;
示例代码:
NSString *token = [[FATClient sharedClient].toolManager generateTokenWithOriginText:@"6007a0a122bad000012813eb"];
# 5.解密token
/// 解密token,获取token里的原始字符串
/// @param token 使用generateTokenWithOriginText:生成的token
- (NSString *)originTextWithToken:(NSString *)token;
示例代码:
NSString *originText = [[FATClient sharedClient].toolManager originTextWithToken:token];
# 6.自定义事件数据上报
/// 自定义事件数据上报
/// @param appletId 小程序ID
/// @param eventName 自定义事件名称
/// @param data 自定义事件数据
- (BOOL)reportEventWithAppletId:(NSString *)appletId eventName:(NSString *)eventName data:(NSDictionary *)data;
示例代码:
BOOL result = [[FATClient sharedClient].toolManager reportEventWithAppletId:##appletId## eventName:##eventName## data:##data##];
# 7.宿主App输入日志到小程序的vConsole
/// 向小程序vConsole插入一条日志,单条日志长度最大为1024*4
/// @param logMsg 日志内容
/// @param consoleLevel 日志等级
/// @param appletId 小程序id
/// @param completion 调用结果回调:error code为FATErrorCodeAppletNotFound,未找到appletId指定小程序;error code为FATErrorCodeAppletConsoleNotReady,小程序控制台未准备好
- (void)addConsoleLog:(NSString *)logMsg
consoleLevel:(FATConsoleLevel)consoleLevel
appletId:(NSString *)appletId
completion:(void (^)(BOOL success, FATError *error))completion;
示例代码:
[[FATClient sharedClient].toolManager addConsoleLog:@"xxxxx你需要打印的日志内容" consoleLevel:FATConsoleLevelWarn appletId:@"需要把日志输入在哪个小程序的vConsole上面的小程序id" completion:nil];
# 8. 获取小程序的loading视图
/// 获取小程序启动时的加载视图,小程序加载完成或小程序未打开,返回nil
/// @param appletId 小程序id,传nil则返回当前小程序的loading视图
- (FATBaseLoadingView *)getAppletTransitionLoadingView:(NSString *)appletId;
# 9. 生成SM2公私钥
国密SM2生成一对公钥和私钥
/**
国密SM2生成公钥和私钥
@return @{@"private_key": @"", @"public_key": @"" }
*/
- (NSDictionary *)SM2MakeKey;
# 10. 使用SM2 私钥解密
/**
国密SM2解密
@param cipherText 加密串
@param privateKey 私钥
@return 解密后的结果
*/
- (NSString *)decodeSM2:(NSString *)cipherText privateKey:(NSString *)privateKey;
# 11. 删除指定URL对应的cookie
/// 删除指定URL对应的cookie
/// @param URL 指定的URL
/// @param completionHandler 删除完毕的回调
- (void)deleteCookiesWithURL:(NSURL *)URL completionHandler:(void (^)(void))completionHandler;
示例代码:
[[FATClient sharedClient].toolManager deleteCookiesWithURL:[NSURL URLWithString:@"指定的url"] completionHandler:nil];
# 12. 删除所有cookie
/// 删除所有的cookies
/// @param completionHandler 删除完毕的回调
- (void)deleteAllCookiesWithCompletionHandler:(void (^)(void))completionHandler;
示例代码:
[[FATClient sharedClient].toolManager deleteAllCookiesWithCompletionHandler:nil];