跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

Flutter SDK 文档

集成Flutter SDK

手动集成

1.在【友盟+】官网下载Flutter SDK。Flutter SDK下载地址

2.将下载的zip文件解压,并删除example文件后,将其拷入您的flutter工程中

注:example文件内含demo

verify

3.在工程中的pubspec.yaml引入如下插件

#线上依赖
umeng_common_sdk: 1.2.3
#本地依赖
umeng_verify_sdk:
    path: ../

初始化Flutter SDK

1.UMCommon插件初始化

2.UMVerify插件初始化调用接口传入相应的密钥值:

static Future<dynamic> setVerifySDKInfo(
      String androidInfo, String iosInfo);

Flutter Verify SDK功能使用

/*
* 自定义 UI 界面配置类
* */

//自定义控件

  int left;
  int top;
  int width;
  int height;

  String title;
  double titleFont;
  int titleColor;
  int? backgroundColor;

  UMCustomWidgetTextAlignmentType? textAlignment;

  /// button 独有字段 start
  String? btnNormalImageName_ios;
  String? btnPressedImageName_ios;

  ///android独有,使用时需要设置
  String? btnBackgroundResource_android;
  bool isClickEnable = false; //是否可点击,默认:不可点击
  /// button 独有字段 end

  ///textview 独有字段 start
  int lines; // textView 行数
  bool isSingleLine; // textView 是否单行显示,默认:单行
  bool isShowUnderline; //是否显示下划线,默认:不显示
  ///textview 独有字段 end


