gt_onelogin_flutter_plugin

The official flutter plugin project for geetest OneLoginSDK. Support Flutter 2.0. 极验 OneLoginSDK Flutter 官方插件。支持 Flutter 2.0。

官网/Official

开始 / Get started

安装 / Install

在工程 pubspec.yamldependencies 块中添加下列配置

Github 集成

dependencies:
  gt_onelogin_flutter_plugin:
    git:
      url: https://github.com/GeeTeam/gt_onelogin_flutter_plugin.git
      ref: master

pub 集成

dependencies:
  gt_onelogin_flutter_plugin: 0.0.1

配置 / Configuration

请在 官网/Official 申请 APPID 和 Key,并部署配套的后端接口。详细介绍请查阅:

部署说明

示例 / Example

创建 GtOneloginFlutterPlugin 实例

参数说明

参数必须类型说明
appIdString极验后台配置唯一产品APPID,请在官网申请
timeoutint超时时间,单位:ms,取值范围:1000~15000,默认8000

代码示例

GtOneloginFlutterPlugin oneLoginPlugin = GtOneloginFlutterPlugin("b41a959b5cac4dd1277183e074630945");

requestToken

方法描述

拉起授权页

参数说明

参数必须类型说明
configurationOLUIConfiguration用来配置授权页面 UI 样式,详细含义见UI配置项章节

返回值说明

更多返回值请参考官网集成文档

类型说明默认值
Map<String, dynamic>取号结果-

Map 集合的字段说明

  • 取号成功
参数名必须类型说明
msgString运营商返回的状态信息
process_idString流水号(有效期10分钟)
app_idString极验后台配置唯一 id
statusint状态码,状态码为 200
tokenString运营商返回的accessToken
authcodeString电信运营商返回的authcode
  • 取号失败
参数名必须类型说明
errorCodeString错误码
msgString运营商返回的状态信息
statusint状态码,状态码为 500

代码示例

var configure = OLUIConfiguration();
//参照`UI配置项`章节和demo示例代码在这里设置授权页的UI配置项
oneLoginPlugin.requestToken(configure).then((result) async {
      int status = result["status"];
      if (status == 200) {
        Map<String, dynamic> params = {};
        params["process_id"] = result["process_id"];
        params["token"] = result["token"];
        params["id_2_sign"] = result["app_id"];
        if (result["authcode"] != null) {
          params["authcode"] = result["authcode"];
        }
        await verifyToken(params);
      } else {
        var errCode = result["errorCode"];
        // 获取网关token失败
        if (Platform.isIOS) { //iOS错误码
          if ("-20103" == errCode) {
            // TO-DO
            // 重复调用 requestTokenWithViewController:viewModel:completion:
          }
          else if ("-20202" == errCode) {
            // TO-DO
            // 检测到未开启蜂窝网络
          }
          else if ("-20203" == errCode) {
            // TO-DO
            // 不支持的运营商类型
          }
          else if ("-20204" == errCode) {
            // TO-DO
            // 未获取有效的 `accessCode` 或已经失效, 请重新初始化,init(appId):
          }
          else {
            // TO-DO
            // 其他错误类型
          }
        } else { //Android错误码
          if ("-20200" == errCode) {
            // TO-DO
            // 网络不可用
          } else if ("-20202" == errCode) {
            // TO-DO
            // 检测到未开启蜂窝网络
          }
          else if ("-20203" == errCode) {
            // TO-DO
            // 不支持的运营商类型
          }
          else if ("-20105" == errCode) {
            // TO-DO
            // 超时。网络信号较差或者配置的超时时间较短,导致预取号或者取号超时
          } else {
            // TO-DO
            // 其他错误类型
          }
        }
        oneLoginPlugin.dismissAuthView();
      }
    });
    
//一键登录校验token
Future<dynamic> verifyToken(Map<String, dynamic> params) async {
  var options = BaseOptions(
    baseUrl: 'http://onepass.geetest.com',
    connectTimeout: 5000,
    receiveTimeout: 3000,
  );
  Dio dio = Dio(options);
  final response =
  await dio.post<Map<String, dynamic>>("/onelogin/result", data: params);
  String toast = "登录失败";
  if (response.statusCode == 200) {
    var result = response.data;
    debugPrint(response.data.toString());
    if (result != null && result["status"] == 200) {
      toast = "登录成功,手机号为:${result["result"]}";
    }
  }
  oneLoginPlugin.dismissAuthView();
  Fluttertoast.showToast(
      msg: toast,
      toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.CENTER,
      timeInSecForIosWeb: 1,
      backgroundColor: Colors.white10,
      textColor: Colors.black87,
      fontSize: 16.0);
}

UI配置项

说明

