diff --git a/android/src/main/java/com/finogeeks/mop/api/mop/AppletHandlerModule.java b/android/src/main/java/com/finogeeks/mop/api/mop/AppletHandlerModule.java index 097b636..aa54290 100644 --- a/android/src/main/java/com/finogeeks/mop/api/mop/AppletHandlerModule.java +++ b/android/src/main/java/com/finogeeks/mop/api/mop/AppletHandlerModule.java @@ -186,12 +186,17 @@ public class AppletHandlerModule extends BaseApi { if (image == null) { image = ""; } + String darkImage = (String) map.get("darkImage"); + if (darkImage == null) { + darkImage = ""; + } moreMenuItems.add( new MoreMenuItem( menuId, title, image, -1, + darkImage, moreMenuType, true ) diff --git a/example/ios/Podfile b/example/ios/Podfile index 8933ab5..8f3be61 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,6 +1,9 @@ # Uncomment this line to define a global platform for your project platform :ios, '9.0' +source 'ssh://gitlab.finogeeks.club/finclip-ios/DevPods' +source 'ssh://gitlab.finogeeks.club/finclip-ios/FinPods' + # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 22a8d75..44b619c 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,11 +1,11 @@ PODS: - - FinApplet (2.40.9) - - FinAppletExt (2.40.9): - - FinApplet (= 2.40.9) + - FinApplet (2.40.12-dev20230614v02) + - FinAppletExt (2.40.12-dev20230614v02): + - FinApplet (= 2.40.12-dev20230614v02) - Flutter (1.0.0) - mop (0.1.1): - - FinApplet (= 2.40.9) - - FinAppletExt (= 2.40.9) + - FinApplet (= 2.40.12-dev20230614v02) + - FinAppletExt (= 2.40.12-dev20230614v02) - Flutter DEPENDENCIES: @@ -13,7 +13,7 @@ DEPENDENCIES: - mop (from `.symlinks/plugins/mop/ios`) SPEC REPOS: - trunk: + ssh://gitlab.finogeeks.club/finclip-ios/DevPods: - FinApplet - FinAppletExt @@ -24,11 +24,11 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/mop/ios" SPEC CHECKSUMS: - FinApplet: 9dd3810fb41400c882c8c5d5f528452b0f1f0a63 - FinAppletExt: e9f418e3d11f5cf4ee42b2d64ab405fe747f51fe + FinApplet: de28575dab4c28c200c02844f4909b04d376def2 + FinAppletExt: eea5d939667836c744b5eb4afcc81285e248c9f3 Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a - mop: 8684b0dad361ce1d9b2d4a98d65a1acb52ce4120 + mop: d8bad2214a82a3440c154e496d0d49c1144490a4 -PODFILE CHECKSUM: 2317ba7584871ae8cd67fd0244fbd5e96fd06167 +PODFILE CHECKSUM: 2da0220ee5ba22a2dfcec42dfe5b17d05f3c3da9 COCOAPODS: 1.11.3 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 95037a5..0551d33 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -496,6 +496,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 9QCKYFU5M4; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = finclip_example; diff --git a/example/ios/Runner/Assets.xcassets/Contents.json b/example/ios/Runner/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/Contents.json b/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/Contents.json new file mode 100644 index 0000000..96dd923 --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "minipro_list_collect@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "minipro_list_collect@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/minipro_list_collect@2x.png b/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/minipro_list_collect@2x.png new file mode 100644 index 0000000..1b517c1 Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/minipro_list_collect@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/minipro_list_collect@3x.png b/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/minipro_list_collect@3x.png new file mode 100644 index 0000000..cf4dfb1 Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/minipro_list_collect.imageset/minipro_list_collect@3x.png differ diff --git a/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/Contents.json b/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/Contents.json new file mode 100644 index 0000000..4a2d688 --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "minipro_list_service@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "minipro_list_service@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/minipro_list_service@2x.png b/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/minipro_list_service@2x.png new file mode 100644 index 0000000..5b5e785 Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/minipro_list_service@2x.png differ diff --git a/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/minipro_list_service@3x.png b/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/minipro_list_service@3x.png new file mode 100644 index 0000000..bc2db40 Binary files /dev/null and b/example/ios/Runner/Assets.xcassets/minipro_list_service.imageset/minipro_list_service@3x.png differ diff --git a/example/lib/main.dart b/example/lib/main.dart index 30a305c..a2ab05c 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -45,6 +45,7 @@ class _MyAppState extends State { Config config = Config(storeConfigs); config.language = LanguageType.English; config.baseLoadingViewClass = "LoadingView"; + config.appletDebugMode = BOOLState.BOOLStateTrue; UIConfig uiconfig = UIConfig(); uiconfig.isAlwaysShowBackInDefaultNavigationBar = false; @@ -59,6 +60,7 @@ class _MyAppState extends State { uiconfig.capsuleConfig = capsuleConfig; uiconfig.appletText = "applet"; uiconfig.loadingLayoutCls = "com.finogeeks.mop_example.CustomLoadingPage"; + uiconfig.autoAdaptDarkMode = true; // if (Platform.isIOS) { // final res = await Mop.instance.initialize( @@ -129,16 +131,14 @@ class _MyAppState extends State { // physics: NeverScrollableScrollPhysics(), children: [ _buildAppletItem(appletId, "打开小程序", () { - // Mop.instance.openApplet(appletId, - // path: 'pages/index/index', query: ''); - // TranstionStyle style = TranstionStyle.TranstionStyleUp; - // if (appletId == "5f72e3559a6a7900019b5baa") { - // style = TranstionStyle.TranstionStylePush; - // } - // RemoteAppletRequest request = RemoteAppletRequest(apiServer: 'https://api.finclip.com', appletId: appletId, transitionStyle: style); - // Mop.instance.startApplet(request); + TranstionStyle style = TranstionStyle.TranstionStyleUp; + if (appletId == "5f72e3559a6a7900019b5baa") { + style = TranstionStyle.TranstionStylePush; + } + RemoteAppletRequest request = RemoteAppletRequest(apiServer: 'https://api.finclip.com', appletId: appletId, transitionStyle: style); + Mop.instance.startApplet(request); - Mop.instance.qrcodeOpenApplet('https://api.finclip.com/api/v1/mop/runtime/applet/-f-MGYzN2Q1YTYzMmI2MWIyZg--'); + // Mop.instance.qrcodeOpenApplet('https://api.finclip.com/api/v1/mop/runtime/applet/-f-MGYzN2Q1YTYzMmI2MWIyZg--'); }), _buildAppletItem(appletId, "finishRunningApplet", () { @@ -170,7 +170,7 @@ class _MyAppState extends State { children: [ _buildAppletWidget("5facb3a52dcbff00017469bd", "画图小程序"), _buildAppletWidget("5f72e3559a6a7900019b5baa", "官方小程序"), - _buildAppletWidget("5fa215459a6a7900019b5cc3", "我的对账单"), + _buildAppletWidget("5f17f457297b540001e06ebb", "测试小程序"), ], ), ), @@ -198,9 +198,18 @@ class MyAppletHandler extends AppletHandler { @override Future> getCustomMenus(String appId) { + CustomMenu menu1 = CustomMenu('WXTest', 'https://img1.baidu.com/it/u=2878938773,1765835171&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500', '百度图标', 'common'); + menu1.darkImage = 'https://img95.699pic.com/xsj/14/46/mh.jpg%21/fw/700/watermark/url/L3hzai93YXRlcl9kZXRhaWwyLnBuZw/align/southeast'; + + CustomMenu menu2 = CustomMenu('CustomMenu2', 'minipro_list_collect', '工程图标', 'common'); + menu2.darkImage = 'minipro_list_service'; + List customMenus = [ - CustomMenu('WXShareAPPFriends', 'https://img1.baidu.com/it/u=2878938773,1765835171&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500', '微信好朋友', 'common'), - CustomMenu('WXShareAPPMoments', 'https://img2.baidu.com/it/u=3113705544,436318069&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500', '微信朋友圈', 'common'), + menu1, + menu2, + CustomMenu('MyFriends', 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpvugSNLs9R7iopz_noeotAelvgzYj-74iCg&usqp=CAU', '谷歌图标', 'common'), + // CustomMenu('WXShareAPPFriends', 'https://img1.baidu.com/it/u=2878938773,1765835171&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500', '微信好朋友', 'common'), + // CustomMenu('WXShareAPPMoments', 'https://img2.baidu.com/it/u=3113705544,436318069&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500', '微信朋友圈', 'common'), // CustomMenu('WXShareAPPFriends', 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpvugSNLs9R7iopz_noeotAelvgzYj-74iCg&usqp=CAU', '微信好朋友', 'common'), // CustomMenu('WXShareAPPMoments', 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR7cO4KB4e5-Ugdcq4pIyWunliH7LZRZzguKQ&usqp=CAU', '微信朋友圈', 'common'), diff --git a/ios/Classes/Api/MOPAppletDelegate.m b/ios/Classes/Api/MOPAppletDelegate.m index 43a8c13..cdb730b 100644 --- a/ios/Classes/Api/MOPAppletDelegate.m +++ b/ios/Classes/Api/MOPAppletDelegate.m @@ -91,10 +91,16 @@ NSString *imageUrl = data[@"image"]; if ([imageUrl hasPrefix:@"http"]) { // 需要异步加载,待优化! - model.menuIconImage = [UIImage fat_getImageWithUrl:imageUrl]; + model.menuIconUrl = imageUrl; } else { model.menuIconImage = [UIImage imageNamed:imageUrl]; } + NSString *darkImageUrl = data[@"darkImage"]; + if ([darkImageUrl hasPrefix:@"http"]) { + model.menuDarkIconUrl = darkImageUrl; + } else { + model.menuIconDarkImage = [UIImage imageNamed:darkImageUrl]; + } NSString *typeString = data[@"type"]; if (typeString) { FATAppletMenuStyle style = [typeString isEqualToString:@"onMiniProgram"] ? FATAppletMenuStyleOnMiniProgram : FATAppletMenuStyleCommon; diff --git a/ios/Classes/Model/MopCustomMenuModel.h b/ios/Classes/Model/MopCustomMenuModel.h index 416aea9..1a0d008 100644 --- a/ios/Classes/Model/MopCustomMenuModel.h +++ b/ios/Classes/Model/MopCustomMenuModel.h @@ -12,6 +12,56 @@ NS_ASSUME_NONNULL_BEGIN @interface MopCustomMenuModel : NSObject +/** + 菜单id + */ +@property (nonatomic, copy) NSString *menuId; + +/** + 菜单的icon图标 + 我们固定菜单的大小:3倍图:90*90 + 图标中间小logo与图标宽度比是 5:8。 + 注意:菜单图标显示优先级:后台配置icon > APP注入icon + */ +@property (nonatomic, strong) UIImage *menuIconImage; + +/** + 菜单的icon图标网络链接地址 + 我们固定菜单的大小:3倍图:90*90 + 图标中间小logo与图标宽度比是 5:8,供参考 + 注意:菜单图标显示优先级:后台配置的icon path > App注入的icon + */ +@property (nonatomic, copy) NSString *menuIconUrl; + +/** + 菜单在黑暗模式下的icon图标 + 我们固定菜单的大小:3倍图:90*90 + 图标中间小logo与图标宽度比是 5:8。 + 注意:菜单图标显示优先级:后台配置icon > APP注入icon + */ +@property (nonatomic, strong) UIImage *menuIconDarkImage; + +/** + 菜单的暗黑模式icon图标网络链接地址 + 我们固定菜单的大小:3倍图:90*90 + 图标中间小logo与图标宽度比是 5:8,供参考 + 注意:菜单图标显示优先级:后台配置的darkIcon path > App注入的icon + */ +@property (nonatomic, copy) NSString *menuDarkIconUrl; + +/** + 菜单的标题 + 注意:菜单标题显示优先级:后台配置标题 > APP注入标题 + */ +@property (nonatomic, copy) NSString *menuTitle; + +/** + 菜单的类型 + FATAppletMenuStyleCommon:通用的按钮,不需要小程序提供额外信息就可以调用的,比如收藏; + FATAppletMenuStyleOnMiniProgram:需要小程序配合实现的按钮,也就是说需要小程序提供额外调用参数的按钮,比如分享到微信 + */ +@property (nonatomic, assign) FATAppletMenuStyle menuType; + @end NS_ASSUME_NONNULL_END diff --git a/ios/Classes/Model/MopCustomMenuModel.m b/ios/Classes/Model/MopCustomMenuModel.m index bfea6fc..a937019 100644 --- a/ios/Classes/Model/MopCustomMenuModel.m +++ b/ios/Classes/Model/MopCustomMenuModel.m @@ -9,15 +9,16 @@ @implementation MopCustomMenuModel -@synthesize menuId, menuIconImage, menuTitle, menuType; - - (id)copyWithZone:(NSZone *)zone { MopCustomMenuModel *model = [[MopCustomMenuModel allocWithZone:zone] init]; model.menuId = self.menuId; model.menuIconImage = self.menuIconImage; + model.menuIconDarkImage = self.menuIconDarkImage; model.menuTitle = self.menuTitle; model.menuType = self.menuType; + model.menuIconUrl = self.menuIconUrl; + model.menuDarkIconUrl = self.menuDarkIconUrl; return model; } diff --git a/ios/mop.podspec b/ios/mop.podspec index b1a0d35..8077459 100644 --- a/ios/mop.podspec +++ b/ios/mop.podspec @@ -17,7 +17,7 @@ A finclip miniprogram flutter sdk. s.dependency 'Flutter' s.ios.deployment_target = '9.0' - s.dependency 'FinApplet' , '2.41.0-alpha20230602v12' - s.dependency 'FinAppletExt' , '2.41.0-alpha20230602v12' + s.dependency 'FinApplet' , '2.40.12-dev20230614v02' + s.dependency 'FinAppletExt' , '2.40.12-dev20230614v02' end diff --git a/lib/api.dart b/lib/api.dart index f4c554b..5dd445d 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -1,13 +1,14 @@ class CustomMenu { String menuId; String image; + String? darkImage; String title; String type; CustomMenu(this.menuId, this.image, this.title, this.type); Map toJson() => - {'menuId': menuId, 'image': image, 'title': title, 'type': type}; + {'menuId': menuId, 'image': image, 'darkImage': darkImage, 'title': title, 'type': type}; } abstract class AppletHandler { diff --git a/lib/mop.dart b/lib/mop.dart index bdd933f..45df93e 100644 --- a/lib/mop.dart +++ b/lib/mop.dart @@ -1159,6 +1159,9 @@ class Mop { map["image"] = element.image; map["title"] = element.title; map["type"] = element.type; + if (element.darkImage != null) { + map["darkImage"] = element.darkImage; + } list.add(map); }); debugPrint("registerAppletHandler getCustomMenus list $list");