//自定义UI

  /**
   *  ios : 实现弹窗的方案 x > 0 || y > 0 width < 屏幕宽度 || height < 屏幕高度
   *
   *  android: 弹窗模式务必设置width和height, 若不希望设置偏移量,请将x、y设置为-1
   */
  List<double>? contentViewFrame; //传入4个值,分别是x,y,width,height

  bool isAutorotate = false; //是否支持横竖屏,true:支持横竖屏,false:只支持竖屏

  /**
   *  仅弹窗模式属性
   */

  int? alertBlurViewColor_ios; //底部蒙层背景颜色,默认黑色
  double? alertBlurViewAlpha_ios; //底部蒙层背景透明度,默认0.5
  int? alertContentViewColor_ios; //contentView背景颜色,默认白色

  int? alertTitleBarColor_ios; //标题栏背景颜色
  bool alertBarIsHidden_ios = false; //标题栏是否隐藏,默认NO

  ///标题栏标题,string 内容,int 颜色,double 大小
  List? alertTitle_ios;

  String? alertCloseImage_ios; //标题栏右侧关闭按钮图片设置
  bool alertCloseItemIsHidden_ios = false; //标题栏右侧关闭按钮是否显示,默认NO
  List<double>?
      alertTitleBarFrame_ios; //构建标题栏的frame,view布局或布局发生变化时调用,不实现则按默认处理,实现时仅有height生效,传入4个值,分别是x,y,width,height
  List<double>?
      alertTitleFrame_ios; //构建标题栏标题的frame,view布局或布局发生变化时调用,不实现则按默认处理 ,传入4个值,分别是x,y,width,height
  List<double>?
      alertCloseItemFrame_ios; //构建标题栏右侧关闭按钮的frame,view布局或布局发生变化时调用,不实现则按默认处理,实现时仅有height生效,传入4个值,分别是x,y,width,height

  /**
   *  导航栏(ios只对全屏模式有效, android对全屏和弹窗均生效)
   */

  bool navIsHidden = false; //导航栏是否隐藏
  bool navIsHiddenAfterLoginVCDisappear_ios =
      false; //授权页push到其他页面后,导航栏是否隐藏,默认NO
  int? navColor; //导航栏主题色

  ///导航栏标题,string 内容,int 颜色,double 大小
  List? navTitle;

  String? navBackImage; //导航栏返回图片
  bool hideNavBackItem = false; //是否隐藏授权页导航栏返回按钮,默认不隐藏

  /// android系统上不支持设置x,y坐标,需要将navBackButtonFrame中x,y设置为-1
  List<double>?
      navBackButtonFrame; //构建导航栏返回按钮的frame,view布局或布局发生变化时调用,不实现则按默认处理 ,传入4个值,分别是x,y,width,height

  List<double>?
      navTitleFrame_ios; //构建导航栏标题的frame,view布局或布局发生变化时调用,不实现则按默认处理,传入4个值,分别是x,y,width,height
  List<double>?
      navMoreViewFrameFrame_ios; //构建导航栏右侧more view的frame,view布局或布局发生变化时调用,不实现则按默认处理,传入4个值,分别是x,y,width,height

  /**
   *  全屏、弹窗模式共同属性
   *  授权页弹出方向
   */

  double?
      animationDuration_ios; //授权页显示和消失动画时间,默认为0.25s,<= 0 时关闭动画,该属性只对自带动画起效,不影响自定义动画

  /**
   *  状态栏
   */
  bool prefersStatusBarHidden = false; //状态栏是否隐藏,默认NO

  /**
   *  背景
   */
  int? backgroundColor_ios; //授权页背景色
  String? backgroundImage; //授权页背景图片

  /**
   *  logo图片
   */
  String? logoImage; //logo图片设置
  bool logoIsHidden = false; //logo是否隐藏,默认NO

  ///构建logo的frame,view布局或布局发生变化时调用,不实现则按默认处理,传入4个值.
  /// ios : 分别是x,y,width,height
  /// android: y1:logo控件相对导航栏顶部位移  y2:logo控件相对底部位移 (y1,y2仅支持设置一个,需将不需要的设置为-1)  width, height
  List<double>? logoFrame;

  /**
   *  slogan
   */

  ///slogan文案,string 内容,int 颜色,double 大小
  List? sloganText;

  bool sloganIsHidden = false; //slogan是否隐藏,默认NO

  /// 构建slogan的frame,view布局或布局发生变化时调用,不实现则按默认处理,传入4个值
  /// ios: 分别是x,y,width,height
  /// android:  y1:logo控件相对导航栏顶部位移  y2:logo控件相对底部位移 (y1,y2仅支持设置一个,需将不需要的设置为-1), width:-1, height:-1
  List<double>? sloganFrame;

  /**
   *  号码
   */
  int? numberColor; //号码颜色设置
  double? numberFont; //号码字体大小设置,大小小于16则不生效

  /// 构建号码的frame,view布局或布局发生变化时调用,只有x、y生效,不实现则按默认处理
  /// ios: 传入4个值,分别是x,y,width,height
  /// android: 传入4个值,分别是x, y1, y2, -1  x:横坐标 y1:logo控件相对导航栏顶部位移  y2:logo控件相对底部位移 (y1,y2仅支持设置一个,需将不需要的设置为-1)
  List<double>? numberFrame;

  /**
   *  登录
   */

  ///登陆按钮文案,string 内容,int 颜色,double 大小
  List? loginBtnText;

  List<String>?
      loginBtnBgImgs_ios; //登录按钮背景图片组,默认高度50.0pt,@[激活状态的图片,失效状态的图片,高亮状态的图片]

  String? loginBtnBgImg_android; // 登录按钮背景图片名称

  bool autoHideLoginLoading = true; //是隐藏点击登录按钮之后授权页上转圈的 loading, 默认为YES

  ///构建登录按钮的frame,view布局或布局发生变化时调用,不实现则按默认处理,
  /// ios 传入5个值,分别是x,y,-1,width,height
  /// android 传入5个值,分别是x,y1,y2,width,height  x:横坐标 y1:logo控件相对导航栏顶部位移  y2:logo控件相对底部位移 (y1,y2仅支持设置一个,需将不需要的设置为-1)
  List<double>? loginBtnFrame;

  /**
   *  协议
   */
  List<String>? checkBoxImages; //checkBox图片组,[uncheckedImg,checkedImg]

  List<double>?
      checkBoxImageEdgeInsets_ios; //checkBox图片距离控件边框的填充,确保控件大小减去内填充大小为资源图片大小情况下,图片才不会变形 ,top,left,bottom,right
  bool checkBoxIsChecked = false; //checkBox是否勾选,默认NO
  bool checkBoxIsHidden = false; //checkBox是否隐藏,默认NO
  double? checkBoxWH; //checkBox大小,高宽一样,必须大于0
  List<String>? privacyOne; //协议1,[协议名称,协议Url],注:两个协议名称不能相同
  List<String>? privacyTwo; //协议2,[协议名称,协议Url],注:两个协议名称不能相同
  List<String>? privacyThree; //协议3,[协议名称,协议Url],注:三个协议名称不能相同
  List<String>?
      privacyConectTexts; //协议名称之间连接字符串数组,默认 ["和","、","、"] ,即第一个为"和",其他为"、",按顺序读取,为空则取默认


  List<int>? privacyColors; //协议内容颜色数组,[非点击文案颜色,点击文案颜色]
  UMTextAlignment? privacyAlignment; // 协议文案支持居中、居左设置,默认居左
  String? privacyPreText; //协议整体文案,前缀部分文案
  String? privacySufText; //协议整体文案,后缀部分文案
  String? privacyOperatorPreText; //运营商协议名称前缀文案,仅支持 <([《(【『
  String? privacyOperatorSufText; //运营商协议名称后缀文案,仅支持 >)]》)】』
  int? privacyOperatorIndex; //运营商协议指定显示顺序,默认0,即第1个协议显示,最大值可为3,即第4个协议显示
  double? privacyFont; //协议整体文案字体大小,小于12.0不生效

  /// 构建changeBtn的frame,view布局或布局发生变化时调用,不实现则按默认处理
  /// ios: 传入4个值,分别是x,y,width,height
  /// android: 传入4个值,分别是x, y1, y2, -1  x:横坐标 y1:logo控件相对导航栏顶部位移  y2:logo控件相对底部位移 (y1,y2仅支持设置一个,需将不需要的设置为-1)
  List<double>? privacyFrame;

  /**
   *  切换到其他方式
   */

  ///changeBtn标题,string 内容,int 颜色,double 大小
  List? changeBtnTitle;

  bool changeBtnIsHidden = false; //changeBtn是否隐藏,默认NO

  /// iOS:传入4个值,分别是x,y,width,height
  /// android: 传入4个值:y1,y2,-1,-1  y1:logo控件相对导航栏顶部位移  y2:logo控件相对底部位移 (y1,y2仅支持设置一个,需将不需要的设置为-1)
  List<double>? changeBtnFrame;

  /**
   *  协议详情页
   */

  bool privacyVCIsCustomized_ios =
      false; //协议详情页容器是否自定义,默认NO,若为YES,则根据 PNSCodeLoginControllerClickProtocol 返回码获取协议点击详情信息

  /// android 独有
  /// 使用
  String? protocolAction_android; //自定义协议页跳转Action

  int? privacyNavColor; //导航栏背景颜色设置
  double? privacyNavTitleFont; //导航栏标题字体、大小
  int? privacyNavTitleColor; //导航栏标题颜色
  String? privacyNavBackImage; //导航栏返回图片

  /**
   *  自定义控件,目前支持button,textView
   */
  List? customWidget;

  }

  // 功能接口方法

  /// android独有,务必保证在所有接口前调用
  static void register_android();

  static Future<String?> get VerifyVersion;

  /**
   *  初始化SDK调用参数,app生命周期内调用一次
   *  @param  info app对应的秘钥
   *  @param  complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode
   */

  static Future<dynamic> setVerifySDKInfo(
      String androidInfo, String iosInfo);

  /**
   *  ios only
   *  检查当前环境是否支持一键登录或号码认证,resultDic 返回 PNSCodeSuccess 说明当前环境支持
   *  @param  authType 服务类型 UMPNSAuthTypeVerifyToken 本机号码校验流程,UMPNSAuthTypeLoginToken 一键登录流程,默认UMPNSAuthTypeLoginToken
   *  @param  complete 结果异步回调到主线程,成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考PNSReturnCode,只有成功回调才能保障后续接口调用
   */

  static Future<dynamic> checkEnvAvailableWithAuthType_ios(
      String authType);

  /// android only
  /// 检查当前环境是否支持一键登录或号码认证,通过[setTokenResultCallback_android]设置的监听回调结果
  /// 返回值格式示例如下:{msg: 终端支持认证, code: 600024, requestId: xxxx, requestCode: 0, vendorName: ct_sjl, carrierFailedResultData: }
  /// code值含义请参考文档
  static void checkEnvAvailable_android(UMEnvCheckType type);

  /**
   *  加速获取本机号码校验token,防止调用 getVerifyTokenWithTimeout:complete: 获取token时间过长
   *  @param  timeout 接口超时时间,单位s,默认为3.0s
   *  @param  complete 结果异步回调到主线程,
   *
   *  ios 成功时resultDic=@{resultCode:600000, token:..., msg:...},其他情况时"resultCode"值请参考UMPNSReturnCode
   *
   *  android 成功是返回{vendor:xxx} 失败时返回{vendor:xxx, ret:xxxxx}
   */

  static Future<dynamic> accelerateVerifyWithTimeout(int timeout);

  /**
   *  获取本机号码校验Token
   *  @param  timeout 接口超时时间,单位s,默认为3.0s
   *  @param  complete 结果异步回调,
   *  iOS 成功时resultDic=@{resultCode:600000, token:..., msg:...},其他情况时"resultCode"值请参考UMPNSReturnCode
   */
  static Future<dynamic> getVerifyTokenWithTimeout_ios(int timeout);

  /// android only
  /// 获取本机号码校验Token,通过[setTokenResultCallback_android]设置的监听回调结果
  /// 返回值格式示例如下:{msg: 获取token成功, code: 600000, requestId: xxx, requestCode: 0, vendorName: ct_sjl, carrierFailedResultData: , token: xxx}
  /// code值含义请参考文档
  static void getVerifyTokenWithTimeout_android(int timeout);

  ///  加速一键登录授权页弹起,防止调用 getLoginTokenWithTimeout:controller:model:complete: 等待弹起授权页时间过长
  ///  @param  timeout 接口超时时间,单位s,默认为3.0s
  ///  @param  complete 结果异步回调,
  ///  iOS 成功时resultDic=@{resultCode:600000, msg:...},其他情况时"resultCode"值请参考UMPNSReturnCode
  ///
  ///  android 成功是返回{vendor:xxx} 失败时返回{vendor:xxx, ret:xxxxx}

  static Future<dynamic> accelerateLoginPageWithTimeout(int timeout);
  

  ///
  ///  获取一键登录Token,调用该接口首先会弹起授权页,点击授权页的登录按钮获取Token
  ///  @warning 注意的是,如果前面没有调用 accelerateLoginPageWithTimeout:complete: 接口,该接口内部会自动先帮我们调用,成功后才会弹起授权页,所以有一个明显的等待过程
  ///  @param  timeout 接口超时时间,单位s,默认为3.0s
  ///  @param  controller 唤起自定义授权页的容器,内部会对其进行验证,检查是否符合条件
  ///  @param  model 自定义授权页面选项,可为nil,采用默认的授权页面,具体请参考UMCustomModel.h文件
  ///  @param  complete 结果异步回调,
  ///  iOS: "resultDic"里面的"resultCode"值请参考PNSReturnCode,如下:
  ///
  ///          授权页控件点击事件:700000(点击授权页返回按钮)、700001(点击切换其他登录方式)、
  ///          700002(点击登录按钮事件,根据返回字典里面的 "isChecked"字段来区分check box是否被选中,只有被选中的时候内部才会去获取Token)、700003(点击check box事件)、700004(点击协议富文本文字)
  /// 接口回调其他事件:600001(授权页唤起成功)、600002(授权页唤起失败)、600000(成功获取Token)、600011(获取Token失败)、
  ///          600015(获取Token超时)、600013(运营商维护升级,该功能不可用)、600014(运营商维护升级,该功能已达最大调用次数).....
  ///
  /// android: 通过[setTokenResultCallback_android]设置的监听回调结果
  /// 返回值格式示例如下:{"carrierFailedResultData":"","code":"600001","msg":"唤起授权页成功","requestCode":0,"requestId":"xxx","vendorName":"ct_sjl"}
  /// code值含义请参考文档
  /// 注意:android 授权页控件点击事件单独通过[setUIClickCallback_android]回调

  static void getLoginTokenWithTimeout(int timeout, UMCustomModel uiConfig);
  
  /// SDK 完成回调后,不会立即关闭授权页面,需要开发者主动调用离开授权页面方法去完成页面的关闭
  static void quitLoginPage_android();
  
  /**
   *  此接口仅用于开发期间用于一键登录页面不同机型尺寸适配调试(可支持模拟器),非正式页面,手机掩码为0,不能正常登录,请开发者注意下
   *  @param  controller 唤起自定义授权页的容器,内部会对其进行验证,检查是否符合条件
   *  @param  model 自定义授权页面选项,可为nil,采用默认的授权页面,具体请参考UMCustomModel.h文件
   *  @param  complete 结果异步回调到主线程,"resultDic"里面的"resultCode"值请参考PNSReturnCode
   */
  static Future<dynamic> debugLoginUIWithController();

  /**
   *  手动隐藏一键登录获取登录Token之后的等待动画,默认为自动隐藏,当设置 UMCustomModel 实例 autoHideLoginLoading = NO 时, 可调用该方法手动隐藏
   */
  static void hideLoginLoading();
  

  /**
   *  获取智能认证ID
   */
  static Future<String?> getVerifyId();
  
  /**
   *  注销授权页,建议用此方法,对于移动卡授权页的消失会清空一些数据
   *  @param flag 是否添加动画
   *  @param complete 成功返回
   */
  static Future<dynamic> cancelLoginVCAnimated(bool flag);
  

  /**
      ios独有
      判断当前设备蜂窝数据网络是否开启,即3G/4G
      @return 结果
   */
  static Future<bool?> checkDeviceCellularDataEnable();
  
  /**
      ios独有
      判断当前上网卡运营商是否是中国联通
      @return 结果
   */
  static Future<bool?> isChinaUnicom();
  
  /**
      ios独有
      判断当前上网卡运营商是否是中国移动
      @return 结果
   */
  static Future<bool?> isChinaMobile();
  
  /**
      ios独有
      判断当前上网卡运营商是否是中国电信
      @return 结果
   */
  static Future<bool?> isChinaTelecom();
  

  /**
      获取当前上网卡运营商名称,比如中国移动
      @return 结果
   */
  static Future<String?> getCurrentCarrierName();
  
  /**
      ios独有
      获取当前上网卡网络类型,比如WiFi,4G
      @return 结果
   */
  static Future<String?> getNetworktype();
  
  /**
      ios独有
      判断当前上网卡运营商是否是中国电信
      @return 结果
   */
  static Future<bool?> simSupportedIsOK();
  
  /**
      ios独有
      判断wwan是否开着(通过p0网卡判断,无wifi或有wifi情况下都能检测到)
      @return 结果
   */
  static Future<bool?> isWWANOpen();
  
  /**
      ios独有
      判断wwan是否开着(仅无wifi情况下)
      @return 结果
   */
  static Future<bool?> reachableViaWWAN();
  
  /**
      ios独有
      获取设备当前网络私网IP地址
      @return 结果
   */
  static Future<String?> getMobilePrivateIPAddress(bool preferIPv4);
  
  ///设置getLoginToken回调
  static void getLoginTokenCallback(Callback? callback);

  ///设置自定义控件回调
  static void getWidgetEventCallback(Callback? callback);
  
  static void setTokenResultCallback_android(Callback? callback);
  
  static void setUIClickCallback_android(Callback? callback);

常见问题

更多flutter版本集成问题,可以参考文档《Flutter接入常见问题》。