UI配置项属于可选参数,当拉起授权页不传递该参数时,插件将按照默认效果展示授权页。其内部属性也是可选配置。

var configure = OLUIConfiguration();

1、设置弹窗模式

参数说明

参数参数类型说明默认值
isDialogStylebool是否使用弹窗模式,true 为使用,false 为不使用false
dialogRectOLRect描述弹窗的宽高和位置坐标dp以下单位与之保持一致宽300,高340,居中
isWebDialogStylebool服务条款页面是否使用弹窗模式(仅Android有效)false
dialogCornersRadiusdouble弹窗圆角(仅iOS有效)6

OLRect属性说明

宽高不设置将按照默认值设置,x坐标不设置默认为水平居中,设置后表示控件左边缘距离父布局左上角原点的水平偏移量。y坐标不设置默认为竖直居中,设置后表示控件上边缘距离父布局左上角原点的垂直偏移量。 对话框的父布局左上角位于屏幕左上角,类似授权按钮的控件父布局左上角位于顶部标题栏的左下角。本说明试用于所有OLRect属性。

2、设置背景

参数说明

参数参数类型说明默认值
authViewBackgroundImageString设置背景图片。Android放在 drawable 文件下,iOS放在 asserts 文件下以下图片路径与之保持一致-
backgroundColorColor设置背景颜色(仅iOS有效)-

3、状态栏与系统虚拟按键

参数说明

参数参数类型说明默认值
statusBarBgColorColor自定义状态栏背景颜色(仅Android有效)0
statusBarStyleOLStatusBarStyle设置状态栏内容的样式内容为白色
systemNavBarBgColorColor自定义系统导航栏背景颜色(即虚拟按键,仅Android有效)0

4、标题栏

参数说明

参数参数类型说明默认值
navigationBarColorColor自定义标题栏颜色Android 0xFF3973FF iOS0xFFFFFF
authNavHeightdouble标题栏高度(仅Android有效)Android49 iOS44
navHiddenbool标题栏是否隐藏false
navTextString标题栏文本Android一键登录 iOS空字符串
navTextColorColor字体颜色0xFF000000
navTextSizeint字体大小,单位为sp以下设置字体大小的单位与之保持一致Android:17 iOS:15
navBackImageString标题栏返回按钮图片-
navBackImageRectOLRect标题栏返回按钮的宽高和位置坐标宽高24,距离左侧12,垂直居中
navBackImageHiddenbool标题栏返回按钮是否隐藏false
navTextMargindouble导航栏标题距离屏幕左边的间距,隐私条款导航栏保持一致36

5、logo

参数说明

参数参数类型说明默认值
logoImageStringlogo 图片-
logoImageRectOLRectlogo的宽高和位置坐标Android:宽71,高71,水平居中,y轴偏移125 iOS:默认为图片大小
logoImageHiddenboollogo是否隐藏false
logoCornerRadiusdoublelogo圆角0

6、号码

参数说明

参数参数类型说明默认值
numberColorColor号码栏字体颜色Android:0xFF3D424C iOS:黑色
numberSizeint号码栏字体大小24
numberRectOLRect号码栏的宽高和位置坐标宽高包裹内容,水平居中,y轴偏移200

7、切换账号

参数说明

参数参数类型说明默认值
switchButtonTextString切换账号文本切换账号
switchButtonColorint切换账号字体颜色Android:0xFF3973FF iOS:蓝色
switchTextSizeint切换账号字体大小Android:14 iOS:15
switchButtonHiddenbool切换账号是否隐藏false
switchButtonBackgroundColorColor切换账号按钮背景颜色(仅iOS有效)-
switchButtonRectOLRect切换账号的宽高和位置坐标Android:宽80,高25,水平居中,y轴偏移249 iOS:按比例计算
switchButtonBgImageString切换账号背景图片默认无背景

8、登录按钮

参数说明

参数参数类型说明默认值
authButtonImagesList正常状态的背景图片, 不可用状态的背景图片, 高亮状态的背景图片,iOS数组最多为3,Android最多为2-
authButtonRectOLRectAndroid:登录按钮的宽高和位置坐标宽268,高36,水平居中,y轴偏移324 iOS;按比例计算
authButtonCornerRadiusint登录按钮圆角(仅iOS有效)0
authBtnTextString文字设置一键登录
authBtnColorColor文字颜色0xFFFFFFFF
authBtnTextSizeint文字大小15

9、Slogan

参数说明

参数参数类型说明默认值
sloganTextStringSlogan文本(仅iOS有效)-
sloganColorColor文字颜色Android:0xFFA8A8A8 iOS:灰色
sloganSizeint字体大小Android:10 iOS:12
sloganRectOLRectSlogan 的宽高和位置坐标Android:宽高包裹内容,水平居中,y轴偏移382 iOS:按比例计算

10、服务条款

参数说明

参数参数类型说明默认值
termsRectOLRect服务条款的宽高和位置坐标默认256,高度自适应,服务条款整体的高度取决于checkbox背景资源的高度以及文本的长度,水平居中,y轴偏移400
termTextColorColor服务条款基础文字颜色Android:0xFFA8A8A8 iOS:灰色
termsClauseColorColor服务条款协议文字颜色Android:0xFF3973FF iOS:蓝色
termsClauseTextSizeint服务条款字体大小Android:10 iOS:12
termsLineSpacingExtradouble服务条款文字行间距8.0
termsLineSpacingMultiplierdouble服务条款文字行间距的倍数1.0
termsBookTitleMarkHiddenbool条款名称是否隐藏书名号true
termsUncheckedToastTextString未同意服务条款时的提示文字请同意服务条款
termsList自定义服务条款对象数组。最多支持设置3个自定义服务条款,也可以不设置-
auxiliaryPrivacyWordsList除服务条款外的其他文案,包含服务条款之前和之间以及之后的文本,数组的第一个元素表示服务条款之前的文本,如”登录即同意“,最后一个元素表示末尾的文本,其他表示服务条款之间的连接文本,如”和“、顿号-
protocolShakeStyleProtocolShakeStyle未勾选授权页面隐私协议前勾选框时,点击授权页面登录按钮时勾选框与协议的抖动样式,默认不抖动none,默认不抖动

11、Checkbox

参数说明

参数参数类型说明默认值
uncheckedImageString未选中下按钮的图片地址-
checkedImageString选中下按钮的图片地址-
defaultCheckBoxStatebool选择框是否默认勾选false

12、多语言配置

参数说明

参数参数类型说明默认值
languageTypeOLLanguageType多语言配置,支持中文简体,中文繁体,英文simplifiedChinese,默认中文简体

13、其他

参数说明

参数参数类型说明默认值
supportedinterfaceOrientationsOLIOSInterfaceOrientation授权页面支持的横竖屏方向(仅iOS有效)-
userinterfaceStyleOLIOSUserInterfaceStyle授权页面界面样式(仅iOS有效)-
webNaviHiddenbool服务条款页面标题栏是否隐藏(仅iOS有效)false
webNaviBgColorColor服务条款页面标题栏的背景颜色(仅iOS有效)白色
navWebViewTextbool服务条款页面标题栏的文本不设置时自定义服务条款的标题与协议名称保持一致。运营商协议的标题固定为对应的协议名称
navWebViewTextColorbool服务条款页面标题栏的字体颜色0xFF000000
navWebViewTextSizebool服务条款页面标题栏的字体大小17

dismissAuthView

关闭授权页

oneLoginPlugin.dismissAuthView();

setLogEnable

设置是否开启日志

oneLoginPlugin.setLogEnable(true);

sdkVersion

获取SDK版本号

var sdkVersion = oneLoginPlugin.sdkVersion();

getCurrentCarrier

获取当前运营商

OLCarrierType currentCarrier = oneLoginPlugin.getCurrentCarrier();

isProtocolCheckboxChecked

隐私条款是否勾选

bool isProtocolCheckboxChecked = oneLoginPlugin.isProtocolCheckboxChecked();

isAvailable

预取号拿到的token是否还在有效期

bool isAvailable = oneLoginPlugin.isAvailable();

destroy

销毁对象(仅Android有效)。当不再需要使用 OneLogin 时,调用此接口销毁 OneLogin Android SDK,避免内存泄漏问题。若销毁后需要重新使用插件,再创建一个 GtOneloginFlutterPlugin 实例即可。

oneLoginPlugin.destroy();

renewPreGetToken

重新预取号,可在退出登录时调用此方法,加快下次拉起授权页的速度

oneLoginPlugin.renewPreGetToken();

deletePreResultCache

删除预取号缓存

oneLoginPlugin.deletePreResultCache();

setProtocolCheckState

设置隐私条款勾选框状态

oneLoginPlugin.setProtocolCheckState(true);

addEventHandler

添加处理回调

oneLoginPlugin.addEventListener(
    onBackButtonClick: (_) {
      debugPrint(tag + "onBackButtonClick");
    },
    onAuthButtonClick: (_) {
      debugPrint(tag + "onAuthButtonClick");
    }, 
    onSwitchButtonClick: (_) {
      debugPrint(tag + "onSwitchButtonClick");
      oneLoginPlugin.dismissAuthView();
    }, 
    onTermCheckBoxClick: (isChecked) {
      debugPrint(tag + "onTermItemClick:$isChecked");
    }
);

Libraries

gt_onelogin_flutter_plugin