mop-flutter-sdk/README.md

521 lines
23 KiB
Dart
Raw Permalink Normal View History

2021-10-29 15:27:49 +08:00
<p align="center">
<a href="https://www.finclip.com?from=github">
<img width="auto" src="https://www.finclip.com/mop/document/images/logo.png">
</a>
</p>
2020-02-27 17:21:45 +08:00
<p align="center">
2021-10-29 15:27:49 +08:00
<strong>FinClip Flutter SDK</strong></br>
<p>
<p align="center">
2021-10-29 15:27:49 +08:00
Flutter
<p>
2020-04-29 17:00:33 +08:00
<p align="center">
2021-10-29 15:27:49 +08:00
👉 <a href="https://www.finclip.com?from=github">https://www.finclip.com/</a> 👈
</p>
2020-04-29 17:00:33 +08:00
2021-11-14 23:12:48 +08:00
<div align="center">
<a href="#"><img src="https://img.shields.io/badge/%E4%B8%93%E5%B1%9E%E5%BC%80%E5%8F%91%E8%80%85-20000%2B-brightgreen"></a>
<a href="#"><img src="https://img.shields.io/badge/%E5%B7%B2%E4%B8%8A%E6%9E%B6%E5%B0%8F%E7%A8%8B%E5%BA%8F-6000%2B-blue"></a>
<a href="#"><img src="https://img.shields.io/badge/%E5%B7%B2%E9%9B%86%E6%88%90%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%BA%94%E7%94%A8-75%2B-yellow"></a>
<a href="#"><img src="https://img.shields.io/badge/%E5%AE%9E%E9%99%85%E8%A6%86%E7%9B%96%E7%94%A8%E6%88%B7-2500%20%E4%B8%87%2B-orange"></a>
<a href="https://www.zhihu.com/org/finchat"><img src="https://img.shields.io/badge/FinClip--lightgrey?logo=zhihu&style=social"></a>
<a href="https://www.finclip.com/blog/"><img src="https://img.shields.io/badge/FinClip%20Blog--lightgrey?logo=ghost&style=social"></a>
2021-11-14 23:16:34 +08:00
</div>
<p align="center">
<div align="center">
[](https://www.finclip.com/) | [示例小程序](https://www.finclip.com/#/market) | [开发文档](https://www.finclip.com/mop/document/) | [部署指南](https://www.finclip.com/mop/document/introduce/quickStart/cloud-server-deployment-guide.html) | [SDK 集成指南](https://www.finclip.com/mop/document/introduce/quickStart/intergration-guide.html) | [API 列表](https://www.finclip.com/mop/document/develop/api/overview.html) | [组件列表](https://www.finclip.com/mop/document/develop/component/overview.html) | [隐私承诺](https://www.finclip.com/mop/document/operate/safety.html)
2021-11-14 23:12:48 +08:00
</div>
2021-10-29 15:27:49 +08:00
-----
## 🤔 FinClip ?
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
**** APP
**** APP SDK
FinClip
2021-11-08 14:44:15 +08:00
## Flutter 使
2021-11-08 14:44:01 +08:00
2021-11-08 14:45:14 +08:00
FinClip SDK APP Flutter SDK 使
2021-11-08 14:44:01 +08:00
2021-10-29 15:27:49 +08:00
## Flutter
`pubspec.yaml`
```yaml
2020-04-29 17:00:33 +08:00
mop: latest.version
```
2021-10-29 15:27:49 +08:00
## 🖥
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
```flutter
2020-04-29 17:00:33 +08:00
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:io';
import 'package:mop/mop.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
init();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> init() async {
2024-08-21 09:26:56 +08:00
//多服务器配置
FinStoreConfig storeConfigA = FinStoreConfig(
"22LyZEib0gLTQdU3MUauAfJ/xujwNfM6OvvEqQyH4igA",
"703b9026be3d6bc5",
"https://api.finclip.com",
cryptType: "SM",
);
List<FinStoreConfig> storeConfigs = [storeConfigA];
Config config = Config(storeConfigs);
config.language = LanguageType.English;
config.userId = "abc12345";
config.channel = "finclip";
config.phone = "12345678901";
config.appletDebugMode = BOOLState.BOOLStateTrue;
UIConfig uiconfig = UIConfig();
uiconfig.isHideBackHome = true;
final res = await Mop.instance.initSDK(config, uiConfig: uiconfig);
2020-04-29 17:00:33 +08:00
if (!mounted) return;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('凡泰极客小程序 Flutter 插件'),
),
body: Center(
child: Container(
padding: EdgeInsets.only(
top: 20,
),
child: Column(
children: <Widget>[
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(5)),
gradient: LinearGradient(
colors: const [Color(0xFF12767e), Color(0xFF0dabb8)],
stops: const [0.0, 1.0],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: FlatButton(
onPressed: () {
Mop.instance.openApplet('5e3c147a188211000141e9b1');
},
child: Text(
'打开示例小程序',
style: TextStyle(color: Colors.white),
),
),
),
SizedBox(height: 30),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(5)),
gradient: LinearGradient(
colors: const [Color(0xFF12767e), Color(0xFF0dabb8)],
stops: const [0.0, 1.0],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: FlatButton(
onPressed: () {
Mop.instance.openApplet('5e4d123647edd60001055df1',sequence: 1);
},
child: Text(
'打开官方小程序',
style: TextStyle(color: Colors.white),
),
),
),
],
),
),
),
),
);
}
}
```
2021-10-29 15:27:49 +08:00
## 📋
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
### 1.
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
使 SDK API SDK SDK
2020-04-29 17:00:33 +08:00
```
2024-08-21 09:26:56 +08:00
///
/// initialize FinClip SDK.
/// 初始化SDK(推荐使用)
/// [config] is required. sdk配置
/// [uiConfig] is optional. UI配置
Future<Map> initSDK(Config config, {UIConfig? uiConfig})
2020-04-29 17:00:33 +08:00
```
2021-10-29 15:27:49 +08:00
使
2020-04-29 17:00:33 +08:00
```
2024-08-21 09:26:56 +08:00
// 1.创建Config
// 1.1 配置服务器1的参数
FinStoreConfig finclip_store = FinStoreConfig('22LyZEib0gLTQdU3MUauATBwgfnTCJjdr7FCnywmAEM=', 'bdfd76cae24d4313', 'https://api.finclip.com');
// 1.2 配置服务器2的参数
FinStoreConfig test_store = FinStoreConfig('sdkKey2', 'sdkSecret2', '测试服务器');
Config config = Config([finclip_store, test_store]);
config.userId = '您app的用户唯一标识';
// 2.创建UIConfig
UIConfig uiConfig = UIConfig();
uiConfig.isHideAddToDesktopMenu = true;
uiConfig.isHideFeedbackAndComplaints = true;
final res = await Mop.instance.initSDK(config, uiConfig: uiConfig);
2020-04-29 17:00:33 +08:00
```
2021-10-29 15:27:49 +08:00
### 2.
2020-04-29 17:00:33 +08:00
```
///
/// open the miniprogram [appId] from the mop server.
/// 打开小程序
/// [appId] is required.
/// [path] is miniprogram open path. example /pages/index/index
/// [query] is miniprogram query parameters. example key1=value1&key2=value2
///
///
Future<Map> openApplet(final String appId,
{final String path, final String query, final int sequence})
```
2021-10-29 15:27:49 +08:00
### 3. 使
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
`appId`, `name`, `icon`, `description`, `version`, `thumbnail`
2020-04-29 17:00:33 +08:00
```
///
/// get current using applet
/// 获取当前正在使用的小程序信息
/// {appId,name,icon,description,version,thumbnail}
///
///
Future<Map<String, dynamic>> currentApplet()
```
2021-10-29 15:27:49 +08:00
### 4.
2020-04-29 17:00:33 +08:00
```
///
/// close all running applets
/// 关闭当前打开的所有小程序
///
Future closeAllApplets()
```
2021-10-29 15:27:49 +08:00
### 5.
2020-04-29 17:00:33 +08:00
```
///
/// clear applets cache
/// 清除缓存的小程序
///
Future clearApplets()
```
2021-10-29 15:27:49 +08:00
### 6.
2020-04-29 17:00:33 +08:00
使
```
///
/// register handler to provide custom info or behaviour
/// 注册小程序事件处理
///
void registerAppletHandler(AppletHandler handler)
```
2023-06-27 14:58:52 +08:00
2020-04-29 17:00:33 +08:00
```
abstract class AppletHandler {
///
/// 转发小程序
///
///
///
void forwardApplet(Map<String, dynamic> appletInfo);
///
///获取用户信息
/// "userId"
/// "nickName"
/// "avatarUrl"
/// "jwt"
/// "accessToken"
///
Future<Map<String, dynamic>> getUserInfo();
/// 获取自定义菜单
Future<List<CustomMenu>> getCustomMenus(String appId);
///自定义菜单点击处理
Future onCustomMenuClick(String appId, int menuId);
}
```
2021-10-29 15:27:49 +08:00
### 7. API
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
SDK API API API
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
```
2020-04-29 17:00:33 +08:00
///
/// register extension api
/// 注册拓展api
///
void registerExtensionApi(String name, ExtensionApiHandler handler)
2021-10-29 15:27:49 +08:00
```
2020-04-29 17:00:33 +08:00
2021-10-29 15:27:49 +08:00
iOS `FinChatConf.js`
2020-04-29 17:00:33 +08:00
```
module.exports = {
extApi:[
{ //普通交互API
name: 'onCustomEvent', //扩展api名 该api必须Native方实现了
params: { //扩展api 的参数格式,可以只列必须的属性
url: ''
}
}
]
}
2021-10-29 15:27:49 +08:00
```
2023-06-27 14:58:52 +08:00
## Flutter-SDK
2023-06-26 17:48:57 +08:00
```
2023-06-26 14:54:18 +08:00
.
CHANGELOG.md
LICENSE
README.md
android
   build.gradle
   build.gradle.tpl
   gradle
      wrapper
      gradle-wrapper.properties
   gradle.properties
   proguard-android.txt
   proguard-rules.pro
   settings.gradle
2023-06-27 14:58:52 +08:00
   src // Flutter-SDK Android源文件目录
2023-06-26 14:54:18 +08:00
   main
   AndroidManifest.xml
   java
   com
   finogeeks
   mop
2023-06-27 14:58:52 +08:00
   MopEventStream.java //
   MopPlugin.java // flutter 消息的处理类
   MopPluginDelegate.java //
2023-06-26 14:54:18 +08:00
   api
2023-06-27 14:58:52 +08:00
      AbsApi.java // flutter-API的抽象类
      ApisManager.java // flutter-API的管理类
      BaseApi.java // flutter-API的基类
      EmptyApi.java // flutter-API的空实现
2023-06-26 14:54:18 +08:00
      mop
2023-06-27 14:58:52 +08:00
      AppletHandlerModule.java // 安卓代理的处理类会转发消息至AppletHandler
      AppletManageModule.java // 小程序相关API的实现Module(包含获取小程序信息、关闭小程序、删除小程序等)
      AppletModule.java // 打开小程序的API实现Module包含打开小程序的几种api
      BaseModule.java // 旧版本初始化SDK的API实现Module
      ExtensionApiModule.java // 扩展API的实现Module注册小程序自定义API、H5自定义API
      InitSDKModule.java // 新版初始化SDK的Module
      SmSignModule.java // (废弃)
      VersionModule.java // 获取SDK版本信息的Module
      WXQrCodeModule.java //通过微信小程序二维码获取关联的FinClip 小程序信息的Module
      util // 工具类
      InitUtils.java //初始化参数处理工具类
2023-06-26 14:54:18 +08:00
   constants
2023-06-27 14:58:52 +08:00
      Constants.java // 常量
   interfaces // 一些接口类
2023-06-26 14:54:18 +08:00
      Event.java
      FlutterInterface.java
      IApi.java
      ICallback.java
      ILifecycle.java
   service
2023-06-27 14:58:52 +08:00
      MopPluginService.java // Flutter 插件服务
2023-06-26 14:54:18 +08:00
   utils
2023-06-27 14:58:52 +08:00
   AppletUtils.java // 小程序操作工具类
   GsonUtil.java //json 处理工具类
2023-06-26 14:54:18 +08:00
example // 示例工程目录
   README.md
   analysis_options.yaml
2023-06-27 14:58:52 +08:00
   android // 示例工程--安卓工程
2023-06-26 14:54:18 +08:00
      app
         build.gradle
         src
         debug
            AndroidManifest.xml
         main
            AndroidManifest.xml
            java
               com
               finogeeks
               mop_example
2023-06-27 14:58:52 +08:00
               CustomLoadingPage.java //安卓自定义loading实现类
               MainActivity.java //安卓主页
               MainApplication.java
            res
2023-06-26 14:54:18 +08:00
         profile
         AndroidManifest.xml
      build.gradle
      gradle
         wrapper
         gradle-wrapper.properties
      gradle.properties
      settings.gradle
2023-06-27 14:58:52 +08:00
   ios // 示例工程--iOS工程
2023-06-26 14:54:18 +08:00
      Podfile
      Runner
         AppDelegate.swift // 示例工程原生端初始化,以及插件注册
         Assets.xcassets
         FlutterMethodChannelHandler.h // Flutter调用原生channel
         FlutterMethodChannelHandler.m
         LoadingView.h // 小程序启动页自定义UI
         LoadingView.m
         Runner-Bridging-Header.h
      Runner.xcodeproj
   lib
      main.dart // 示例工程入口
   pubspec.yaml
2023-06-27 14:58:52 +08:00
ios // iOS源文件目录
2023-06-26 14:54:18 +08:00
   Assets
   Classes
2023-06-27 14:58:52 +08:00
      Api // flutter-sdk API的iOS实现类
         MOPAppletDelegate.h // iOS SDK代理的实现类会转发消息至AppletHandler
         MOPAppletDelegate.m // iOS SDK代理的实现类会转发消息至AppletHandler
         MOP_addWebExtentionApi.h // 注册小程序H5 自定义api的实现类
         MOP_addWebExtentionApi.m
         MOP_callJS.h // 原生给小程序组件发消息的实现类
2023-06-26 14:54:18 +08:00
         MOP_callJS.m
2023-06-27 14:58:52 +08:00
         MOP_changeUserId.h // 修复userId的实现类
2023-06-26 14:54:18 +08:00
         MOP_changeUserId.m
2023-06-27 14:58:52 +08:00
         MOP_clearApplets.h // 清除本地所有小程序的实现类
2023-06-26 14:54:18 +08:00
         MOP_clearApplets.m
2023-06-27 14:58:52 +08:00
         MOP_closeAllApplets.h // 关闭所有小程序的实现类
2023-06-26 14:54:18 +08:00
         MOP_closeAllApplets.m
2023-06-27 14:58:52 +08:00
         MOP_closeApplet.h // 关闭指定小程序的实现类
2023-06-26 14:54:18 +08:00
         MOP_closeApplet.m
2023-06-27 14:58:52 +08:00
         MOP_currentApplet.h // 获取当前小程序的信息的实现类
2023-06-26 14:54:18 +08:00
         MOP_currentApplet.m
2023-06-27 14:58:52 +08:00
         MOP_finishRunningApplet.h // 彻底关闭小程序的实现类
2023-06-26 14:54:18 +08:00
         MOP_finishRunningApplet.m
2023-06-27 14:58:52 +08:00
         MOP_initSDK.h // 新的初始化SDK实现类(推荐)
2023-06-26 14:54:18 +08:00
         MOP_initSDK.m
2023-06-27 14:58:52 +08:00
         MOP_initialize.h // 旧的初始化SDK实现类(不推荐)
2023-06-26 14:54:18 +08:00
         MOP_initialize.m
2023-06-27 14:58:52 +08:00
         MOP_openApplet.h // 旧的打开小程序实现类(不推荐)
2023-06-26 14:54:18 +08:00
         MOP_openApplet.m
         MOP_parseAppletInfoFromWXQrCode.h // 解析微信小程序二维码,得到凡泰小程序信息
         MOP_parseAppletInfoFromWXQrCode.m
2023-06-27 14:58:52 +08:00
         MOP_qrcodeOpenApplet.h // 通过二维码链接打开小程序实现类
2023-06-26 14:54:18 +08:00
         MOP_qrcodeOpenApplet.m
2023-06-27 14:58:52 +08:00
         MOP_registerAppletHandler.h // 注册代理实现类
2023-06-26 14:54:18 +08:00
         MOP_registerAppletHandler.m
2023-06-27 14:58:52 +08:00
         MOP_registerExtensionApi.h // 注册小程序自定义api的实现类
2023-06-26 14:54:18 +08:00
         MOP_registerExtensionApi.m
2023-06-27 14:58:52 +08:00
         MOP_removeAllUsedApplets.h // 删除本地所有小程序的实现类(小程序包、运行过程中的数据等)
2023-06-26 14:54:18 +08:00
         MOP_removeAllUsedApplets.m
2023-06-27 14:58:52 +08:00
         MOP_removeApplet.h // 删除指定小程序(小程序包、运行过程中的数据等)
2023-06-26 14:54:18 +08:00
         MOP_removeApplet.m
2023-06-27 14:58:52 +08:00
         MOP_removeUsedApplet.h // 删除指定小程序(小程序包、运行过程中的数据等)
2023-06-26 14:54:18 +08:00
         MOP_removeUsedApplet.m
2023-06-27 14:58:52 +08:00
         MOP_scanOpenApplet.h // 旧版二维码打开小程序。(需要解密二维码内容,废弃)
2023-06-26 14:54:18 +08:00
         MOP_scanOpenApplet.m
2023-06-27 14:58:52 +08:00
         MOP_sdkVersion.h // 获取SDK版本信息
2023-06-26 14:54:18 +08:00
         MOP_sdkVersion.m
2023-06-27 14:58:52 +08:00
         MOP_sendCustomEvent.h // 给SDK发动全局自定义事件
2023-06-26 14:54:18 +08:00
         MOP_sendCustomEvent.m
         MOP_showBotomSheetModel.h // 显示底部分享View
         MOP_showBotomSheetModel.m
2023-06-27 14:58:52 +08:00
         MOP_smsign.h // (废弃)
2023-06-26 14:54:18 +08:00
         MOP_smsign.m
2023-06-27 14:58:52 +08:00
         MOP_startApplet.h // 新的启动小程序实现类(推荐)
2023-06-26 14:54:18 +08:00
         MOP_startApplet.m
2023-06-27 14:58:52 +08:00
         MOP_webViewBounces.h // 设置顶层 webView的弹性效果
2023-06-26 14:54:18 +08:00
         MOP_webViewBounces.m
      Model
2023-06-27 14:58:52 +08:00
         MopCustomMenuModel.h // 自定义菜单Model
2023-06-26 14:54:18 +08:00
         MopCustomMenuModel.m
2023-06-27 14:58:52 +08:00
      MopPlugin.h // flutter 与 iOS原生通信桥接类
2023-06-26 14:54:18 +08:00
      MopPlugin.m
2023-06-27 14:58:52 +08:00
      Utils // 存放一些工具类
      MOPApiConverter.h // Api动态转换类使用runtime将request动态转换为api实现类
2023-06-26 14:54:18 +08:00
      MOPApiConverter.m
2023-06-27 14:58:52 +08:00
      MOPApiRequest.h // flutter-sdk传递给原生的事件和参数会封装成一个Request
2023-06-26 14:54:18 +08:00
      MOPApiRequest.m
2023-06-27 14:58:52 +08:00
      MOPBaseApi.h // flutter API实现类的基类
2023-06-26 14:54:18 +08:00
      MOPBaseApi.m
2023-06-27 14:58:52 +08:00
      MOPTools.h // 工具类(包含颜色、截图、获取顶层控制器等)
2023-06-26 14:54:18 +08:00
      MOPTools.m
      MopShareView.h // 分享界面UI
      MopShareView.m
      UIView+MOPFATToast.h // Toast提示分类
      UIView+MOPFATToast.m
   mop.podspec
   mop.podspec.tpl //mop.podspec 模板文件
lib
2023-06-27 14:58:52 +08:00
   api.dart // flutter-sdk代理的抽象类
   mop.dart // mop 核心类包含初始化配置型、flutter-sdk的所有api
publish.sh // 发布脚本
pubspec.tpl.yaml // pubspec.yaml模板文件
pubspec.yaml // 配置文件
tag.sh // 打tag的脚本
trigger.sh // 脚本
2023-06-26 17:48:57 +08:00
```
2023-06-26 14:54:18 +08:00
2021-10-29 15:27:49 +08:00
## 🔗
FinClip
- [FinClip ](https://www.finclip.com/#/home)
- [](https://www.finclip.com/#/market)
- [](https://www.finclip.com/mop/document/)
- [SDK ](https://www.finclip.com/mop/document/introduce/quickStart/intergration-guide.html)
- [](https://www.finclip.com/mop/document/develop/guide/structure.html)
- [iOS ](https://www.finclip.com/mop/document/runtime-sdk/ios/ios-integrate.html)
- [Android ](https://www.finclip.com/mop/document/runtime-sdk/android/android-integrate.html)
- [Flutter ](https://www.finclip.com/mop/document/runtime-sdk/flutter/flutter-integrate.html)
##
****<br>
<img width="150px" src="https://www.finclip.com/mop/document/images/ic_qr.svg">
2022-06-09 22:24:09 +08:00
<br>
<img width="150px" src="https://www-cdn.finclip.com/images/qrcode/qrcode_shequn_text.png">