# SDK 初始化
注意
小程序、小游戏、H5应用都是用的是同一个SDK,所以初始化SDK的逻辑都是一样的。
在使用小程序的API之前,需要先初始化小程序SDK。只有成功初始化之后,才能使用SDK提供的API,否则API调用会失败。
# 1. 初始化
# API
/**
 * 初始化小程序SDK
 *
 * @param application  [android.app.Application]实例
 * @param finAppConfig [FinAppConfig]实例,小程序框架的配置信息
 * @param finCallback 初始化状态回调接口
 */
fun init(application: Application, finAppConfig: FinAppConfig, finCallback: FinCallback<Any?>?)
# 调用示例
注意
- 从2.13.102版本开始,FinClip 小程序 SDK 支持配置多个服务器信息,可以同时打开多个不同服务器上的小程序,所以我们提供了配置多个服务器信息的方式。
- 以Builder().setSdkKey和Builder().setSdkSecret方式初始化单服务器的方法未来可能会禁用,请优先使用多服务器初始化的方式。
# 2. 配置项
# FinAppConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| finStoreConfigs | List<FinStoreConfig> | 小程序服务器配置信息集合 | 
| userId | String | 当前用户唯一标识,小程序缓存信息会存储在以userId命名的不同目录下,如需在后续逻辑中修改userId,则可以直接使用 FinAppClient.INSTANCE.getFinAppConfig().setUserId("newUserId") | 
| memberUserId | String | 成员标识,用于打开体验版、开发版。如果未设置会取userId,需要跟管理平台体验、开发成员列表的用户标识匹配 | 
| channel | NSString | 渠道标识,如果不填,默认为项目的 AppliationId,小程序插件中实现getPhoneNumber和login会用到。 | 
| phone | NSString | 手机号,也可以是一个Token,非必传,小程序插件中实现getPhoneNumber会用到。 | 
| encryptUserId | boolean | (后台接口)是否对userId进行加密传输,需要确保后台服务升级至1.4.1以上,否则加密会导致接口请求失败,默认为false | 
| productIdentification | String | 产品的标识,配置会将文件夹、UserAgent里的FinClip 等标识改为配置后的值。设置后需要新增fin_applet_custom_provider_paths.xml文件,配置说明请查看后续注意事项。 | 
| isDebugMode | boolean | 应用当前是否是Debug模式。 | 
| isEnableLog | boolean | 是否开启日志 | 
| isEnableXLogConsole | boolean | 是否开启XLog的控制台日志,若为false,则仅持久化日志,不在控制台显示 | 
| apmExtendInfo | Map<String, Object> | apm统计的扩展信息。 | 
| disableRequestPermissions | boolean | 是否禁止SDK触发权限申请,默认为false,如果设置为true,则SDK内使用权限的api,不会主动申请权限。 | 
| needToRemoveCookiesDomains | List<String> | 初始化SDK时需要移除cookies的域名列表 | 
| disableTbs | boolean | 是否禁用tbs sdk | 
| customWebViewUserAgent | String | 需要添加至UserAgent中的内容 | 
| webViewMixedContentMode | int | WebView 加载混合内容的模式,可选项: -1,不设置 WebView 加载混合内容的模式。 0,设置 WebView 允许加载混合内容。 1,设置 WebView 不允许加载混合内容。 2,设置 WebView 允许加载部分混合内容。一部分不安全的内容可能被允许由安全来源加载,另一部分不安全的内容则会被阻止。允许或阻止的内容类型随 WebView 版本变化而变化,没有明确定义。适用于无法控制 WebView 内容但希望能在安全的环境中运行应用程序的场景。 为了获得最高的安全性,建议设置为不允许加载混合内容。 | 
| allowWebViewCrossOrigin | boolean | 是否允许WebView跨域资源共享。默认为true。 开启时,部分场景下会因为处理大量长时间无响应的图片等资源请求导致WebView进入到等待状态,导致小程序页面白屏、卡顿问题。 如遇到此类问题可以尝试关闭此配置。 | 
| appletIntervalUpdateLimit | int | 后台自动检查更新的小程序个数,取值范围:0~50。0代表不检查更新;不设置默认是3。 | 
| maxRunningApplet | int | 可同时运行的小程序个数 ,默认为5 | 
| foregroundServiceConfig | ForegroundServiceConfig | 是否在小程序运行时开启宿主app的前台服务,开启后可防止app进程被系统杀死 | 
| bindAppletWithMainProcess | boolean | 小程序进程是否与app主进程绑定,如果设置为true,则主进程被杀死时,小程序进程同步关闭(备注:部分机型在任务列表里面清理掉主进程,并不能真实杀掉主进程,所以无法同时清理掉小程序进程。) | 
| killAppletProcessNotice | String | app主进程被杀后关闭小程序的提示文案 | 
| appletText | String | 小程序文案,默认为“小程序”,你可以设置为"快应用","轻应用" | 
| enableApmDataCompression | boolean | apm数据上报时,是否压缩数据 | 
| disableGetSuperviseInfo | boolean | 是否禁用SDK的监管接口API,默认为false,如果设置为true,则SDK禁用监管接口API(getSuperviseInfo) | 
| appletAutoAuthorize | boolean | 是否允许SDK自动授予小程序权限。默认为false.如果设置为true,则小程序里首次触发权限时不会展示权限弹框 | 
| appletDebugMode | AppletDebugMode | 是否开启小程序的vconsole调试 | 
| pageCountLimit | int | 小程序中页面栈个数的最大限制。默认值为0,表示不限制。 | 
| minAndroidSdkVersion | int | 最低支持的Android SDK版本 | 
| appletConfigFactory | IAppletConfigFactory | 单个小程序配置的实现类 | 
| enableScreenShot | boolean | 是否允许截屏、录屏,默认为true | 
| screenShotPriority | FinAppConfigPriority | 截屏录屏配置项的优先级,默认GLOBAL | 
| enableWatermark | boolean | 是否开启水印,默认为false | 
| watermarkPriority | FinAppConfigPriority | 屏水印配置项的优先级,默认GLOBAL | 
| watermarkFactoryClass | String | 水印View的类名 | 
| header | Map<String, String> | 小程序中网络(request/uploadFile/downloadFile)请求的header | 
| headerPriority | FinAppConfigPriority | header配置优先级,默认GLOBAL | 
| offlinePackageFactoryClass | String | 离线小程序分包package文件获取类的类名 | 
| navigateDelegate | NavigateDelegate | 离线小程序打开其他小程序的代理 | 
| logLevel | XLogLevel | 要记录的日志的等级 | 
| logMaxAliveSec | long | 日志文件最长缓存时间,单位秒。最小不能小于1天,即不能小于 1 * 24 * 60 * 60 秒 | 
| xLogDir | String | 自定义日志文件的存放路径 | 
| offlineAccountInfoClass(废弃) | String | 离线小程序AccountInfo实现类的类名 | 
| schemes | String[] | 自定义的scheme数组。 SDK内部默认支持微信、支付宝、 FinClip App 、tel这些scheme | 
| enablePreNewProcess | boolean | 是否提前创建进程,默认为true | 
| logDelegate | String | 接收XLog日志输出的代理类的类名 | 
| performanceRecordDelegate | String | 接收性能日志输出的代理类的类名 | 
| shareAppletHandlerClass | String | 更多菜单里的分享按钮事件代理类的类名 | 
| appJsonHandlerClass | String | 接收小程序app.json的代理类的类名 | 
| locale | Locale | sdk 公共UI的语言类型,目前仅支持中文和英文,默认为简体中文 | 
| logDelegate | String | 接收XLog日志输出的代理类的类名 | 
| authRequestHandlerClass | String | scope请求或系统权限申请的前置处理代理类的类名 | 
| authResultHandlerClass | String | scope请求或系统权限申请的申请结果回调代理类的类名 | 
| scopeSettingHandlerClass | scope设置页的代理类的类名 | |
| authInfoHandlerClass | String | 获取隐私协议详情弹框标题和文案的代理类的类名 | 
| enableWebViewDownloadFile | boolean | 是否允许 web-view 组件下载文件,默认为 true | 
| backgroundFetchPeriod | int | 周期性更新的时间间隔(小时), 设置为0不会发起周期性更新以及数据预拉取请求,接收设置范围为3-12小时 | 
| enableHoleRender | boolean | 开启webView打洞同层渲染,仅仅支持组件(live-player、live-pusher)优先级高于X5同层渲染(注意事项参看初始化集成 (opens new window) 第3.6) | 
| privacyHandlerClass | String | 获取隐私协议信息的代理类的类名 | 
| authDescStrategy | int | 小程序权限说明配置策略(AUTH_DESC_STRATEGY_NONE:默认方式,小程序有配置权限说明则显示配置的,没配置则不显示 ; AUTH_DESC_STRATEGY_SHOW_DEFAULT:小程序有配置权限说明则显示配置的,没配置显示内置的权限信息 ; AUTH_DESC_STRATEGY_FORBIDDEN:小程序没有配置权限说明,不允许申请权限) | 
| hideLandscapeStatusBar | boolean | 横屏时是否隐藏状态栏 | 
FinAppConfig配置示例:
注意
setProductIdentification:在2.38.1版本后新增,需要注意的是,productIdentification中不能使用空白字符以及特殊字符,当使用了setProductIdentification进行自定义产品标识时,需要自定义paths文件,以ProductIdentification值为happy为例,在res/xml路径下,新增名为fin_applet_custom_provider_paths的xml文件,文件名不能更改。文件内容如下:
<!-- 文件名必须为fin_applet_custom_provider_paths.xml, 用于同名替换 --/>
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <files-path name="happy_uri" path="happy"/>
</paths>
经过以上设置,一个路径为/internal storeage/packageName/files/happy/hello.jpg的文件,其对应的uri为content://com.finogeeks.finosprite.applet.provider/happy_uri/hello.jpg。
# FinStoreConfig配置项
| 配置名称 | 类型 | 是否必填 | 说明 | 
|---|---|---|---|
| sdkKey | String | 是 | 创建应用时生成的sdkKey | 
| sdkSecret | String | 是 | 创建应用时生成的sdkSecret | 
| apiServer | String | 是 | 服务器地址,客户部署的后台地址 | 
| apmServer | String | 否 | apm事件上报的服务器地址,不设置时使用apiServer | 
| cryptType | String | 否 | SDK与小程序管理平台接口通信时签名生成方式。默认为"MD5",也可以设置为"SM"(国密) | 
| fingerprint | String | 否 | SDK指纹,在证联环境时必须传,否则接口访问不通 | 
| encryptServerData | Boolean | 否 | 默认为false。目前只能设置为false,设置为true会导致接口访问失败 | 
| enablePreloadFramework | Boolean | 否 | 默认为true。是否预下载基础库,如果设置为false,则初始化SDK时不会预下载基础库 | 
# UIConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| isAlwaysShowBackInDefaultNavigationBar | boolean | 是否始终显示返回按钮 | 
| navigationBarTitleTextLayoutGravity | int | 导航栏标题相对父控件的Gravity | 
| navigationBarTitleLightColor | Integer | 导航栏标题文字浅色颜色,用于深色主题 | 
| navigationBarTitleDarkColor | Integer | 导航栏标题文字深色颜色,用于浅色主题 | 
| navigationBarBackBtnLightColor | Integer | 导航栏返回按钮的浅色颜色,用于深色主题 | 
| navigationBarBackBtnDarkColor | Integer | 导航栏返回按钮的深色颜色,用于浅色主题 | 
| isClearNavigationBarNavButtonBackground | boolean | 是否清除导航栏按钮的背景 | 
| isHideFeedbackAndComplaints | boolean | 是否隐藏"更多"菜单中的"反馈与投诉"按钮 | 
| isHideBackHome | boolean | 是否隐藏导航栏上的"返回首页"按钮 | 
| isHideBackHomePriority | FinAppConfigPriority | 枚举值,导航栏上的"返回首页"按钮配置项的优先级,默认为全局优先 | 
| isHideForwardMenu | boolean | 是否隐藏"更多"菜单中的"转发"按钮 | 
| isHideSettingMenu | boolean | 是否隐藏“更多”菜单中的“设置”按钮 | 
| isHideRefreshMenu | boolean | 是否隐藏“更多”菜单中的“重新进入小程序”按钮 | 
| isHideShareAppletMenu | boolean | 是否隐藏“更多”菜单中的“分享”按钮,默认为true | 
| isHideAddToDesktopMenu | boolean | 是否隐藏“更多”菜单中的“添加到桌面”按钮,默认为true | 
| isHideFavoriteMenu | boolean | 是否隐藏“更多”菜单中的“收藏”按钮,默认为true | 
| hideDebugMenu | boolean | 是否隐藏更多菜单中的调试按钮 | 
| forwardMenuImageRes | int | "更多"菜单中"转发"按钮icon | 
| forwadMenuTitle | String | "更多"菜单中"转发"按钮标题 | 
| hideTransitionCloseButton | boolean | 是否隐藏小程序loading页的关闭按钮 | 
| disableSlideCloseAppletGesture | boolean | 是否禁用侧滑关闭小程序手势。 2.43.5版本之后将会废弃,请勿再继续使用。 | 
| moreMenuStyle | int | 更多菜单的样式,可选项: MORE_MENU_DEFAULT,默认样式。 MORE_MENU_NORMAL,普通样式。 MORE_MENU_PAGE,分页样式。 | 
| capsuleConfig | CapsuleConfig | 胶囊的配置,具体见 CapsuleConfig | 
| floatWindowConfig | FloatWindowConfig | 浮窗模式下浮窗的配置,具体见 FloatWindowConfig | 
| loadingLayoutCls | String | 自定义loading视图时,Loading视图的Class | 
| autoAdaptDarkMode | boolean | 是否自适应系统深色模式(2.44.5版本废弃,使用新的themeStyle属性) | 
| themeStyle | int | (2.44.5版本开始支持)指定小程序主题模式(跟随系统-THEME_STYLE_AUTO、暗黑-THEME_STYLE_DARK、浅色-THEME_STYLE_LIGHT)默认值:THEME_STYLE_LIGHT | 
| hideWebViewProgressBar | boolean | 是否隐藏web-view组件加载H5链接时的进度条 | 
| webViewProgressBarColor | int | web-view组件加载H5链接时的进度条的颜色 | 
| navHomeConfig | NavHomeConfig | 导航栏返回首页按钮的配置,具体见 NavHomeConfig | 
| navigateBarBackImageRes | int | 导航栏返回按钮icon资源 | 
| hideCapsuleCloseButton | boolean | 是否隐藏所有小程序右上角胶囊里的关闭按钮 | 
| authViewConfig | AuthViewConfig | 授权弹框配置,具体见 AuthViewConfig | 
| commonUISupportOrientation | int | 公共UI页面(比如关于、设置等)的方向 | 
| moreMenuLogoConfig | ImageViewConfig | 更多按钮界面的Logo相关配置,具体见ImageViewConfig | 
| hideClearCacheMenu | boolean | 是否隐藏“更多”菜单中的“清理缓存”按钮 | 
UIConfig示例代码:
# CapsuleConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| capsuleWidth | float | 右上角胶囊视图的宽度,默认值为88 | 
| capsuleHeight | float | 右上角胶囊视图的高度,默认值为32 | 
| capsuleRightMargin | float | 右上角胶囊视图的右边距 | 
| capsuleCornerRadius | float | 右上角胶囊视图的圆角半径,默认值为5 | 
| capsuleBorderWidth | float | 右上角胶囊视图的边框宽度,默认值为0.75 | 
| capsuleBgLightColor | int | 胶囊背景颜色浅色,默认为0x33000000 | 
| capsuleBgDarkColor | int | 胶囊背景颜色浅色,默认为0x80ffffff | 
| capsuleBorderLightColor | int | 右上角胶囊视图的边框浅色颜色,默认为0x80ffffff | 
| capsuleBorderDarkColor | int | 右上角胶囊视图的边框深色颜色,默认为0x26000000 | 
| moreLightImage | int | 胶囊里更多按钮的浅色图片,不传会使用默认图标 | 
| moreDarkImage | int | 胶囊里更多按钮的深色图片,不传会使用默认图标 | 
| moreBtnWidth | float | 胶囊里的更多按钮的宽度,高度与宽度相等,默认为32 | 
| moreBtnLeftMargin | float | 胶囊里的更多按钮的左边距,默认为6 | 
| closeLightImage | int | 胶囊里更多按钮的浅色图片,不传会使用默认图标 | 
| closeDarkImage | int | 胶囊里更多按钮的深色图片,不传会使用默认图标 | 
| closeBtnWidth | float | 胶囊里的关闭按钮的宽度,注意:高度与宽度相同,默认值32 | 
| closeBtnLeftMargin | float | 胶囊里的关闭按钮的左边距,默认为6 | 
| redDotBtnWidth | float | 胶囊里的红点按钮的宽度,默认值为6 | 
| redDotBtnHeight | float | 胶囊里的红点按钮的高度,默认值为6 | 
| redDotBtnRightMargin | float | 胶囊里的红点按钮的右边距,默认值为6 | 
| redDotBtnTopMargin | float | 胶囊里的红点按钮的上边距,默认值为3 | 
| redDotBtnDarkImage | int | 胶囊里的红点按钮的深色图片对象,如果不传,会使用默认图标(明亮模式) | 
| redDotBtnLightImage | int | 胶囊里的红点按钮的浅色图片对象,如果不传,会使用默认图标(暗黑模式) | 
CapsuleConfig示例代码
# NavHomeConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| lightImage | int | 导航栏返回首页按钮浅色图标,不传时会使用默认图标 | 
| darkImage | int | 导航栏返回首页按钮浅色图标,不传时会使用默认图标 | 
| width | float | 返回首页按钮宽度,默认44 | 
| height | float | 返回首页按钮高度,默认32 | 
| leftMargin | float | 返回首页按钮的左边距,默认8 | 
| cornerRadius | float | 返回首页按钮边框圆角半径,默认5 | 
| borderWidth | float | 返回首页按钮边框宽度,默认0.75 | 
| borderLightColor | int | 返回首页按钮浅色边框颜色,默认0X80FFFFFF | 
| borderDarkColor | int | 返回首页按钮深色边框颜色,默认0X26000000 | 
| bgLightColor | int | 返回首页按钮浅色背景,默认0x33000000 | 
| bgDarkColor | int | 返回首页按钮深色背景,默认0x80ffffff | 
NavHomeConfig示例代码:
注意
目前返回首页按钮出现的条件为(需同时满足):
- 使用了默认导航栏样式(非 custom)。
- 不是首页或 tabbar 页面(在 app.json 中定义的)。
另外,小程序可调用 hideHomeButton() ,隐藏返回首页按钮。
# AuthViewConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| appletNameTextSize | float | 小程序名称字体大小,默认16 | 
| appletNameLightColor | int | 小程序名称的浅色颜色,默认#222222 | 
| appletNameDarkColor | int | 小程序名称的深色颜色,默认#d0d0d0 | 
| authorizeTitleTextSize | float | 权限标题字体大小,默认17 | 
| authorizeTitleLightColor | int | 权限标题的浅色颜色,默认#222222 | 
| authorizeTitleDarkColor | int | 权限标题的深色颜色,默认#d0d0d0 | 
| authorizeDescriptionTextSize | float | 权限描述字体大小,默认14 | 
| authorizeDescriptionLightColor | int | 权限描述的深色颜色,默认#5c5c5c | 
| authorizeSelectedLightImage | int | 协议选项选中时的浅色icon,大小:22x22dp | 
| authorizeSelectedDarkImage | int | 协议选项选中时的深色icon,大小:22x22dp | 
| agreementLightImage | int | 隐私协议入口浅色icon,大小:22x22dp | 
| agreementDarkImage | int | 隐私协议入口深色icon,大小:22x22dp | 
| agreementTitleTextSize | float | 协议标题字体大小,默认16 | 
| agreementTitleLightColor | int | 协议标题的浅色颜色,默认#222222 | 
| agreementTitleDarkColor | int | 协议标题的深色颜色,默认#d0d0d0 | 
| agreementDescriptionTextSize | float | 协议描述字体大小,默认14 | 
| agreementDescriptionLightColor | int | 协议描述的浅色颜色,默认#222222 | 
| agreementDescriptionDarkColor | int | 协议协议描述的深色颜色,默认#d0d0d0 | 
| linkLightColor | int | 链接的浅色颜色,默认#4285f4 | 
| linkDarkColor | int | 链接的深色颜色,默认#4285f4 | 
| allowButtonLightConfig | AuthButtonConfig | 同意按钮浅色配置,具体见 AuthButtonConfig | 
| allowButtonDarkConfig | AuthButtonConfig | 同意按钮深色配置,具体见 AuthButtonConfig | 
| rejectButtonLightConfig | AuthButtonConfig | 同意按钮浅色配置,具体见 AuthButtonConfig | 
| rejectButtonDarkConfig | AuthButtonConfig | 同意按钮深色配置,具体见 AuthButtonConfig | 
# AuthButtonConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| cornerRadius | float | 按钮的圆角半径 | 
| normalBackgroundColor | int | 按钮默认背景颜色 | 
| pressedBackgroundColor | int | 按钮按下背景颜色 | 
| normalBorderColor | int | 按钮默认边框颜色 | 
| pressedBorderColor | int | 按钮按下边框颜色 | 
| normalTextColor | int | 按钮默认文字颜色 | 
| pressedTextColor | int | 按钮按下文字颜色 | 
# FloatWindowConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| floatMode | boolean | 是否开启浮窗模式 | 
| x | int | 浮窗的原点横坐标位置 | 
| y | int | 浮窗的原点纵坐标位置 | 
| width | int | 浮窗的宽度 | 
| height | int | 浮窗的高度 | 
在一些大屏幕设备上,可以配置小程序以浮窗形式运行。以浮窗形式运行时,可配置浮窗位置和大小,此时位于浮窗下层的页面不可交互。
设置悬浮模式后,同时要在sample styles.xml将FinAppletTheme覆盖为FinAppletTranslucentTheme
<!--悬浮模式需要覆盖FinAppletTheme主题为FinAppletTranslucentTheme-->
<style name="FinAppletTheme" parent="@style/FinAppletTranslucentTheme" />
FloatWindowConfig使用示例:
# ImageViewConfig配置项
| 配置名称 | 类型 | 配置描述 | 
|---|---|---|
| borderCornerRadius | float | 图片边框圆角半径 默认:4.0 | 
| borderWidth | float | 图片边框宽度 默认:0.5 | 
| borderColor | int | 图片边框颜色 默认:0xffd8d8d8 | 
| backgroundColor | int | 图片背景颜色 默认:0xffffffff | 
ImageViewConfig使用示例:
