Merge branch 'master' into X5
# Conflicts: # android/src/main/java/com/finogeeks/mop/api/mop/BaseModule.java # lib/mop.dartmaster
commit
484a2878b2
|
@ -8,6 +8,7 @@ import com.finogeeks.mop.api.mop.AppletManageModule;
|
|||
import com.finogeeks.mop.api.mop.AppletModule;
|
||||
import com.finogeeks.mop.api.mop.BaseModule;
|
||||
import com.finogeeks.mop.api.mop.ExtensionApiModule;
|
||||
import com.finogeeks.mop.api.mop.InitSDKModule;
|
||||
import com.finogeeks.mop.api.mop.VersionModule;
|
||||
import com.finogeeks.mop.api.mop.SmSignModule;
|
||||
import com.finogeeks.mop.api.mop.WXQrCodeModule;
|
||||
|
@ -65,6 +66,7 @@ public class ApisManager {
|
|||
}
|
||||
|
||||
private void initSdkApi(Activity activity) {
|
||||
add(new InitSDKModule(activity));
|
||||
add(new BaseModule(activity));
|
||||
add(new AppletModule(activity));
|
||||
add(new AppletManageModule(activity));
|
||||
|
|
|
@ -4,17 +4,16 @@ import android.app.Application;
|
|||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.finogeeks.lib.applet.BuildConfig;
|
||||
import com.finogeeks.lib.applet.client.FinAppClient;
|
||||
import com.finogeeks.lib.applet.client.FinAppConfig;
|
||||
import com.finogeeks.lib.applet.client.FinStoreConfig;
|
||||
import com.finogeeks.lib.applet.interfaces.FinCallback;
|
||||
import com.finogeeks.mop.api.BaseApi;
|
||||
import com.finogeeks.mop.api.mop.util.InitUtils;
|
||||
import com.finogeeks.mop.interfaces.ICallback;
|
||||
import com.finogeeks.mop.service.MopPluginService;
|
||||
import com.finogeeks.xlog.XLogLevel;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
@ -22,7 +21,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
public class BaseModule extends BaseApi {
|
||||
private final static String TAG = BaseModule.class.getSimpleName();
|
||||
private final static String TAG = "BaseModule";
|
||||
|
||||
public BaseModule(Context context) {
|
||||
super(context);
|
||||
|
@ -118,11 +117,9 @@ public class BaseModule extends BaseApi {
|
|||
}
|
||||
}
|
||||
}
|
||||
FinAppConfig.UIConfig uiConfig = null;
|
||||
if (param.get("uiConfig") != null) {
|
||||
uiConfig = gson.fromJson(gson.toJson(param.get("uiConfig")), FinAppConfig.UIConfig.class);
|
||||
}
|
||||
|
||||
// uiConfig
|
||||
FinAppConfig.UIConfig uiConfig = InitUtils.createUIConfigFromMap((Map<Object, Object>) param.get("uiConfig"));
|
||||
|
||||
FinAppConfig.Builder builder = new FinAppConfig.Builder()
|
||||
.setSdkKey(appkey)
|
||||
|
@ -137,11 +134,10 @@ public class BaseModule extends BaseApi {
|
|||
.setBindAppletWithMainProcess(bindAppletWithMainProcess)
|
||||
.setLogLevel(XLogLevel.LEVEL_VERBOSE)
|
||||
.setXLogDir(new File(getContext().getExternalCacheDir(),"xlog"))
|
||||
.setPageCountLimit(pageCountLimit)
|
||||
.setUseLocalTbsCore(useLocalTbsCore)
|
||||
.setTbsCoreUrl(tbsCoreUrl);
|
||||
|
||||
// .setPageCountLimit(pageCountLimit);
|
||||
|
||||
if (customWebViewUserAgent != null)
|
||||
builder.setCustomWebViewUserAgent(customWebViewUserAgent);
|
||||
if (appletIntervalUpdateLimit != null)
|
||||
|
|
|
@ -0,0 +1,215 @@
|
|||
package com.finogeeks.mop.api.mop;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.finogeeks.lib.applet.client.FinAppClient;
|
||||
import com.finogeeks.lib.applet.client.FinAppConfig;
|
||||
import com.finogeeks.lib.applet.client.FinAppConfigPriority;
|
||||
import com.finogeeks.lib.applet.client.FinStoreConfig;
|
||||
import com.finogeeks.lib.applet.interfaces.FinCallback;
|
||||
import com.finogeeks.mop.api.BaseApi;
|
||||
import com.finogeeks.mop.api.mop.util.InitUtils;
|
||||
import com.finogeeks.mop.interfaces.ICallback;
|
||||
import com.finogeeks.mop.service.MopPluginService;
|
||||
import com.finogeeks.xlog.XLogLevel;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class InitSDKModule extends BaseApi {
|
||||
|
||||
private final static String TAG = "InitSDKModule";
|
||||
|
||||
public InitSDKModule(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] apis() {
|
||||
return new String[]{"initSDK"};
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void invoke(String event, Map param, ICallback callback) {
|
||||
if (FinAppClient.INSTANCE.isFinAppProcess(super.getContext())) {
|
||||
// 小程序进程不执行任何初始化操作
|
||||
return;
|
||||
}
|
||||
|
||||
Log.d(TAG, "param:" + param);
|
||||
FinAppConfig.Builder configBuilder = new FinAppConfig.Builder();
|
||||
|
||||
// config
|
||||
Map<Object, Object> configMap = (Map<Object, Object>) param.get("config");
|
||||
List<Map<Object, Object>> finStoreConfigs = (List<Map<Object, Object>>) configMap.get("finStoreConfigs");
|
||||
List<FinStoreConfig> storeConfigs = new ArrayList<>();
|
||||
for (Map<Object, Object> store : finStoreConfigs) {
|
||||
String sdkKey = (String) store.get("sdkKey");
|
||||
String sdkSecret = (String) store.get("sdkSecret");
|
||||
String apiServer = (String) store.get("apiServer");
|
||||
String apmServer = (String) store.get("apmServer");
|
||||
if (apmServer == null) {
|
||||
apmServer = "";
|
||||
}
|
||||
String fingerprint = (String) store.get("fingerprint");
|
||||
if (fingerprint == null) {
|
||||
fingerprint = "";
|
||||
}
|
||||
String cryptType = (String) store.get("cryptType");
|
||||
Boolean encryptServerData = (Boolean) store.get("encryptServerData");
|
||||
storeConfigs.add(new FinStoreConfig(sdkKey, sdkSecret, apiServer, apmServer, "",
|
||||
fingerprint, cryptType, encryptServerData));
|
||||
}
|
||||
configBuilder.setFinStoreConfigs(storeConfigs);
|
||||
String userId = (String) configMap.get("userId");
|
||||
if (userId != null) {
|
||||
configBuilder.setUserId(userId);
|
||||
}
|
||||
String productIdentification = (String) configMap.get("productIdentification");
|
||||
if (productIdentification != null) {
|
||||
configBuilder.setProductIdentification(productIdentification);
|
||||
}
|
||||
configBuilder.setDisableRequestPermissions((Boolean) configMap.get("disableRequestPermissions"));
|
||||
configBuilder.setAppletAutoAuthorize((Boolean) configMap.get("appletAutoAuthorize"));
|
||||
configBuilder.setDisableGetSuperviseInfo((Boolean) configMap.get("disableGetSuperviseInfo"));
|
||||
configBuilder.setIgnoreWebviewCertAuth((Boolean) configMap.get("ignoreWebviewCertAuth"));
|
||||
configBuilder.setAppletIntervalUpdateLimit((Integer) configMap.get("appletIntervalUpdateLimit"));
|
||||
Map<String, Object> apmExtendInfo = (Map<String, Object>) configMap.get("apmExtendInfo");
|
||||
if (apmExtendInfo != null) {
|
||||
configBuilder.setApmExtendInfo(apmExtendInfo);
|
||||
}
|
||||
configBuilder.setEnableApmDataCompression((Boolean) configMap.get("enableApmDataCompression"));
|
||||
configBuilder.setEncryptServerData((Boolean) configMap.get("encryptServerData"));
|
||||
configBuilder.setEncryptServerData((Boolean) configMap.get("encryptServerData"));
|
||||
int appletDebugModeIndex = (Integer) configMap.get("appletDebugMode");
|
||||
if (appletDebugModeIndex == 0) {
|
||||
configBuilder.setAppletDebugMode(FinAppConfig.AppletDebugMode.appletDebugModeUndefined);
|
||||
} else if (appletDebugModeIndex == 1) {
|
||||
configBuilder.setAppletDebugMode(FinAppConfig.AppletDebugMode.appletDebugModeEnable);
|
||||
} else if (appletDebugModeIndex == 2) {
|
||||
configBuilder.setAppletDebugMode(FinAppConfig.AppletDebugMode.appletDebugModeDisable);
|
||||
} else if (appletDebugModeIndex == 3) {
|
||||
configBuilder.setAppletDebugMode(FinAppConfig.AppletDebugMode.appletDebugModeForbidden);
|
||||
}
|
||||
configBuilder.setEnableWatermark((Boolean) configMap.get("enableWatermark"));
|
||||
int watermarkPriorityIndex = (Integer) configMap.get("watermarkPriority");
|
||||
if (watermarkPriorityIndex == 0) {
|
||||
configBuilder.setWatermarkPriority(FinAppConfigPriority.GLOBAL);
|
||||
} else if (watermarkPriorityIndex == 1) {
|
||||
configBuilder.setWatermarkPriority(FinAppConfigPriority.SPECIFIED);
|
||||
} else if (watermarkPriorityIndex == 2) {
|
||||
configBuilder.setWatermarkPriority(FinAppConfigPriority.APPLET_FILE);
|
||||
}
|
||||
Map<String, String> header = (Map<String, String>) configMap.get("header");
|
||||
if (header != null) {
|
||||
configBuilder.setHeader(header);
|
||||
}
|
||||
int headerPriorityIndex = (Integer) configMap.get("headerPriority");
|
||||
if (headerPriorityIndex == 0) {
|
||||
configBuilder.setHeaderPriority(FinAppConfigPriority.GLOBAL);
|
||||
} else if (headerPriorityIndex == 1) {
|
||||
configBuilder.setHeaderPriority(FinAppConfigPriority.SPECIFIED);
|
||||
} else if (headerPriorityIndex == 2) {
|
||||
configBuilder.setHeaderPriority(FinAppConfigPriority.APPLET_FILE);
|
||||
}
|
||||
configBuilder.setPageCountLimit((Integer) configMap.get("pageCountLimit"));
|
||||
String[] schemes = (String[]) configMap.get("schemes");
|
||||
if (schemes != null) {
|
||||
configBuilder.setSchemes(schemes);
|
||||
}
|
||||
configBuilder.setDebugMode((Boolean) configMap.get("debug"));
|
||||
Integer maxRunningApplet = (Integer) configMap.get("maxRunningApplet");
|
||||
if (maxRunningApplet != null) {
|
||||
configBuilder.setMaxRunningApplet(maxRunningApplet);
|
||||
}
|
||||
Integer webViewMixedContentMode = (Integer) configMap.get("webViewMixedContentMode");
|
||||
if (webViewMixedContentMode != null) {
|
||||
configBuilder.setWebViewMixedContentMode(webViewMixedContentMode);
|
||||
}
|
||||
configBuilder.setBindAppletWithMainProcess((Boolean) configMap.get("bindAppletWithMainProcess"));
|
||||
String killAppletProcessNotice = (String) configMap.get("killAppletProcessNotice");
|
||||
if (killAppletProcessNotice != null) {
|
||||
configBuilder.setKillAppletProcessNotice(killAppletProcessNotice);
|
||||
}
|
||||
configBuilder.setMinAndroidSdkVersion((Integer) configMap.get("minAndroidSdkVersion"));
|
||||
configBuilder.setEnableScreenShot((Boolean) configMap.get("enableScreenShot"));
|
||||
int screenShotPriorityIndex = (Integer) configMap.get("screenShotPriority");
|
||||
if (screenShotPriorityIndex == 0) {
|
||||
configBuilder.setScreenShotPriority(FinAppConfigPriority.GLOBAL);
|
||||
} else if (screenShotPriorityIndex == 1) {
|
||||
configBuilder.setScreenShotPriority(FinAppConfigPriority.SPECIFIED);
|
||||
} else if (screenShotPriorityIndex == 2) {
|
||||
configBuilder.setScreenShotPriority(FinAppConfigPriority.APPLET_FILE);
|
||||
}
|
||||
int logLevelIndex = (Integer) configMap.get("logLevel");
|
||||
if (logLevelIndex == 0) {
|
||||
configBuilder.setLogLevel(XLogLevel.LEVEL_ERROR);
|
||||
} else if (logLevelIndex == 1) {
|
||||
configBuilder.setLogLevel(XLogLevel.LEVEL_WARNING);
|
||||
} else if (logLevelIndex == 2) {
|
||||
configBuilder.setLogLevel(XLogLevel.LEVEL_INFO);
|
||||
} else if (logLevelIndex == 3) {
|
||||
configBuilder.setLogLevel(XLogLevel.LEVEL_DEBUG);
|
||||
} else if (logLevelIndex == 4) {
|
||||
configBuilder.setLogLevel(XLogLevel.LEVEL_VERBOSE);
|
||||
} else if (logLevelIndex == 5) {
|
||||
configBuilder.setLogLevel(XLogLevel.LEVEL_NONE);
|
||||
}
|
||||
Integer logMaxAliveSec = (Integer) configMap.get("logMaxAliveSec");
|
||||
if (logMaxAliveSec != null) {
|
||||
configBuilder.setLogMaxAliveSec(logMaxAliveSec);
|
||||
}
|
||||
String logDir = (String) configMap.get("logDir");
|
||||
if (logDir != null) {
|
||||
configBuilder.setXLogDir(logDir);
|
||||
}
|
||||
configBuilder.setEnablePreNewProcess((Boolean) configMap.get("enablePreNewProcess"));
|
||||
|
||||
Map<Object, Object> uiConfigMap = (Map<Object, Object>) param.get("uiConfig");
|
||||
String appendingCustomUserAgent = (String) uiConfigMap.get("appendingCustomUserAgent");
|
||||
if (appendingCustomUserAgent != null) {
|
||||
configBuilder.setCustomWebViewUserAgent(appendingCustomUserAgent);
|
||||
}
|
||||
String appletText = (String) uiConfigMap.get("appletText");
|
||||
if (appletText != null) {
|
||||
configBuilder.setAppletText(appletText);
|
||||
}
|
||||
|
||||
// uiConfig
|
||||
FinAppConfig.UIConfig uiConfig = InitUtils.createUIConfigFromMap(uiConfigMap);
|
||||
if (uiConfig != null) {
|
||||
configBuilder.setUiConfig(uiConfig);
|
||||
}
|
||||
|
||||
FinAppConfig finAppConfig = configBuilder.build();
|
||||
Log.d(TAG, "finAppConfig:" + new Gson().toJson(finAppConfig));
|
||||
|
||||
final Application application = MopPluginService.getInstance().getActivity().getApplication();
|
||||
// SDK初始化结果回调,用于接收SDK初始化状态
|
||||
FinCallback<Object> cb = new FinCallback<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object result) {
|
||||
// SDK初始化成功
|
||||
callback.onSuccess(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String error) {
|
||||
// SDK初始化失败
|
||||
callback.onFail(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProgress(int status, String error) {
|
||||
|
||||
}
|
||||
};
|
||||
FinAppClient.INSTANCE.init(application, finAppConfig, cb);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
package com.finogeeks.mop.api.mop.util;
|
||||
|
||||
import com.finogeeks.lib.applet.client.FinAppConfig;
|
||||
import com.finogeeks.lib.applet.client.FinAppConfigPriority;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class InitUtils {
|
||||
|
||||
public static FinAppConfig.UIConfig createUIConfigFromMap(Map<Object, Object> map) {
|
||||
if (map != null) {
|
||||
FinAppConfig.UIConfig uiConfig = new FinAppConfig.UIConfig();
|
||||
uiConfig.setNavigationBarTitleLightColor((Integer) map.get("navigationBarTitleLightColor"));
|
||||
uiConfig.setNavigationBarTitleDarkColor((Integer) map.get("navigationBarTitleDarkColor"));
|
||||
uiConfig.setNavigationBarBackBtnLightColor((Integer) map.get("navigationBarBackBtnLightColor"));
|
||||
uiConfig.setAlwaysShowBackInDefaultNavigationBar((Boolean) map.get("isAlwaysShowBackInDefaultNavigationBar"));
|
||||
uiConfig.setClearNavigationBarNavButtonBackground((Boolean) map.get("isClearNavigationBarNavButtonBackground"));
|
||||
uiConfig.setHideFeedbackAndComplaints((Boolean) map.get("isHideFeedbackAndComplaints"));
|
||||
uiConfig.setHideBackHome((Boolean) map.get("isHideBackHome"));
|
||||
uiConfig.setHideForwardMenu((Boolean) map.get("isHideForwardMenu"));
|
||||
uiConfig.setHideRefreshMenu((Boolean) map.get("isHideRefreshMenu"));
|
||||
uiConfig.setHideShareAppletMenu((Boolean) map.get("isHideShareAppletMenu"));
|
||||
uiConfig.setHideAddToDesktopMenu((Boolean) map.get("isHideAddToDesktopMenu"));
|
||||
uiConfig.setHideFavoriteMenu((Boolean) map.get("isHideFavoriteMenu"));
|
||||
uiConfig.setHideSettingMenu((Boolean) map.get("isHideSettingMenu"));
|
||||
uiConfig.setHideTransitionCloseButton((Boolean) map.get("hideTransitionCloseButton"));
|
||||
Map<Object, Object> capsuleConfigMap = (Map<Object, Object>) map.get("capsuleConfig");
|
||||
if (capsuleConfigMap != null) {
|
||||
FinAppConfig.UIConfig.CapsuleConfig capsuleConfig = new FinAppConfig.UIConfig.CapsuleConfig();
|
||||
capsuleConfig.capsuleWidth = (float) capsuleConfigMap.get("capsuleWidth");
|
||||
capsuleConfig.capsuleHeight = (float) capsuleConfigMap.get("capsuleHeight");
|
||||
capsuleConfig.capsuleRightMargin = (float) capsuleConfigMap.get("capsuleRightMargin");
|
||||
capsuleConfig.capsuleCornerRadius = (float) capsuleConfigMap.get("capsuleCornerRadius");
|
||||
capsuleConfig.capsuleBorderWidth = (float) capsuleConfigMap.get("capsuleBorderWidth");
|
||||
capsuleConfig.capsuleBgLightColor = (int) capsuleConfigMap.get("capsuleBgLightColor");
|
||||
capsuleConfig.capsuleBgDarkColor = (int) capsuleConfigMap.get("capsuleBgDarkColor");
|
||||
capsuleConfig.capsuleBorderLightColor = (int) capsuleConfigMap.get("capsuleBorderLightColor");
|
||||
capsuleConfig.capsuleBorderDarkColor = (int) capsuleConfigMap.get("capsuleBorderDarkColor");
|
||||
capsuleConfig.capsuleDividerLightColor = (int) capsuleConfigMap.get("capsuleDividerLightColor");
|
||||
capsuleConfig.capsuleDividerDarkColor = (int) capsuleConfigMap.get("capsuleDividerDarkColor");
|
||||
Integer moreLightImage = (Integer) capsuleConfigMap.get("moreLightImage");
|
||||
if (moreLightImage != null) {
|
||||
capsuleConfig.moreLightImage = moreLightImage;
|
||||
}
|
||||
Integer moreDarkImage = (Integer) capsuleConfigMap.get("moreDarkImage");
|
||||
if (moreDarkImage != null) {
|
||||
capsuleConfig.moreDarkImage = moreDarkImage;
|
||||
}
|
||||
capsuleConfig.moreBtnWidth = (float) capsuleConfigMap.get("moreBtnWidth");
|
||||
capsuleConfig.moreBtnLeftMargin = (float) capsuleConfigMap.get("moreBtnLeftMargin");
|
||||
Integer closeLightImage = (Integer) capsuleConfigMap.get("closeLightImage");
|
||||
if (closeLightImage != null) {
|
||||
capsuleConfig.closeLightImage = closeLightImage;
|
||||
}
|
||||
Integer closeDarkImage = (Integer) capsuleConfigMap.get("closeDarkImage");
|
||||
if (closeDarkImage != null) {
|
||||
capsuleConfig.closeDarkImage = closeDarkImage;
|
||||
}
|
||||
capsuleConfig.closeBtnWidth = (float) capsuleConfigMap.get("closeBtnWidth");
|
||||
capsuleConfig.closeBtnLeftMargin = (float) capsuleConfigMap.get("closeBtnLeftMargin");
|
||||
uiConfig.setCapsuleConfig(capsuleConfig);
|
||||
}
|
||||
Map<Object, Object> navHomeConfigMap = (Map<Object, Object>) map.get("navHomeConfig");
|
||||
if (navHomeConfigMap != null) {
|
||||
FinAppConfig.UIConfig.NavHomeConfig navHomeConfig = new FinAppConfig.UIConfig.NavHomeConfig();
|
||||
navHomeConfig.width = (float) navHomeConfigMap.get("width");
|
||||
navHomeConfig.height = (float) navHomeConfigMap.get("height");
|
||||
navHomeConfig.leftMargin = (float) navHomeConfigMap.get("leftMargin");
|
||||
navHomeConfig.cornerRadius = (float) navHomeConfigMap.get("cornerRadius");
|
||||
navHomeConfig.borderWidth = (float) navHomeConfigMap.get("borderWidth");
|
||||
navHomeConfig.borderLightColor = (int) navHomeConfigMap.get("borderLightColor");
|
||||
navHomeConfig.borderDarkColor = (int) navHomeConfigMap.get("borderDarkColor");
|
||||
navHomeConfig.bgLightColor = (int) navHomeConfigMap.get("bgLightColor");
|
||||
navHomeConfig.bgDarkColor = (int) navHomeConfigMap.get("bgDarkColor");
|
||||
uiConfig.setNavHomeConfig(navHomeConfig);
|
||||
}
|
||||
Map<Object, Object> authViewConfigMap = (Map<Object, Object>) map.get("authViewConfig");
|
||||
if (authViewConfigMap != null) {
|
||||
FinAppConfig.UIConfig.AuthViewConfig authViewConfig = new FinAppConfig.UIConfig.AuthViewConfig();
|
||||
authViewConfig.appletNameTextSize = (float) authViewConfigMap.get("appletNameTextSize");
|
||||
authViewConfig.appletNameLightColor = (int) authViewConfigMap.get("appletNameLightColor");
|
||||
authViewConfig.appletNameDarkColor = (int) authViewConfigMap.get("appletNameDarkColor");
|
||||
authViewConfig.authorizeTitleTextSize = (float) authViewConfigMap.get("authorizeTitleTextSize");
|
||||
authViewConfig.authorizeTitleLightColor = (int) authViewConfigMap.get("authorizeTitleLightColor");
|
||||
authViewConfig.authorizeTitleDarkColor = (int) authViewConfigMap.get("authorizeTitleDarkColor");
|
||||
authViewConfig.authorizeDescriptionTextSize = (float) authViewConfigMap.get("authorizeDescriptionTextSize");
|
||||
authViewConfig.authorizeDescriptionLightColor = (int) authViewConfigMap.get("authorizeDescriptionLightColor");
|
||||
authViewConfig.authorizeDescriptionDarkColor = (int) authViewConfigMap.get("authorizeDescriptionDarkColor");
|
||||
authViewConfig.agreementTitleTextSize = (float) authViewConfigMap.get("agreementTitleTextSize");
|
||||
authViewConfig.agreementTitleLightColor = (int) authViewConfigMap.get("agreementTitleLightColor");
|
||||
authViewConfig.agreementTitleDarkColor = (int) authViewConfigMap.get("agreementTitleDarkColor");
|
||||
authViewConfig.agreementDescriptionTextSize = (float) authViewConfigMap.get("agreementDescriptionTextSize");
|
||||
authViewConfig.agreementDescriptionLightColor = (int) authViewConfigMap.get("agreementDescriptionLightColor");
|
||||
authViewConfig.agreementDescriptionDarkColor = (int) authViewConfigMap.get("agreementDescriptionDarkColor");
|
||||
authViewConfig.linkLightColor = (int) authViewConfigMap.get("linkLightColor");
|
||||
authViewConfig.linkDarkColor = (int) authViewConfigMap.get("linkDarkColor");
|
||||
Map<Object, Object> allowButtonLightConfig = (Map<Object, Object>) authViewConfigMap.get("allowButtonLightConfig");
|
||||
if (allowButtonLightConfig != null) {
|
||||
authViewConfig.allowButtonLightConfig = getAuthButtonConfig(allowButtonLightConfig);
|
||||
}
|
||||
Map<Object, Object> allowButtonDarkConfig = (Map<Object, Object>) authViewConfigMap.get("allowButtonDarkConfig");
|
||||
if (allowButtonDarkConfig != null) {
|
||||
authViewConfig.allowButtonDarkConfig = getAuthButtonConfig(allowButtonDarkConfig);
|
||||
}
|
||||
Map<Object, Object> rejectButtonLightConfig = (Map<Object, Object>) authViewConfigMap.get("rejectButtonLightConfig");
|
||||
if (rejectButtonLightConfig != null) {
|
||||
authViewConfig.rejectButtonLightConfig = getAuthButtonConfig(rejectButtonLightConfig);
|
||||
}
|
||||
Map<Object, Object> rejectButtonDarkConfig = (Map<Object, Object>) authViewConfigMap.get("rejectButtonDarkConfig");
|
||||
if (rejectButtonDarkConfig != null) {
|
||||
authViewConfig.rejectButtonDarkConfig = getAuthButtonConfig(rejectButtonDarkConfig);
|
||||
}
|
||||
uiConfig.setAuthViewConfig(authViewConfig);
|
||||
}
|
||||
Map<Object, Object> floatWindowConfigMap = (Map<Object, Object>) map.get("floatWindowConfig");
|
||||
if (floatWindowConfigMap != null) {
|
||||
FinAppConfig.UIConfig.FloatWindowConfig floatWindowConfig = new FinAppConfig.UIConfig.FloatWindowConfig();
|
||||
floatWindowConfig.floatMode = (boolean) floatWindowConfigMap.get("floatMode");
|
||||
floatWindowConfig.x = (int) floatWindowConfigMap.get("x");
|
||||
floatWindowConfig.y = (int) floatWindowConfigMap.get("y");
|
||||
floatWindowConfig.width = (int) floatWindowConfigMap.get("width");
|
||||
floatWindowConfig.height = (int) floatWindowConfigMap.get("height");
|
||||
uiConfig.setFloatWindowConfig(floatWindowConfig);
|
||||
}
|
||||
Integer webViewProgressBarColor = (Integer) map.get("webViewProgressBarColor");
|
||||
if (webViewProgressBarColor != null) {
|
||||
uiConfig.setWebViewProgressBarColor(webViewProgressBarColor);
|
||||
}
|
||||
uiConfig.setHideWebViewProgressBar((Boolean) map.get("hideWebViewProgressBar"));
|
||||
uiConfig.setMoreMenuStyle((Integer) map.get("moreMenuStyle"));
|
||||
int isHideBackHomePriorityIndex = (Integer) map.get("isHideBackHomePriority");
|
||||
if (isHideBackHomePriorityIndex == 0) {
|
||||
uiConfig.setIsHideBackHomePriority(FinAppConfigPriority.GLOBAL);
|
||||
} else if (isHideBackHomePriorityIndex == 1) {
|
||||
uiConfig.setIsHideBackHomePriority(FinAppConfigPriority.SPECIFIED);
|
||||
} else if (isHideBackHomePriorityIndex == 2) {
|
||||
uiConfig.setIsHideBackHomePriority(FinAppConfigPriority.APPLET_FILE);
|
||||
}
|
||||
uiConfig.setAutoAdaptDarkMode((Boolean) map.get("autoAdaptDarkMode"));
|
||||
uiConfig.setDisableSlideCloseAppletGesture((Boolean) map.get("disableSlideCloseAppletGesture"));
|
||||
String loadingLayoutCls = (String) map.get("loadingLayoutCls");
|
||||
if (loadingLayoutCls != null) {
|
||||
uiConfig.setLoadingLayoutCls(loadingLayoutCls);
|
||||
}
|
||||
return uiConfig;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static FinAppConfig.UIConfig.AuthViewConfig.AuthButtonConfig getAuthButtonConfig(Map<Object, Object> map) {
|
||||
return new FinAppConfig.UIConfig.AuthViewConfig.AuthButtonConfig(
|
||||
(float) map.get("cornerRadius"),
|
||||
(int) map.get("normalBackgroundColor"),
|
||||
(int) map.get("pressedBackgroundColor"),
|
||||
(int) map.get("normalBorderColor"),
|
||||
(int) map.get("pressedBorderColor"),
|
||||
(int) map.get("normalTextColor"),
|
||||
(int) map.get("pressedTextColor")
|
||||
);
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MOB_addWebExtentionApi : MOPBaseApi
|
||||
@interface MOP_addWebExtentionApi : MOPBaseApi
|
||||
@property(nonatomic, copy) NSString* name;
|
||||
@end
|
||||
|
|
@ -5,11 +5,11 @@
|
|||
// Created by 王滔 on 2021/12/21.
|
||||
//
|
||||
|
||||
#import "MOB_addWebExtentionApi.h"
|
||||
#import "MOP_addWebExtentionApi.h"
|
||||
#import "MopPlugin.h"
|
||||
#import <FinApplet/FinApplet.h>
|
||||
|
||||
@implementation MOB_addWebExtentionApi
|
||||
@implementation MOP_addWebExtentionApi
|
||||
|
||||
- (void)setupApiWithSuccess:(void (^)(NSDictionary<NSString *,id> * _Nonnull))success failure:(void (^)(id _Nullable))failure cancel:(void (^)(void))cancel
|
||||
{
|
|
@ -0,0 +1,16 @@
|
|||
//
|
||||
// MOP_changeUserId.h
|
||||
// mop
|
||||
//
|
||||
// Created by 滔 on 2023/3/23.
|
||||
//
|
||||
|
||||
#import "MOPBaseApi.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MOP_changeUserId : MOPBaseApi
|
||||
@property (nonatomic, copy) NSString *userId;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,17 @@
|
|||
//
|
||||
// MOP_changeUserId.m
|
||||
// mop
|
||||
//
|
||||
// Created by 滔 on 2023/3/23.
|
||||
//
|
||||
|
||||
#import "MOP_changeUserId.h"
|
||||
#import <FinApplet/FinApplet.h>
|
||||
|
||||
@implementation MOP_changeUserId
|
||||
- (void)setupApiWithSuccess:(void (^)(NSDictionary<NSString *,id> * _Nonnull))success failure:(void (^)(id _Nullable))failure cancel:(void (^)(void))cancel
|
||||
{
|
||||
[FATClient sharedClient].config.currentUserId = self.userId;
|
||||
success(@{});
|
||||
}
|
||||
@end
|
|
@ -0,0 +1,18 @@
|
|||
//
|
||||
// Mop_initSDK.h
|
||||
// mop
|
||||
//
|
||||
// Created by 滔 on 2023/3/17.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "MOPBaseApi.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MOP_initSDK : MOPBaseApi
|
||||
@property (nonatomic, strong) NSDictionary *config;
|
||||
@property (nonatomic, strong) NSDictionary *uiConfig;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,302 @@
|
|||
//
|
||||
// Mop_newInitialize.m
|
||||
// mop
|
||||
//
|
||||
// Created by 滔 on 2023/3/17.
|
||||
//
|
||||
|
||||
#import "Mop_initSDK.h"
|
||||
#import "MOPTools.h"
|
||||
|
||||
@implementation MOP_initSDK
|
||||
|
||||
- (void)setupApiWithSuccess:(void (^)(NSDictionary<NSString *,id> * _Nonnull))success failure:(void (^)(id _Nullable))failure cancel:(void (^)(void))cancel
|
||||
{
|
||||
if (!self.config) {
|
||||
failure(@"config不能为空");
|
||||
return;
|
||||
}
|
||||
FATConfig *config;
|
||||
NSArray *storeConfigList = self.config[@"finStoreConfigs"];
|
||||
if (storeConfigList && storeConfigList.count > 0) {
|
||||
NSMutableArray *storeArrayM = [NSMutableArray array];
|
||||
for (NSDictionary *dict in storeConfigList) {
|
||||
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
|
||||
storeConfig.sdkKey = dict[@"sdkKey"];
|
||||
storeConfig.sdkSecret = dict[@"sdkSecret"];
|
||||
storeConfig.apiServer = dict[@"apiServer"];
|
||||
storeConfig.apmServer = dict[@"apmServer"];
|
||||
storeConfig.fingerprint = dict[@"fingerprint"];
|
||||
if ([@"SM" isEqualToString:dict[@"cryptType"]]) {
|
||||
storeConfig.cryptType = FATApiCryptTypeSM;
|
||||
} else {
|
||||
storeConfig.cryptType = FATApiCryptTypeMD5;
|
||||
}
|
||||
storeConfig.encryptServerData = [dict[@"encryptServerData"] boolValue];
|
||||
[storeArrayM addObject:storeConfig];
|
||||
}
|
||||
config = [FATConfig configWithStoreConfigs:storeArrayM];
|
||||
} else {
|
||||
failure(@"storeConfigs不能为空");
|
||||
return;
|
||||
}
|
||||
|
||||
config.currentUserId = self.config[@"userId"];
|
||||
config.productIdentification = self.config[@"productIdentification"];
|
||||
config.disableAuthorize = [self.config[@"disableRequestPermissions"] boolValue];
|
||||
config.appletAutoAuthorize = [self.config[@"appletAutoAuthorize"] boolValue];
|
||||
config.disableGetSuperviseInfo = [self.config[@"disableGetSuperviseInfo"] boolValue];
|
||||
config.ignoreWebviewCertAuth = [self.config[@"ignoreWebviewCertAuth"] boolValue];
|
||||
config.appletIntervalUpdateLimit = [self.config[@"appletIntervalUpdateLimit"] integerValue];
|
||||
config.startCrashProtection = [self.config[@"startCrashProtection"] boolValue];
|
||||
config.enableApmDataCompression = [self.config[@"enableApmDataCompression"] boolValue];
|
||||
config.encryptServerData = [self.config[@"encryptServerData"] boolValue];
|
||||
config.enableAppletDebug = [self.config[@"appletDebugMode"] integerValue];
|
||||
config.enableWatermark = [self.config[@"enableWatermark"] boolValue];
|
||||
config.watermarkPriority = [self.config[@"watermarkPriority"] integerValue];
|
||||
config.baseLoadingViewClass = self.config[@"baseLoadingViewClass"];
|
||||
config.baseLoadFailedViewClass = self.config[@"baseLoadFailedViewClass"];
|
||||
config.header = self.config[@"header"];
|
||||
config.headerPriority = [self.config[@"headerPriority"] integerValue];
|
||||
config.enableH5AjaxHook = [self.config[@"enableH5AjaxHook"] boolValue];
|
||||
config.h5AjaxHookRequestKey = self.config[@"h5AjaxHookRequestKey"];
|
||||
config.pageCountLimit = [self.config[@"pageCountLimit"] integerValue];
|
||||
config.schemes = self.config[@"schemes"];
|
||||
|
||||
|
||||
NSError* error = nil;
|
||||
FATUIConfig *uiconfig = [[FATUIConfig alloc]init];
|
||||
uiconfig.autoAdaptDarkMode = YES;
|
||||
if (_uiConfig) {
|
||||
if (_uiConfig[@"navigationTitleTextAttributes"]) {
|
||||
uiconfig.navigationTitleTextAttributes = _uiConfig[@"navigationTitleTextAttributes"];
|
||||
}
|
||||
|
||||
uiconfig.navigationBarHeight = [_uiConfig[@"navigationBarHeight"] floatValue];
|
||||
if (_uiConfig[@"navigationBarTitleLightColor"]) {
|
||||
uiconfig.navigationBarTitleLightColor = [MOPTools colorWithRGBHex:[_uiConfig[@"navigationBarTitleLightColor"] intValue]];
|
||||
}
|
||||
if (_uiConfig[@"navigationBarTitleDarkColor"]) {
|
||||
uiconfig.navigationBarTitleDarkColor = [MOPTools colorWithRGBHex:[_uiConfig[@"navigationBarTitleDarkColor"] intValue]];
|
||||
}
|
||||
if (_uiConfig[@"navigationBarBackBtnLightColor"]) {
|
||||
uiconfig.navigationBarBackBtnLightColor = [MOPTools colorWithRGBHex:[_uiConfig[@"navigationBarBackBtnLightColor"] intValue]];
|
||||
}
|
||||
if (_uiConfig[@"navigationBarBackBtnDarkColor"]) {
|
||||
uiconfig.navigationBarBackBtnDarkColor = [MOPTools colorWithRGBHex:[_uiConfig[@"navigationBarBackBtnDarkColor"] intValue]];
|
||||
}
|
||||
uiconfig.moreMenuStyle = [_uiConfig[@"moreMenuStyle"] integerValue];
|
||||
uiconfig.hideBackToHomePriority = [_uiConfig[@"isHideBackHomePriority"] integerValue];
|
||||
uiconfig.hideFeedbackMenu = [_uiConfig[@"isHideFeedbackAndComplaints"] boolValue];
|
||||
uiconfig.hideBackToHome = [_uiConfig[@"isHideBackHome"] boolValue];
|
||||
uiconfig.hideForwardMenu = [_uiConfig[@"isHideForwardMenu"] boolValue];
|
||||
uiconfig.hideShareAppletMenu = [_uiConfig[@"isHideShareAppletMenu"] boolValue];
|
||||
uiconfig.hideRefreshMenu = [_uiConfig[@"isHideRefreshMenu"] boolValue];
|
||||
uiconfig.hideTransitionCloseButton = [_uiConfig[@"hideTransitionCloseButton"] boolValue];
|
||||
uiconfig.disableSlideCloseAppletGesture = [_uiConfig[@"disableSlideCloseAppletGesture"] boolValue];
|
||||
if (_uiConfig[@"webViewProgressBarColor"]) {
|
||||
uiconfig.progressBarColor = [MOPTools colorWithRGBHex:[_uiConfig[@"webViewProgressBarColor"] intValue]];
|
||||
}
|
||||
|
||||
uiconfig.hideFeedbackMenu = [_uiConfig[@"isHideFeedbackAndComplaints"] boolValue];
|
||||
uiconfig.hideForwardMenu = [_uiConfig[@"isHideForwardMenu"] boolValue];
|
||||
uiconfig.autoAdaptDarkMode = [_uiConfig[@"autoAdaptDarkMode"] boolValue];
|
||||
uiconfig.hideSettingMenu = [_uiConfig[@"isHideSettingMenu"] boolValue];
|
||||
uiconfig.hideFavoriteMenu = [_uiConfig[@"isHideFavoriteMenu"] boolValue];
|
||||
uiconfig.hideAddToDesktopMenu = [_uiConfig[@"isHideAddToDesktopMenu"] boolValue];
|
||||
|
||||
uiconfig.appletText = _uiConfig[@"appletText"];
|
||||
uiconfig.disableSlideCloseAppletGesture = [_uiConfig[@"disableSlideCloseAppletGesture"] boolValue];
|
||||
if (_uiConfig[@"capsuleConfig"]) {
|
||||
NSDictionary *capsuleConfigDic = _uiConfig[@"capsuleConfig"];
|
||||
FATCapsuleConfig *capsuleConfig = [[FATCapsuleConfig alloc]init];
|
||||
capsuleConfig.capsuleWidth = [capsuleConfigDic[@"capsuleWidth"] floatValue];
|
||||
capsuleConfig.capsuleHeight = [capsuleConfigDic[@"capsuleHeight"] floatValue];
|
||||
capsuleConfig.capsuleRightMargin = [capsuleConfigDic[@"capsuleRightMargin"] floatValue];
|
||||
capsuleConfig.capsuleCornerRadius = [capsuleConfigDic[@"capsuleCornerRadius"] floatValue];
|
||||
capsuleConfig.capsuleBorderWidth = [capsuleConfigDic[@"capsuleBorderWidth"] floatValue];
|
||||
capsuleConfig.moreBtnWidth = [capsuleConfigDic[@"moreBtnWidth"] floatValue];
|
||||
capsuleConfig.moreBtnLeftMargin = [capsuleConfigDic[@"moreBtnLeftMargin"] floatValue];
|
||||
capsuleConfig.closeBtnWidth = [capsuleConfigDic[@"closeBtnWidth"] floatValue];
|
||||
capsuleConfig.closeBtnLeftMargin = [capsuleConfigDic[@"closeBtnLeftMargin"] floatValue];
|
||||
|
||||
|
||||
capsuleConfig.capsuleBorderLightColor = [MOPTools colorWithRGBHex:[capsuleConfigDic[@"capsuleBorderLightColor"] intValue]];
|
||||
capsuleConfig.capsuleBorderDarkColor = [MOPTools colorWithRGBHex:[capsuleConfigDic[@"capsuleBorderDarkColor"] intValue]];
|
||||
capsuleConfig.capsuleBgLightColor = [MOPTools colorWithRGBHex:[capsuleConfigDic[@"capsuleBgLightColor"] intValue]];
|
||||
capsuleConfig.capsuleBgDarkColor = [MOPTools colorWithRGBHex:[capsuleConfigDic[@"capsuleBgDarkColor"] intValue]];
|
||||
capsuleConfig.capsuleDividerLightColor = [MOPTools colorWithRGBHex:[capsuleConfigDic[@"capsuleDividerLightColor"] intValue]];
|
||||
capsuleConfig.capsuleDividerDarkColor = [MOPTools colorWithRGBHex:[capsuleConfigDic[@"capsuleDividerDarkColor"] intValue]];
|
||||
uiconfig.capsuleConfig = capsuleConfig;
|
||||
|
||||
}
|
||||
|
||||
if (_uiConfig[@"navHomeConfig"]) {
|
||||
NSDictionary *navHomeConfigDic = _uiConfig[@"navHomeConfig"];
|
||||
FATNavHomeConfig *navHomeConfig = [[FATNavHomeConfig alloc]init];
|
||||
navHomeConfig.width = [navHomeConfigDic[@"width"] floatValue];
|
||||
navHomeConfig.height = [navHomeConfigDic[@"height"] floatValue];
|
||||
navHomeConfig.leftMargin = [navHomeConfigDic[@"leftMargin"] floatValue];
|
||||
navHomeConfig.cornerRadius = [navHomeConfigDic[@"cornerRadius"] floatValue];
|
||||
navHomeConfig.borderWidth = [navHomeConfigDic[@"width"] floatValue];
|
||||
if (navHomeConfigDic[@"borderLightColor"]) {
|
||||
navHomeConfig.borderLightColor = [MOPTools colorWithRGBHex:[navHomeConfigDic[@"borderLightColor"] intValue]];
|
||||
}
|
||||
if (navHomeConfigDic[@"borderDarkColor"]) {
|
||||
navHomeConfig.borderDarkColor = [MOPTools colorWithRGBHex:[navHomeConfigDic[@"borderDarkColor"] intValue]];
|
||||
}
|
||||
if (navHomeConfigDic[@"bgLightColor"]) {
|
||||
navHomeConfig.bgLightColor = [MOPTools colorWithRGBHex:[navHomeConfigDic[@"bgLightColor"] intValue]];
|
||||
}
|
||||
if (navHomeConfigDic[@"bgDarkColor"]) {
|
||||
navHomeConfig.bgDarkColor = [MOPTools colorWithRGBHex:[navHomeConfigDic[@"bgDarkColor"] intValue]];
|
||||
}
|
||||
uiconfig.navHomeConfig = navHomeConfig;
|
||||
}
|
||||
|
||||
if (_uiConfig[@"authViewConfig"]) {
|
||||
NSDictionary *authViewConfigDic = _uiConfig[@"authViewConfig"];
|
||||
FATAuthViewConfig *authViewConfig = [[FATAuthViewConfig alloc]init];
|
||||
authViewConfig.appletNameFont = [UIFont systemFontOfSize:[authViewConfigDic[@"appletNameTextSize"] floatValue]];
|
||||
if (authViewConfigDic[@"appletNameLightColor"]) {
|
||||
authViewConfig.appletNameLightColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"appletNameLightColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"appletNameDarkColor"]) {
|
||||
authViewConfig.appletNameDarkColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"appletNameDarkColor"] intValue]];
|
||||
}
|
||||
|
||||
authViewConfig.authorizeTitleFont = [UIFont systemFontOfSize:[authViewConfigDic[@"authorizeTitleTextSize"] floatValue] weight:UIFontWeightMedium];
|
||||
|
||||
if (authViewConfigDic[@"authorizeTitleLightColor"]) {
|
||||
authViewConfig.authorizeTitleLightColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"authorizeTitleLightColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"authorizeTitleDarkColor"]) {
|
||||
authViewConfig.authorizeTitleDarkColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"authorizeTitleDarkColor"] intValue]];
|
||||
}
|
||||
|
||||
authViewConfig.authorizeDescriptionFont = [UIFont systemFontOfSize:[authViewConfigDic[@"authorizeDescriptionTextSize"] floatValue]];
|
||||
|
||||
if (authViewConfigDic[@"authorizeDescriptionLightColor"]) {
|
||||
authViewConfig.authorizeDescriptionLightColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"authorizeDescriptionLightColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"authorizeDescriptionDarkColor"]) {
|
||||
authViewConfig.authorizeDescriptionDarkColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"authorizeDescriptionDarkColor"] intValue]];
|
||||
}
|
||||
|
||||
authViewConfig.agreementTitleFont = [UIFont systemFontOfSize:[authViewConfigDic[@"agreementTitleTextSize"] floatValue]];
|
||||
|
||||
if (authViewConfigDic[@"agreementTitleLightColor"]) {
|
||||
authViewConfig.agreementTitleLightColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"agreementTitleLightColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"agreementTitleDarkColor"]) {
|
||||
authViewConfig.agreementTitleDarkColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"agreementTitleDarkColor"] intValue]];
|
||||
}
|
||||
|
||||
authViewConfig.agreementDescriptionFont = [UIFont systemFontOfSize:[authViewConfigDic[@"agreementDescriptionTextSize"] floatValue]];
|
||||
|
||||
if (authViewConfigDic[@"agreementDescriptionLightColor"]) {
|
||||
authViewConfig.agreementDescriptionLightColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"agreementDescriptionLightColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"agreementDescriptionDarkColor"]) {
|
||||
authViewConfig.agreementDescriptionDarkColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"agreementDescriptionDarkColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"linkLightColor"]) {
|
||||
authViewConfig.linkLightColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"linkLightColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"linkDarkColor"]) {
|
||||
authViewConfig.linkDarkColor = [MOPTools colorWithRGBHex:[authViewConfigDic[@"linkDarkColor"] intValue]];
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"allowButtonLightConfig"]) {
|
||||
FATAuthButtonConfig *allowButtonLightConfig = [self createAuthButtonConfigWithDic:authViewConfigDic[@"allowButtonLightConfig"]];
|
||||
authViewConfig.allowButtonLightConfig = allowButtonLightConfig;
|
||||
|
||||
}
|
||||
|
||||
if (authViewConfigDic[@"allowButtonDarkConfig"]) {
|
||||
FATAuthButtonConfig *allowButtonDarkConfig = [self createAuthButtonConfigWithDic:authViewConfigDic[@"allowButtonDarkConfig"]];
|
||||
authViewConfig.allowButtonDarkConfig = allowButtonDarkConfig;
|
||||
|
||||
}
|
||||
if (authViewConfigDic[@"rejectButtonLightConfig"]) {
|
||||
FATAuthButtonConfig *rejectButtonLightConfig = [self createAuthButtonConfigWithDic:authViewConfigDic[@"rejectButtonLightConfig"]];
|
||||
authViewConfig.rejectButtonLightConfig = rejectButtonLightConfig;
|
||||
|
||||
}
|
||||
if (authViewConfigDic[@"rejectButtonDarkConfig"]) {
|
||||
FATAuthButtonConfig *rejectButtonDarkConfig = [self createAuthButtonConfigWithDic:authViewConfigDic[@"rejectButtonDarkConfig"]];
|
||||
authViewConfig.rejectButtonDarkConfig = rejectButtonDarkConfig;
|
||||
|
||||
}
|
||||
|
||||
uiconfig.authViewConfig = authViewConfig;
|
||||
}
|
||||
uiconfig.appendingCustomUserAgent = _uiConfig[@"customWebViewUserAgent"];
|
||||
uiconfig.hideWebViewProgressBar = [_uiConfig[@"hideWebViewProgressBar"] boolValue];
|
||||
uiconfig.autoAdaptDarkMode = [_uiConfig[@"autoAdaptDarkMode"] boolValue];
|
||||
uiconfig.transtionStyle = [_uiConfig[@"transtionStyle"] integerValue];
|
||||
}
|
||||
|
||||
|
||||
|
||||
// uiconfig.moreMenuStyle = FATMoreViewStyleNormal;
|
||||
[[FATClient sharedClient] initWithConfig:config uiConfig:uiconfig error:&error];
|
||||
if (error) {
|
||||
failure(@"初始化失败");
|
||||
return;
|
||||
}
|
||||
|
||||
NSInteger logLevelIntValue = [self.config[@"logLevel"] integerValue];
|
||||
if (logLevelIntValue >= 5) {
|
||||
[[FATClient sharedClient].logManager closeLog];
|
||||
} else {
|
||||
FATLogLevel logLevel = logLevelIntValue;
|
||||
NSString *logDir = self.config[@"logDir"];
|
||||
[[FATClient sharedClient].logManager initLogWithLogDir:logDir logLevel:logLevel consoleLog:YES];
|
||||
}
|
||||
|
||||
|
||||
|
||||
[[FATClient sharedClient] setEnableLog:YES];
|
||||
|
||||
success(@{});
|
||||
|
||||
}
|
||||
|
||||
- (FATAuthButtonConfig *)createAuthButtonConfigWithDic:(NSDictionary *)dic {
|
||||
if (!dic) {
|
||||
return nil;
|
||||
}
|
||||
FATAuthButtonConfig * authButtonConfig = [[FATAuthButtonConfig alloc]init];
|
||||
if (dic[@"cornerRadius"]) {
|
||||
authButtonConfig.cornerRadius = [dic[@"cornerRadius"] floatValue];
|
||||
}
|
||||
if (dic[@"normalBackgroundColor"]) {
|
||||
authButtonConfig.normalBackgroundColor = [MOPTools colorWithRGBHex:[dic[@"normalBackgroundColor"] intValue]];
|
||||
}
|
||||
if (dic[@"pressedBackgroundColor"]) {
|
||||
authButtonConfig.pressedBackgroundColor = [MOPTools colorWithRGBHex:[dic[@"pressedBackgroundColor"] intValue]];
|
||||
}
|
||||
if (dic[@"normalTextColor"]) {
|
||||
authButtonConfig.normalTextColor = [MOPTools colorWithRGBHex:[dic[@"normalTextColor"] intValue]];
|
||||
}
|
||||
if (dic[@"pressedTextColor"]) {
|
||||
authButtonConfig.pressedTextColor = [MOPTools colorWithRGBHex:[dic[@"pressedTextColor"] intValue]];
|
||||
}
|
||||
if (dic[@"normalBorderColor"]) {
|
||||
authButtonConfig.normalBorderColor = [MOPTools colorWithRGBHex:[dic[@"normalBorderColor"] intValue]];
|
||||
}
|
||||
if (dic[@"pressedBorderColor"]) {
|
||||
authButtonConfig.pressedBorderColor = [MOPTools colorWithRGBHex:[dic[@"pressedBorderColor"] intValue]];
|
||||
}
|
||||
|
||||
return authButtonConfig;
|
||||
}
|
||||
@end
|
|
@ -30,7 +30,6 @@
|
|||
for (NSDictionary *dict in _finStoreConfigs) {
|
||||
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
|
||||
storeConfig.sdkKey = dict[@"sdkKey"];
|
||||
// storeConfig.sdkKey = @"22LyZEib0gLTQdU3MUauAb4V4W8Uxd/gMgmH8Hg1bGQ=";
|
||||
storeConfig.sdkSecret = dict[@"sdkSecret"];
|
||||
storeConfig.apiServer = dict[@"apiServer"];
|
||||
storeConfig.apmServer = dict[@"apmServer"];
|
||||
|
@ -82,8 +81,8 @@
|
|||
if (_uiConfig[@"navigationTitleTextAttributes"]) {
|
||||
uiconfig.navigationTitleTextAttributes = _uiConfig[@"navigationTitleTextAttributes"];
|
||||
}
|
||||
if (_uiConfig[@"progressBarColor"]) {
|
||||
uiconfig.progressBarColor = [MOPTools colorWithRGBHex:[_uiConfig[@"progressBarColor"] intValue]];
|
||||
if (_uiConfig[@"webViewProgressBarColor"]) {
|
||||
uiconfig.progressBarColor = [MOPTools colorWithRGBHex:[_uiConfig[@"webViewProgressBarColor"] intValue]];
|
||||
}
|
||||
uiconfig.hideFeedbackMenu = [_uiConfig[@"isHideFeedbackAndComplaints"] boolValue];
|
||||
uiconfig.hideForwardMenu = [_uiConfig[@"isHideForwardMenu"] boolValue];
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
Class ApiClass = NSClassFromString(apiMethod);
|
||||
|
||||
if (!ApiClass) {
|
||||
NSLog(@"MOPybridExtensionConverter Error");
|
||||
NSLog(@"MOPybridExtensionConverter Error %@",apiMethod);
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
|
655
lib/mop.dart
655
lib/mop.dart
|
@ -1,4 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
@ -22,7 +23,7 @@ class FinStoreConfig {
|
|||
String apiServer;
|
||||
|
||||
/// apm统计服务器的地址,如果不填,则默认与apiServer一致
|
||||
String apmServer;
|
||||
String? apmServer;
|
||||
|
||||
/// 网络接口加密类型,默认为MD5 国密SM
|
||||
String cryptType;
|
||||
|
@ -33,8 +34,9 @@ class FinStoreConfig {
|
|||
/// 是否需要接口加密验证(初始化多服务器时使用)默认为不开启,当设置为YES时开启,接口返回加密数据并处理
|
||||
bool encryptServerData;
|
||||
|
||||
FinStoreConfig(this.sdkKey, this.sdkSecret, this.apiServer, this.apmServer,
|
||||
{this.cryptType = "MD5",
|
||||
FinStoreConfig(this.sdkKey, this.sdkSecret, this.apiServer,
|
||||
{this.apmServer,
|
||||
this.cryptType = "MD5",
|
||||
this.fingerprint,
|
||||
this.encryptServerData = false});
|
||||
|
||||
|
@ -51,60 +53,316 @@ class FinStoreConfig {
|
|||
}
|
||||
}
|
||||
|
||||
class UIConfig {
|
||||
Map<String, dynamic>? navigationTitleTextAttributes; //导航栏的标题样式,目前支持了font
|
||||
class Config {
|
||||
/// 要初始化的服务器配置对象列表
|
||||
List<FinStoreConfig> finStoreConfigs;
|
||||
|
||||
///当导航栏为默认导航栏时,是否始终显示返回按钮
|
||||
/// 当前用户id,对应管理后台的用户管理->成员管理->用户id。
|
||||
/// 若体验版本配置了体验成员,则需要设置正确的userId才能具备打开小程序的权限
|
||||
/// 登录/切换用户/退出登录时,需要修改此值。
|
||||
/// 小程序缓存信息会存储在以userId命名的不同目录下。
|
||||
String? userId;
|
||||
|
||||
/// 产品的标识,非必传,默认为存储目录里的finclip,finogeeks和userAgent里的finogeeks
|
||||
String? productIdentification;
|
||||
|
||||
/// 是否不让SDK申请权限
|
||||
/// 如果设置为true,则SDK内使用权限的api,不会主动申请权限
|
||||
bool disableRequestPermissions = false;
|
||||
|
||||
/// 小程序自动申请授权
|
||||
/// 如果设置为true,则小程序申请权限时不会弹出用户确认提示框
|
||||
bool appletAutoAuthorize = false;
|
||||
|
||||
/// 是否禁用SDK的监管接口API(默认开启:false)
|
||||
/// 如果设置为true,则SDK禁用监管接口API
|
||||
bool disableGetSuperviseInfo = false;
|
||||
|
||||
/// 是否忽略webview的证书校验,默认为false,进行校验
|
||||
/// 如果设置为true,则忽略校验Https的证书
|
||||
bool ignoreWebviewCertAuth = false;
|
||||
|
||||
/// 后台自动检查更新的小程序个数
|
||||
/// 初始化SDK成功后,如处于wifi网络下,更新最近使用的x个小程序
|
||||
/// 取值范围:0~50。0代表不检查更新;不设置默认是3。
|
||||
int appletIntervalUpdateLimit = 3;
|
||||
|
||||
/// apm 统计的扩展信息
|
||||
Map<String, String>? apmExtendInfo;
|
||||
|
||||
/// 是否开启Crash防崩溃,默认为false。(iOS支持)
|
||||
/// 如果开启,可以防止如下类型的崩溃:UnrecognizedSelector、KVO、Notification、Timer、Container(数组越界,字典插入nil等)、String (越界、nil等)
|
||||
/// 如果在开发阶段,建议关闭该属性,否则开发时不便于及时发现代码中的崩溃问题。
|
||||
bool startCrashProtection = false;
|
||||
|
||||
/// 数据上报时,是否压缩请求的数据
|
||||
/// 默认为false
|
||||
bool enableApmDataCompression = false;
|
||||
|
||||
/// 是否需要接口加密验证(初始化单服务器时使用)
|
||||
/// 默认为不开启,当设置为YES时开启,接口返回加密数据并处理
|
||||
bool encryptServerData = false;
|
||||
|
||||
/// 是否开启小程序的debug模式。
|
||||
/// 默认为BOOLStateUndefined,此时为旧版通过app.json 中 debug:true 开启vconsole。
|
||||
/// 当设置为BOOLStateTrue时,强制所有的小程序都会开启vconsole。
|
||||
/// 当设置为BOOLStateFalse时,非正式版会在更多菜单里显示打开和关闭调试的菜单。
|
||||
/// 当设置为BOOLStateForbidden时,所有版本强制关闭vconsole,且不可调api开启,多面板不展示打开、关闭调试菜单
|
||||
BOOLState appletDebugMode = BOOLState.BOOLStateUndefined;
|
||||
|
||||
/// 是否显示水印
|
||||
bool enableWatermark = false;
|
||||
|
||||
/// 显示水印优先级设置,默认全局配置优先
|
||||
ConfigPriority watermarkPriority = ConfigPriority.ConfigGlobalPriority;
|
||||
|
||||
/// iOS属性
|
||||
/// 小程序的自定义启动加载页,非必填。
|
||||
/// 自定义启动加载页必须继承自FATBaseLoadingView
|
||||
/// 注意:swift中的类名带有命名空间,需要在前拼接项目文件名,如:“SwiftDemo.FCloadingView”。其中SwiftDemo是项目名,FCloadingView是类名
|
||||
String? baseLoadingViewClass;
|
||||
|
||||
/// iOS属性
|
||||
/// 小程序的自定义启动失败页,非必填。
|
||||
/// 自定义启动失败页必须继承自FATBaseLoadFailedView
|
||||
/// 注意:swift中的类名带有命名空间,需要在前拼接项目文件名,如:“SwiftDemo.FCloadingView”。其中SwiftDemo是项目名,FCloadingView是类名
|
||||
String? baseLoadFailedViewClass;
|
||||
|
||||
/// 统一设置小程序中网络请求的header。
|
||||
/// 注意,如果小程序调用api时也传递了相同的key,则会用小程序传递的参数覆盖。
|
||||
/// 对ft.request、ft.downloadFile、ft.uploadFile均会生效
|
||||
Map<String, String>? header;
|
||||
|
||||
/// header优先级设置,默认全局配置优先
|
||||
ConfigPriority headerPriority = ConfigPriority.ConfigGlobalPriority;
|
||||
|
||||
/// iOS属性
|
||||
/// 是否开启小程序中加载的H5页面hook功能,非必填。
|
||||
/// 如果宿主app 拦截了http 或https,会导致H5中的request 丢失body。我们SDK为了兼容这一问题,会hook request请求,
|
||||
/// 在发起请求之前,先将body中的参数,通过代理方法传递给宿主App。宿主App可自行存储每个request的body,然后在
|
||||
/// 自定义的URLProtocol里发起请求之前,组装上body内容。
|
||||
bool enableH5AjaxHook = false;
|
||||
|
||||
/// iOS属性
|
||||
/// 开启enableH5AjaxHook后,会hook request请求,会在原request 的url 后拼上一个FinClipHookBridge-RequestId=xxx的参数。
|
||||
/// 而该参数可设置参数名,比如您可以设置Key 为 FinClip-RequestId,这样会拼接FinClip-RequestId=xxx的参数。
|
||||
String? h5AjaxHookRequestKey;
|
||||
|
||||
/// 小程序中页面栈的最大限制。默认值为0,标识不限制。
|
||||
/// 例如,设置为5,则表示页面栈中最多可有5个页面。从主页最多可再navigateTo 4 层页面。
|
||||
int pageCountLimit = 0;
|
||||
|
||||
/// 自定义的scheme数组
|
||||
List<String>? schemes;
|
||||
|
||||
/// Android属性
|
||||
/// 设置debug模式,影响调试和日志。
|
||||
bool debug = false;
|
||||
|
||||
/// Android属性
|
||||
/// 设置最大同时运行小程序个数
|
||||
int? maxRunningApplet;
|
||||
|
||||
/// Android属性
|
||||
/// WebView mixed content mode
|
||||
int? webViewMixedContentMode;
|
||||
|
||||
/// Android属性
|
||||
/// 小程序与app进程绑定,App被杀死,小程序同步关闭
|
||||
bool bindAppletWithMainProcess = false;
|
||||
|
||||
/// Android属性
|
||||
/// App被杀后关闭小程序的提示文案
|
||||
String? killAppletProcessNotice;
|
||||
|
||||
/// Android属性
|
||||
/// 最低支持的Android SDK版本
|
||||
int minAndroidSdkVersion = 21; // Build.VERSION_CODES.LOLLIPOP
|
||||
|
||||
/// Android属性
|
||||
/// 是否允许截屏录屏,默认允许
|
||||
bool enableScreenShot = false;
|
||||
|
||||
/// Android属性
|
||||
/// 截屏录屏配置项的优先级,默认GLOBAL
|
||||
ConfigPriority screenShotPriority = ConfigPriority.ConfigGlobalPriority;
|
||||
|
||||
/// 日志记录等级
|
||||
LogLevel logLevel = LogLevel.LEVEL_NONE;
|
||||
|
||||
/// Android属性
|
||||
/// 日志文件最长缓存时间,单位秒。
|
||||
/// 最小不能小于1天,即不能小于 1 * 24 * 60 * 60 秒。
|
||||
int? logMaxAliveSec;
|
||||
|
||||
/// XLog日志文件路径
|
||||
String? logDir;
|
||||
|
||||
/// Android属性
|
||||
/// 是否提前创建进程
|
||||
bool enablePreNewProcess = false;
|
||||
|
||||
Config(this.finStoreConfigs);
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
List<Map<String, dynamic>>? storeConfigs =
|
||||
finStoreConfigs.map((e) => e.toMap()).toList();
|
||||
return {
|
||||
"finStoreConfigs": storeConfigs,
|
||||
"userId": userId,
|
||||
"productIdentification": productIdentification,
|
||||
"disableRequestPermissions": disableRequestPermissions,
|
||||
"appletAutoAuthorize": appletAutoAuthorize,
|
||||
"disableGetSuperviseInfo": disableGetSuperviseInfo,
|
||||
"ignoreWebviewCertAuth": ignoreWebviewCertAuth,
|
||||
"appletIntervalUpdateLimit": appletIntervalUpdateLimit,
|
||||
"apmExtendInfo": apmExtendInfo,
|
||||
"startCrashProtection": startCrashProtection,
|
||||
"enableApmDataCompression": enableApmDataCompression,
|
||||
"encryptServerData": encryptServerData,
|
||||
"appletDebugMode": appletDebugMode.index,
|
||||
"enableWatermark": enableWatermark,
|
||||
"watermarkPriority": watermarkPriority.index,
|
||||
"baseLoadingViewClass": baseLoadingViewClass,
|
||||
"baseLoadFailedViewClass": baseLoadFailedViewClass,
|
||||
"header": header,
|
||||
"headerPriority": headerPriority.index,
|
||||
"enableH5AjaxHook": enableH5AjaxHook,
|
||||
"h5AjaxHookRequestKey": h5AjaxHookRequestKey,
|
||||
"pageCountLimit": pageCountLimit,
|
||||
"schemes": schemes,
|
||||
"debug": debug,
|
||||
"maxRunningApplet": maxRunningApplet,
|
||||
"webViewMixedContentMode": webViewMixedContentMode,
|
||||
"bindAppletWithMainProcess": bindAppletWithMainProcess,
|
||||
"killAppletProcessNotice": killAppletProcessNotice,
|
||||
"minAndroidSdkVersion": minAndroidSdkVersion,
|
||||
"enableScreenShot": enableScreenShot,
|
||||
"screenShotPriority": screenShotPriority.index,
|
||||
"logLevel": logLevel.index,
|
||||
"logMaxAliveSec": logMaxAliveSec,
|
||||
"logDir": logDir,
|
||||
"enablePreNewProcess": enablePreNewProcess,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class UIConfig {
|
||||
// 导航栏的标题样式,目前支持了font,Android无此属性
|
||||
Map<String, dynamic>? navigationTitleTextAttributes;
|
||||
|
||||
// 导航栏的高度(不含状态栏高度),默认值为44,Android无此属性
|
||||
double navigationBarHeight = 44;
|
||||
|
||||
// 导航栏的标题颜色(深色主题),默认值为白色
|
||||
int navigationBarTitleLightColor = 0xffffffff;
|
||||
|
||||
// 导航栏的标题颜色(明亮主题),默认值为黑色
|
||||
int navigationBarTitleDarkColor = 0xff000000;
|
||||
|
||||
// 导航栏的返回按钮颜色(深色主题),默认值为白色
|
||||
int navigationBarBackBtnLightColor = 0xffffffff;
|
||||
|
||||
// 导航栏的返回按钮颜色(明亮主题),默认值为黑色
|
||||
int navigationBarBackBtnDarkColor = 0xff000000;
|
||||
|
||||
// 弹出的菜单视图的样式 0:默认 1:Normal
|
||||
int moreMenuStyle = 0;
|
||||
|
||||
/// iOS为hideBackToHomePriority
|
||||
/// 隐藏导航栏返回首页按钮的优先级设置,默认全局配置优先 不支持FATConfigAppletFilePriority
|
||||
ConfigPriority isHideBackHomePriority = ConfigPriority.ConfigGlobalPriority;
|
||||
|
||||
/// 当导航栏为默认导航栏时,是否始终显示返回按钮 ios未发现该属性
|
||||
bool isAlwaysShowBackInDefaultNavigationBar = false;
|
||||
|
||||
///是否清除导航栏导航按钮的背景
|
||||
/// 是否清除导航栏导航按钮的背景 ios未发现该属性
|
||||
bool isClearNavigationBarNavButtonBackground = false;
|
||||
|
||||
///是否隐藏"更多"菜单中的"反馈与投诉"菜单入口
|
||||
/// 隐藏...弹出菜单中的 【反馈与投诉】 菜单
|
||||
bool isHideFeedbackAndComplaints = false;
|
||||
|
||||
///是否隐藏"更多"菜单中的"返回首页"菜单入口
|
||||
/// 隐藏...弹出菜单中的 【返回首页】 菜单
|
||||
bool isHideBackHome = false;
|
||||
|
||||
///是否隐藏"更多"菜单中的"转发"按钮
|
||||
/// 隐藏...弹出菜单中的 【转发】 菜单,默认为false
|
||||
bool isHideForwardMenu = false;
|
||||
|
||||
///是否隐藏"更多"菜单中的"分享"按钮
|
||||
/// 隐藏...弹出菜单中的 【分享】 菜单,默认为true
|
||||
bool isHideShareAppletMenu = true;
|
||||
|
||||
///是否隐藏"更多"菜单中的"添加到桌面"按钮
|
||||
/// 隐藏...弹出菜单中的 【添加到桌面】 菜单
|
||||
bool isHideAddToDesktopMenu = true;
|
||||
|
||||
///是否隐藏"更多"菜单中的"收藏"按钮
|
||||
/// 隐藏...弹出菜单中的 【收藏】 菜单
|
||||
bool isHideFavoriteMenu = true;
|
||||
|
||||
/// 加载小程序过程中(小程序Service层还未加载成功,基础库还没有向SDK传递小程序配置信息),是否隐藏导航栏的关闭按钮
|
||||
bool hideTransitionCloseButton = false;
|
||||
// 隐藏...弹出菜单中的 【重新进入小程序】 菜单,默认为false
|
||||
bool isHideRefreshMenu = false;
|
||||
|
||||
/// 禁用侧滑关闭小程序手势
|
||||
bool disableSlideCloseAppletGesture = false;
|
||||
// 隐藏...弹出菜单中的 【设置】 菜单,默认为false
|
||||
bool isHideSettingMenu = false;
|
||||
|
||||
/// 胶囊按钮配置
|
||||
CapsuleConfig? capsuleConfig;
|
||||
|
||||
// 返回首页按钮的配置
|
||||
NavHomeConfig? navHomeConfig;
|
||||
|
||||
FloatWindowConfig? floatWindowConfig;
|
||||
|
||||
//iOS中独有的设置属性
|
||||
// 权限弹窗UI配置
|
||||
AuthViewConfig? authViewConfig;
|
||||
|
||||
// iOS为progressBarColor,这里合并成一个
|
||||
// 小程序里加载H5页面时进度条的颜色 格式 0xFFFFAA00
|
||||
int? progressBarColor;
|
||||
int? webViewProgressBarColor;
|
||||
|
||||
// 隐藏小程序里加载H5时进度条,默认为false
|
||||
bool hideWebViewProgressBar = false;
|
||||
|
||||
// 是否自适应暗黑模式。如果设置为true,则更多页面、关于等原生页面会随着手机切换暗黑,也自动调整为暗黑模式
|
||||
bool autoAdaptDarkMode = true;
|
||||
bool autoAdaptDarkMode = false;
|
||||
|
||||
//注入小程序统称appletText字符串,默认为“小程序”。
|
||||
// 要拼接的userAgent字符串
|
||||
String? appendingCustomUserAgent;
|
||||
|
||||
/// Android没有这个属性,Android通过setActivityTransitionAnim方法设置
|
||||
///
|
||||
/// 打开小程序时的默认动画方式,默认为FATTranstionStyleUp。
|
||||
/// 该属性主要针对非api方式打开小程序时的动画缺省值。主要改变如下场景的动画方式:
|
||||
/// 1. scheme 打开小程序;
|
||||
/// 2. universal link 打开小程序;
|
||||
/// 3. navigateToMiniprogram
|
||||
TranstionStyle transtionStyle = TranstionStyle.TranstionStyleUp;
|
||||
|
||||
/// 加载小程序过程中(小程序Service层还未加载成功,基础库还没有向SDK传递小程序配置信息),是否隐藏导航栏的关闭按钮
|
||||
bool hideTransitionCloseButton = false;
|
||||
|
||||
/// 是否禁用侧滑关闭小程序的手势。默认为NO
|
||||
/// 该手势禁用,不影响小程序里页面的侧滑返回上一页的功能
|
||||
bool disableSlideCloseAppletGesture = false;
|
||||
|
||||
/// 注入小程序统称appletText字符串,默认为“小程序”。
|
||||
String? appletText;
|
||||
|
||||
/// Android属性
|
||||
/// Loading页回调Class
|
||||
String? loadingLayoutCls;
|
||||
|
||||
/// 是否使用我们内部实现的live组件(直播组件)
|
||||
bool useNativeLiveComponent = false;
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
"navigationTitleTextAttributes": navigationTitleTextAttributes,
|
||||
"navigationBarHeight": navigationBarHeight,
|
||||
"navigationBarTitleLightColor": navigationBarTitleLightColor.toSigned(32),
|
||||
"navigationBarTitleDarkColor": navigationBarTitleDarkColor.toSigned(32),
|
||||
"navigationBarBackBtnLightColor":
|
||||
navigationBarBackBtnLightColor.toSigned(32),
|
||||
"navigationBarBackBtnDarkColor":
|
||||
navigationBarBackBtnDarkColor.toSigned(32),
|
||||
"isAlwaysShowBackInDefaultNavigationBar":
|
||||
isAlwaysShowBackInDefaultNavigationBar,
|
||||
"isClearNavigationBarNavButtonBackground":
|
||||
|
@ -112,17 +370,27 @@ class UIConfig {
|
|||
"isHideFeedbackAndComplaints": isHideFeedbackAndComplaints,
|
||||
"isHideBackHome": isHideBackHome,
|
||||
"isHideForwardMenu": isHideForwardMenu,
|
||||
"isHideRefreshMenu": isHideRefreshMenu,
|
||||
"isHideShareAppletMenu": isHideShareAppletMenu,
|
||||
"isHideSettingMenu": isHideSettingMenu,
|
||||
"isHideAddToDesktopMenu": isHideAddToDesktopMenu,
|
||||
"isHideFavoriteMenu": isHideFavoriteMenu,
|
||||
"hideTransitionCloseButton": hideTransitionCloseButton,
|
||||
"disableSlideCloseAppletGesture": disableSlideCloseAppletGesture,
|
||||
"capsuleConfig": capsuleConfig?.toMap(),
|
||||
"navHomeConfig": navHomeConfig?.toMap(),
|
||||
"authViewConfig": authViewConfig?.toMap(),
|
||||
"floatWindowConfig": floatWindowConfig?.toMap(),
|
||||
"progressBarColor": progressBarColor,
|
||||
"webViewProgressBarColor": webViewProgressBarColor?.toSigned(32),
|
||||
"hideWebViewProgressBar": hideWebViewProgressBar,
|
||||
"moreMenuStyle": moreMenuStyle,
|
||||
"isHideBackHomePriority": isHideBackHomePriority.index,
|
||||
"autoAdaptDarkMode": autoAdaptDarkMode,
|
||||
"appendingCustomUserAgent": appendingCustomUserAgent,
|
||||
"transtionStyle": transtionStyle.index,
|
||||
"disableSlideCloseAppletGesture": disableSlideCloseAppletGesture,
|
||||
"appletText": appletText,
|
||||
"loadingLayoutCls": loadingLayoutCls,
|
||||
"useNativeLiveComponent": useNativeLiveComponent,
|
||||
"appletText": appletText
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -136,7 +404,7 @@ class CapsuleConfig {
|
|||
double capsuleHeight = 32;
|
||||
|
||||
/// 右上角胶囊视图的右边距
|
||||
double capsuleRightMargin = 7;
|
||||
double capsuleRightMargin = 8;
|
||||
|
||||
/// 右上角胶囊视图的圆角半径,默认值为5
|
||||
double capsuleCornerRadius = 5;
|
||||
|
@ -151,11 +419,9 @@ class CapsuleConfig {
|
|||
int capsuleBgDarkColor = 0x80ffffff;
|
||||
|
||||
/// 右上角胶囊视图的边框浅色颜色
|
||||
|
||||
int capsuleBorderLightColor = 0x80ffffff;
|
||||
|
||||
///右上角胶囊视图的边框深色颜色
|
||||
|
||||
int capsuleBorderDarkColor = 0x26000000;
|
||||
|
||||
/// 胶囊分割线浅色颜色
|
||||
|
@ -177,7 +443,6 @@ class CapsuleConfig {
|
|||
double moreBtnLeftMargin = 6;
|
||||
|
||||
/// 胶囊里的浅色更多按钮的图片对象,如果不传,会使用默认图标
|
||||
|
||||
int? closeLightImage;
|
||||
|
||||
/// 胶囊里的深色更多按钮的图片对象,如果不传,会使用默认图标
|
||||
|
@ -234,15 +499,239 @@ class FloatWindowConfig {
|
|||
}
|
||||
}
|
||||
|
||||
class NavHomeConfig {
|
||||
/// 返回首页按钮的宽度
|
||||
double width;
|
||||
|
||||
/// 返回首页按钮的高度
|
||||
double height;
|
||||
|
||||
/// 返回首页按钮的左边距,Android默认值为8,iOS默认值为10
|
||||
double leftMargin = Platform.isAndroid ? 8 : 10;
|
||||
|
||||
/// 返回首页按钮的圆角半径,默认值为5
|
||||
double cornerRadius = 5;
|
||||
|
||||
/// 返回首页按钮的边框宽度,Android默认值为0.75,iOS默认值为0.8
|
||||
double borderWidth = Platform.isAndroid ? 0.75 : 0.8;
|
||||
|
||||
/// 返回首页按钮的边框浅色颜色
|
||||
/// (暗黑模式)
|
||||
int borderLightColor = 0x80ffffff;
|
||||
|
||||
/// 返回首页按钮的边框深色颜色
|
||||
/// (明亮模式)
|
||||
int borderDarkColor = 0x26000000;
|
||||
|
||||
/// 返回首页按钮的背景浅色颜色
|
||||
/// (明亮模式)
|
||||
int bgLightColor = 0x33000000;
|
||||
|
||||
/// 返回首页按钮的背景深色颜色
|
||||
/// (暗黑模式)
|
||||
int bgDarkColor = 0x80ffffff;
|
||||
|
||||
NavHomeConfig(this.width, this.height, this.borderLightColor,
|
||||
this.borderDarkColor, this.bgLightColor, this.bgDarkColor);
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
"width": width,
|
||||
"height": height,
|
||||
"leftMargin": leftMargin,
|
||||
"cornerRadius": cornerRadius,
|
||||
"borderWidth": borderWidth,
|
||||
"borderLightColor": borderLightColor.toSigned(32),
|
||||
"borderDarkColor": borderDarkColor.toSigned(32),
|
||||
"bgLightColor": bgLightColor.toSigned(32),
|
||||
"bgDarkColor": bgDarkColor.toSigned(32),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class AuthViewConfig {
|
||||
/// 小程序名称字体大小,默认字体为PingFangSC-Regular,默认大小16
|
||||
double appletNameTextSize = 16;
|
||||
|
||||
/// 小程序名称的浅色颜色(明亮模式),默认#222222
|
||||
int appletNameLightColor = 0xff222222;
|
||||
|
||||
/// 小程序名称的深色颜色(暗黑模式),默认#D0D0D0
|
||||
int appletNameDarkColor = 0xffd0d0d0;
|
||||
|
||||
/// 权限标题字体大小,默认字体为PingFangSC-Medium,默认大小17
|
||||
/// 备注:权限选项文字字体大小使用该配置项,但字体固定为PingFangSC-Regular
|
||||
double authorizeTitleTextSize = 17;
|
||||
|
||||
/// 权限标题的浅色颜色(明亮模式),默认#222222
|
||||
/// 备注:权限选项文字字体颜色使用该配置项
|
||||
int authorizeTitleLightColor = 0xff222222;
|
||||
|
||||
/// 权限标题的深色颜色(暗黑模式),默认#D0D0D0
|
||||
/// 备注:权限选项文字字体颜色使用该配置项
|
||||
int authorizeTitleDarkColor = 0xffd0d0d0;
|
||||
|
||||
/// 权限描述字体大小,默认字体为PingFangSC-Regular,默认大小14
|
||||
double authorizeDescriptionTextSize = 14;
|
||||
|
||||
/// 权限描述的浅色颜色(明亮模式),默认#666666
|
||||
int authorizeDescriptionLightColor = 0xff666666;
|
||||
|
||||
/// 权限描述的深色颜色(暗黑模式),默认#5c5c5c
|
||||
int authorizeDescriptionDarkColor = 0xff5c5c5c;
|
||||
|
||||
/// 协议标题字体大小,默认字体为PingFangSC-Regular,默认大小16
|
||||
double agreementTitleTextSize = 16;
|
||||
|
||||
/// 协议标题的浅色颜色(明亮模式),默认#222222
|
||||
int agreementTitleLightColor = 0xff222222;
|
||||
|
||||
/// 协议标题的深色颜色(暗黑模式),默认#D0D0D0
|
||||
int agreementTitleDarkColor = 0xffd0d0d0;
|
||||
|
||||
/// 协议描述字体大小,默认字体为PingFangSC-Regular,默认大小14
|
||||
double agreementDescriptionTextSize = 14;
|
||||
|
||||
/// 协议描述的浅色颜色(明亮模式),默认#222222
|
||||
int agreementDescriptionLightColor = 0xff222222;
|
||||
|
||||
/// 协议描述的深色颜色(暗黑模式),默认#D0D0D0
|
||||
int agreementDescriptionDarkColor = 0xffd0d0d0;
|
||||
|
||||
/// 链接的浅色颜色(明亮模式),默认#4285f4
|
||||
int linkLightColor = 0xff4285f4;
|
||||
|
||||
/// 链接的深色颜色(暗黑模式),默认#4285f4
|
||||
int linkDarkColor = 0xff4285f4;
|
||||
|
||||
/// 同意按钮配置(明亮模式),默认配置如下:
|
||||
/// 圆角:4
|
||||
/// 默认背景色:#4285F4
|
||||
/// 默认描边:#4285F4
|
||||
/// 默认文字颜色:#FFFFFF
|
||||
/// 按下背景色:#3B77DB
|
||||
/// 按下默认描边:#3B77DB
|
||||
/// 按下文字颜色:#FFFFFF
|
||||
AuthButtonConfig? allowButtonLightConfig;
|
||||
|
||||
/// 同意按钮配置(暗黑模式),默认配置如下:
|
||||
/// 圆角:4
|
||||
/// 默认背景色:#4285F4
|
||||
/// 默认描边:#4285F4
|
||||
/// 默认文字颜色:#FFFFFF
|
||||
/// 按下背景色:#5E97F5
|
||||
/// 按下默认描边:#5E97F5
|
||||
/// 按下文字颜色:#FFFFFF
|
||||
AuthButtonConfig? allowButtonDarkConfig;
|
||||
|
||||
/// 拒绝按钮配置(明亮模式),默认配置如下:
|
||||
/// 圆角:4
|
||||
/// 默认背景色:#FFFFFF
|
||||
/// 默认描边:#E2E2E2
|
||||
/// 默认文字颜色:#222222
|
||||
/// 按下背景色:#D8D8D8
|
||||
/// 按下默认描边:#D8D8D8
|
||||
/// 按下文字颜色:#222222
|
||||
AuthButtonConfig? rejectButtonLightConfig;
|
||||
|
||||
/// 拒绝按钮配置(暗黑模式),默认配置如下:
|
||||
/// 圆角:4
|
||||
/// 默认背景色:#2C2C2C
|
||||
/// 默认描边:#2C2C2C
|
||||
/// 默认文字颜色:#D0D0D0
|
||||
/// 按下背景色:#414141
|
||||
/// 按下默认描边:#414141
|
||||
/// 按下文字颜色:#D0D0D0
|
||||
AuthButtonConfig? rejectButtonDarkConfig;
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
"appletNameTextSize": appletNameTextSize,
|
||||
"appletNameLightColor": appletNameLightColor.toSigned(32),
|
||||
"appletNameDarkColor": appletNameDarkColor.toSigned(32),
|
||||
"authorizeTitleTextSize": authorizeTitleTextSize,
|
||||
"authorizeTitleLightColor": authorizeTitleLightColor.toSigned(32),
|
||||
"authorizeTitleDarkColor": authorizeTitleDarkColor.toSigned(32),
|
||||
"authorizeDescriptionTextSize": authorizeDescriptionTextSize,
|
||||
"authorizeDescriptionLightColor":
|
||||
authorizeDescriptionLightColor.toSigned(32),
|
||||
"authorizeDescriptionDarkColor":
|
||||
authorizeDescriptionDarkColor.toSigned(32),
|
||||
"agreementTitleTextSize": agreementTitleTextSize,
|
||||
"agreementTitleLightColor": agreementTitleLightColor.toSigned(32),
|
||||
"agreementTitleDarkColor": agreementTitleDarkColor.toSigned(32),
|
||||
"agreementDescriptionTextSize": agreementDescriptionTextSize,
|
||||
"agreementDescriptionLightColor":
|
||||
agreementDescriptionLightColor.toSigned(32),
|
||||
"agreementDescriptionDarkColor":
|
||||
agreementDescriptionDarkColor.toSigned(32),
|
||||
"linkLightColor": linkLightColor.toSigned(32),
|
||||
"linkDarkColor": linkDarkColor.toSigned(32),
|
||||
"allowButtonLightConfig": allowButtonLightConfig?.toMap(),
|
||||
"allowButtonDarkConfig": allowButtonDarkConfig?.toMap(),
|
||||
"rejectButtonLightConfig": rejectButtonLightConfig?.toMap(),
|
||||
"rejectButtonDarkConfig": rejectButtonDarkConfig?.toMap(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class AuthButtonConfig {
|
||||
/// 按钮的圆角半径
|
||||
double cornerRadius;
|
||||
|
||||
/// 按钮默认背景颜色
|
||||
int normalBackgroundColor;
|
||||
|
||||
/// 按钮按下背景颜色
|
||||
int pressedBackgroundColor;
|
||||
|
||||
/// 按钮默认文字颜色
|
||||
int normalTextColor;
|
||||
|
||||
/// 按钮按下文字颜色
|
||||
int pressedTextColor;
|
||||
|
||||
/// 按钮默认边框颜色
|
||||
int normalBorderColor;
|
||||
|
||||
/// 按钮按下边框颜色
|
||||
int pressedBorderColor;
|
||||
|
||||
AuthButtonConfig(
|
||||
this.cornerRadius,
|
||||
this.normalBackgroundColor,
|
||||
this.pressedBackgroundColor,
|
||||
this.normalTextColor,
|
||||
this.pressedTextColor,
|
||||
this.normalBorderColor,
|
||||
this.pressedBorderColor);
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
"cornerRadius": cornerRadius,
|
||||
"normalBackgroundColor": normalBackgroundColor.toSigned(32),
|
||||
"pressedBackgroundColor": pressedBackgroundColor.toSigned(32),
|
||||
"normalTextColor": normalTextColor.toSigned(32),
|
||||
"pressedTextColor": pressedTextColor.toSigned(32),
|
||||
"normalBorderColor": normalBorderColor.toSigned(32),
|
||||
"pressedBorderColor": pressedBorderColor.toSigned(32)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class BaseAppletRequest {
|
||||
// 服务器地址,必填
|
||||
String apiServer;
|
||||
|
||||
// 小程序id,必填
|
||||
String appletId;
|
||||
|
||||
// 小程序的启动参数,非必填
|
||||
Map<String, String>? startParams;
|
||||
|
||||
// iOS端打开小程序时是否显示动画,默认为true。
|
||||
bool? animated;
|
||||
|
||||
// 是否以单进程模式运行,仅限android,默认为false
|
||||
bool isSingleProcess;
|
||||
|
||||
|
@ -268,18 +757,25 @@ class BaseAppletRequest {
|
|||
class RemoteAppletRequest {
|
||||
// 服务器地址,必填
|
||||
String apiServer;
|
||||
|
||||
// 小程序id,必填
|
||||
String appletId;
|
||||
|
||||
// 小程序的启动参数,非必填
|
||||
Map<String, String>? startParams;
|
||||
|
||||
// 小程序的索引,(审核小程序时必填)
|
||||
int? sequence;
|
||||
|
||||
// 离线小程序压缩包路径,非必填
|
||||
String? offlineMiniprogramZipPath;
|
||||
|
||||
// 离线基础库压缩包路径,非必填
|
||||
String? offlineFrameworkZipPath;
|
||||
|
||||
// iOS端打开小程序时是否显示动画,默认为true。
|
||||
bool animated;
|
||||
|
||||
// 是否以单进程模式运行,仅限android,默认为false
|
||||
bool isSingleProcess;
|
||||
|
||||
|
@ -316,8 +812,10 @@ class RemoteAppletRequest {
|
|||
class QRCodeAppletRequest {
|
||||
// 二维码内容
|
||||
String qrCode;
|
||||
|
||||
// 是否显示打开动画
|
||||
bool animated = true;
|
||||
|
||||
// 是否以单进程模式运行,仅限android,默认为false
|
||||
bool isSingleProcess;
|
||||
|
||||
|
@ -341,6 +839,33 @@ enum Anim {
|
|||
NoneAnim
|
||||
}
|
||||
|
||||
enum ConfigPriority {
|
||||
ConfigGlobalPriority, //全局配置优先
|
||||
ConfigSpecifiedPriority, // 单个配置优先
|
||||
ConfigAppletFilePriority, // 小程序配置文件优先,小程序app.ext.json文件中配置
|
||||
}
|
||||
|
||||
enum TranstionStyle {
|
||||
TranstionStyleUp, // 页面从下往上弹出,类似present效果
|
||||
TranstionStylePush, // 页面从右往左弹出,类似push效果
|
||||
}
|
||||
|
||||
enum BOOLState {
|
||||
BOOLStateUndefined, // 未设置
|
||||
BOOLStateTrue, // 所有版本强制开启vconsole,且不可调api关闭,更多面板不展示打开、关闭调试菜单
|
||||
BOOLStateFalse, // 正式版更多面板不展示打开、关闭调试菜单;非正式版更多面板展示打开、关闭调试菜单;所有版本均可调setEnableDebug开启vconsole。
|
||||
BOOLStateForbidden, // 所有版本强制关闭vconsole,且不可调api开启,多面板不展示打开、关闭调试菜单
|
||||
}
|
||||
|
||||
enum LogLevel {
|
||||
LEVEL_ERROR, // 设置为该等级,将会记录ERROR级别的日志
|
||||
LEVEL_WARNING, // 设置为该等级,将会记录ERROR和WARNING级别的日志
|
||||
LEVEL_INFO, // 设置为该等级,将会记录ERROR、WARNING和INFO级别的日志
|
||||
LEVEL_DEBUG, // 设置为该等级,将会记录ERROR、WARING、INFO和DEBUG级别的日志
|
||||
LEVEL_VERBOSE, // 设置为该等级,将会记录ERROR、WARING、INFO、DEBUG和VERBOSE级别的日志
|
||||
LEVEL_NONE
|
||||
}
|
||||
|
||||
class Mop {
|
||||
static final Mop _instance = new Mop._internal();
|
||||
late MethodChannel _channel;
|
||||
|
@ -407,8 +932,6 @@ class Mop {
|
|||
}
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
/// initialize mop miniprogram engine.
|
||||
/// 初始化小程序
|
||||
/// [sdkkey] is required. it can be getted from api.finclip.com
|
||||
|
@ -425,7 +948,6 @@ class Mop {
|
|||
/// [customWebViewUserAgent] 设置自定义webview ua
|
||||
/// [appletIntervalUpdateLimit] 设置小程序批量更新周期
|
||||
/// [maxRunningApplet] 设置最大同时运行小程序个数
|
||||
///
|
||||
Future<Map> initialize(
|
||||
String sdkkey,
|
||||
String secret, {
|
||||
|
@ -444,8 +966,7 @@ class Mop {
|
|||
int? appletIntervalUpdateLimit,
|
||||
int? maxRunningApplet,
|
||||
bool useLocalTbsCore = false,
|
||||
String? tbsCoreUrl
|
||||
|
||||
String? tbsCoreUrl,
|
||||
}) async {
|
||||
List<Map<String, dynamic>>? storeConfigs =
|
||||
finStoreConfigs?.map((e) => e.toMap()).toList();
|
||||
|
@ -473,6 +994,14 @@ class Mop {
|
|||
return ret;
|
||||
}
|
||||
|
||||
Future<Map> initSDK(Config config, {UIConfig? uiConfig}) async {
|
||||
final Map ret = await _channel.invokeMethod('initSDK', {
|
||||
'config': config.toMap(),
|
||||
'uiConfig': uiConfig?.toMap(),
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// open the miniprogram [appId] from the mop server.
|
||||
/// 打开小程序
|
||||
/// [appId] is required.
|
||||
|
@ -511,12 +1040,9 @@ class Mop {
|
|||
return ret;
|
||||
}
|
||||
|
||||
///
|
||||
/// get current using applet
|
||||
/// 获取当前正在使用的小程序信息
|
||||
/// {appId,name,icon,description,version,thumbnail}
|
||||
///
|
||||
///
|
||||
Future<Map<String, dynamic>> currentApplet() async {
|
||||
final ret = await _channel.invokeMapMethod("currentApplet");
|
||||
return Map<String, dynamic>.from(ret!);
|
||||
|
@ -528,18 +1054,14 @@ class Mop {
|
|||
return Map<String, dynamic>.from(ret!);
|
||||
}
|
||||
|
||||
///
|
||||
/// close all running applets
|
||||
/// 关闭当前打开的所有小程序
|
||||
///
|
||||
Future closeAllApplets() async {
|
||||
return await _channel.invokeMethod("closeAllApplets");
|
||||
}
|
||||
|
||||
///
|
||||
/// clear applets cache
|
||||
/// 清除缓存的小程序
|
||||
///
|
||||
Future clearApplets() async {
|
||||
return await _channel.invokeMethod("clearApplets");
|
||||
}
|
||||
|
@ -556,18 +1078,14 @@ class Mop {
|
|||
return await _channel.invokeMethod("removeAllUsedApplets", params);
|
||||
}
|
||||
|
||||
///
|
||||
/// 获取运行时版本号
|
||||
///
|
||||
Future<String> sdkVersion() async {
|
||||
return await _channel
|
||||
.invokeMapMethod("sdkVersion")
|
||||
.then((value) => value?["data"]);
|
||||
}
|
||||
|
||||
///
|
||||
/// (扫码后)解密-鉴权-打开小程序
|
||||
///
|
||||
Future scanOpenApplet(String info, {bool isSingleProcess = false}) async {
|
||||
Map<String, Object> params = {
|
||||
'info': info,
|
||||
|
@ -576,10 +1094,8 @@ class Mop {
|
|||
return await _channel.invokeMapMethod("scanOpenApplet", params);
|
||||
}
|
||||
|
||||
///
|
||||
/// 通过二维码打开小程序
|
||||
/// [qrcode] 二维码内容
|
||||
///
|
||||
Future qrcodeOpenApplet(String qrcode, {bool isSingleProcess = false}) async {
|
||||
Map<String, Object> params = {
|
||||
'qrcode': qrcode,
|
||||
|
@ -588,9 +1104,7 @@ class Mop {
|
|||
return await _channel.invokeMapMethod("qrcodeOpenApplet", params);
|
||||
}
|
||||
|
||||
///
|
||||
/// 根据微信QrCode信息解析小程序信息
|
||||
///
|
||||
Future<Map<String, dynamic>> parseAppletInfoFromWXQrCode(
|
||||
String qrCode, String apiServer) async {
|
||||
final ret = await _channel.invokeMapMethod("parseAppletInfoFromWXQrCode",
|
||||
|
@ -598,10 +1112,8 @@ class Mop {
|
|||
return Map<String, dynamic>.from(ret!);
|
||||
}
|
||||
|
||||
///
|
||||
/// register handler to provide custom info or behaviour
|
||||
/// 注册小程序事件处理
|
||||
///
|
||||
void registerAppletHandler(AppletHandler handler) {
|
||||
_appletHandlerApis["forwardApplet"] = (params) async {
|
||||
handler.forwardApplet(Map<String, dynamic>.from(params));
|
||||
|
@ -609,20 +1121,20 @@ class Mop {
|
|||
_appletHandlerApis["getUserInfo"] = (params) {
|
||||
return handler.getUserInfo();
|
||||
};
|
||||
// _appletHandlerApis["getCustomMenus"] = (params) async {
|
||||
// final res = await handler.getCustomMenus(params["appId"]);
|
||||
// List<Map<String, dynamic>> list = [];
|
||||
// res.forEach((element) {
|
||||
// Map<String, dynamic> map = Map();
|
||||
// map["menuId"] = element.menuId;
|
||||
// map["image"] = element.image;
|
||||
// map["title"] = element.title;
|
||||
// map["type"] = element.type;
|
||||
// list.add(map);
|
||||
// });
|
||||
// debugPrint("registerAppletHandler getCustomMenus list $list");
|
||||
// return list;
|
||||
// };
|
||||
_appletHandlerApis["getCustomMenus"] = (params) async {
|
||||
final res = await handler.getCustomMenus(params["appId"]);
|
||||
List<Map<String, dynamic>> list = [];
|
||||
res.forEach((element) {
|
||||
Map<String, dynamic> map = Map();
|
||||
map["menuId"] = element.menuId;
|
||||
map["image"] = element.image;
|
||||
map["title"] = element.title;
|
||||
map["type"] = element.type;
|
||||
list.add(map);
|
||||
});
|
||||
debugPrint("registerAppletHandler getCustomMenus list $list");
|
||||
return list;
|
||||
};
|
||||
_appletHandlerApis["onCustomMenuClick"] = (params) async {
|
||||
return handler.onCustomMenuClick(
|
||||
params["appId"],
|
||||
|
@ -641,10 +1153,8 @@ class Mop {
|
|||
_channel.invokeMethod("registerAppletHandler");
|
||||
}
|
||||
|
||||
///
|
||||
/// register extension api
|
||||
/// 注册拓展api
|
||||
///
|
||||
void registerExtensionApi(String name, ExtensionApiHandler handler) {
|
||||
_extensionApis[name] = handler;
|
||||
_channel.invokeMethod("registerExtensionApi", {"name": name});
|
||||
|
@ -665,33 +1175,26 @@ class Mop {
|
|||
return;
|
||||
}
|
||||
|
||||
///
|
||||
/// 关闭小程序 小程序会在内存中存在
|
||||
///
|
||||
Future<void> closeApplet(String appletId, bool animated) async {
|
||||
await _channel.invokeMethod(
|
||||
"closeApplet", {"appletId": appletId, "animated": animated});
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
/// 结束小程序 小程序会从内存中清除
|
||||
///
|
||||
Future<void> finishRunningApplet(String appletId, bool animated) async {
|
||||
await _channel.invokeMethod(
|
||||
"finishRunningApplet", {"appletId": appletId, "animated": animated});
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
/// 设置小程序切换动画 安卓
|
||||
///
|
||||
Future setActivityTransitionAnim(Anim anim) async {
|
||||
await _channel.invokeMethod("setActivityTransitionAnim", {"anim": ""});
|
||||
return;
|
||||
}
|
||||
|
||||
///
|
||||
/// 原生发送事件给小程序
|
||||
/// [appId] 小程序id
|
||||
/// [eventData] 事件对象
|
||||
|
@ -702,13 +1205,11 @@ class Mop {
|
|||
return;
|
||||
}
|
||||
|
||||
///
|
||||
/// 原生调用webview中的js方法
|
||||
/// [appId] 小程序id
|
||||
/// [eventName] 方法名
|
||||
/// [nativeViewId] webviewId
|
||||
/// [eventData] 参数
|
||||
///
|
||||
Future<void> callJS(String appId, String eventName, String nativeViewId,
|
||||
Map<String, dynamic> eventData) async {
|
||||
await _channel.invokeMethod("callJS", {
|
||||
|
@ -720,18 +1221,14 @@ class Mop {
|
|||
return;
|
||||
}
|
||||
|
||||
///
|
||||
/// register webview extension api
|
||||
/// 注册webview拓展api
|
||||
///
|
||||
void addWebExtentionApi(String name, ExtensionApiHandler handler) {
|
||||
_webExtensionApis[name] = handler;
|
||||
_channel.invokeMethod("addWebExtentionApi", {"name": name});
|
||||
}
|
||||
|
||||
///
|
||||
/// 将当前正在运行的最后一个打开的小程序移至任务栈前台
|
||||
///
|
||||
void moveCurrentAppletToFront() async {
|
||||
return await _channel.invokeMethod("moveCurrentAppletToFront");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue