import 'package:jverify/jverify.dart'; import '../app_settings/app_settings.dart'; import '../flavors.dart'; class JverifyOneClickLoginManage { factory JverifyOneClickLoginManage() => shareManager()!; JverifyOneClickLoginManage._init() { _initSDK(); } static JverifyOneClickLoginManage? _manager; static JverifyOneClickLoginManage? shareManager() { _manager ??= JverifyOneClickLoginManage._init(); return _manager; } JverifyOneClickLoginManage? get manager => shareManager(); Jverify jverify = Jverify(); /// 统一 key String f_result_key = 'result'; /// 错误码 String f_code_key = 'code'; /// 回调的提示信息,统一返回 flutter 为 message String f_msg_key = 'message'; /// 运营商信息 String f_opr_key = 'operator'; Future _initSDK() async { await initPlatformState(); isInitSuccess(); getToken(); preLogin(); } Future initPlatformState() async { // 初始化 SDK 之前添加监听 jverify.addSDKSetupCallBackListener((JVSDKSetupEvent event) { print('receive sdk setup call back event :${event.toMap()}'); }); jverify.setDebugMode(true); // 打开调试模式 jverify.setCollectionAuth(true); if (F.isSKY) { jverify.setup( appKey: '7ff37d174c1a568a89e98dad', //"你自己应用的 AppKey", channel: 'devloper-default'); // 初始化sdk, appKey 和 channel 只对ios设置有效 AppLog.log('appKey:7ff37d174c1a568a89e98dad'); } else { jverify.setup( appKey: '251fc8074820d122b6de58d2', //"你自己应用的 AppKey", channel: 'devloper-default'); // 初始化sdk, appKey 和 channel 只对ios设置有效 AppLog.log('appKey:251fc8074820d122b6de58d2'); } // If the widget was removed from the tree while the asynchronous platform // message was in flight, we want to discard the reply rather than calling // setState to update our non-existent appearance. // if (!mounted) return; /// 授权页面点击时间监听 jverify.addAuthPageEventListener((JVAuthPageEvent event) { print('receive auth page event :${event.toMap()}'); }); } /// sdk 初始化是否完成 void isInitSuccess() { jverify.isInitSuccess().then((map) { final bool result = map[f_result_key]; AppLog.log('sdk 初始化结果:$map'); if (result) { AppLog.log('sdk 初始化成功'); } else { AppLog.log('sdk 初始化失败'); } }); } /// 判断当前网络环境是否可以发起认证 Future checkVerifyEnable() async { final Map map = await jverify.checkVerifyEnable(); final bool result = map[f_result_key]; return result; // state.jverify.checkVerifyEnable().then((map) { // final bool result = map[f_result_key]; // if (result) { // AppLog.log('当前网络环境【支持认证】!'); // } else { // AppLog.log('当前网络环境【不支持认证】!'); // } // return result; // }); } void getToken() { jverify.checkVerifyEnable().then((map) { final bool result = map[f_result_key]; if (result) { jverify.getToken().then((map) { final int code = map[f_code_key]; final String token = map[f_msg_key]; final String operator = map[f_opr_key]; AppLog.log('getToken code:$code token:$token operator:$operator'); }); } else { AppLog.log('[2016],msg = 当前网络环境不支持认证'); } }); } /// 登录预取号 void preLogin() { jverify.checkVerifyEnable().then((map) { final bool result = map[f_result_key]; if (result) { jverify.preLogin().then((map) { AppLog.log('预取号接口回调:${map.toString()}'); final int code = map[f_code_key]; final String message = map[f_msg_key]; }); } else { AppLog.log('[2016],msg = 当前网络环境不支持认证'); } }); } /// SDK 请求授权一键登录 Future loginAuth() async { Map map = await jverify.checkVerifyEnable(); final bool result = map[f_result_key]; print('checkVerifyEnable $map'); //需要使用sms的时候不检查result if (result) { return await jverify.loginAuth(true); // jverify.loginAuth(true).then((map) { // /// 再,在回调里获取 loginAuth 接口异步返回数据(如果是通过添加 JVLoginAuthCallBackListener 监听来获取返回数据,则忽略此步骤) // final int code = map[f_code_key]; // final String content = map[f_msg_key]; // final String operator = map[f_opr_key]; // AppLog.log( // '通过接口异步返回,获取到 loginAuth 接口返回数据,code=$code,message = $content,operator = $operator'); // return map; // }); } return null; // .then((map) { // final bool result = map[f_result_key]; // print('checkVerifyEnable $map'); // //需要使用sms的时候不检查result // if (result) { // // if (true) { // jverify.loginAuth(true).then((map) { // /// 再,在回调里获取 loginAuth 接口异步返回数据(如果是通过添加 JVLoginAuthCallBackListener 监听来获取返回数据,则忽略此步骤) // final int code = map[f_code_key]; // final String content = map[f_msg_key]; // final String operator = map[f_opr_key]; // AppLog.log( // '通过接口异步返回,获取到 loginAuth 接口返回数据,code=$code,message = $content,operator = $operator'); // return map; // }); // // final screenSize = MediaQuery.of(context).size; // // final screenWidth = screenSize.width; // // final screenHeight = screenSize.height; // final bool isiOS = Platform.isIOS; // // /// 自定义授权的 UI 界面,以下设置的图片必须添加到资源文件里, // /// android项目将图片存放至drawable文件夹下,可使用图片选择器的文件名,例如:btn_login.xml,入参为"btn_login"。 // /// ios项目存放在 Assets.xcassets。 // /// // final JVUIConfig uiConfig = JVUIConfig(); // // uiConfig.authBGGifPath = "main_gif"; // // uiConfig.authBGVideoPath="main_vi"; // uiConfig.authBGVideoPath = // 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'; // uiConfig.authBGVideoImgPath = 'main_v_bg'; // // uiConfig.navHidden = !isiOS; // // uiConfig.navColor = Colors.red.value; // // uiConfig.navText = "登录"; // // uiConfig.navTextColor = Colors.blue.value; // // uiConfig.navReturnImgPath = "return_bg"; //图片必须存在 // // uiConfig.logoWidth = 100; // uiConfig.logoHeight = 80; // //uiConfig.logoOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logoWidth/2).toInt(); // uiConfig.logoOffsetY = 10; // uiConfig.logoVerticalLayoutItem = JVIOSLayoutItem.ItemSuper; // uiConfig.logoHidden = false; // uiConfig.logoImgPath = 'logo'; // // uiConfig.numberFieldWidth = 200; // uiConfig.numberFieldHeight = 40; // //uiConfig.numFieldOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.numberFieldWidth/2).toInt(); // uiConfig.numFieldOffsetY = isiOS ? 20 : 120; // uiConfig.numberVerticalLayoutItem = JVIOSLayoutItem.ItemLogo; // uiConfig.numberColor = Colors.blue.value; // uiConfig.numberSize = 18; // // uiConfig.sloganOffsetY = isiOS ? 20 : 160; // uiConfig.sloganVerticalLayoutItem = JVIOSLayoutItem.ItemNumber; // uiConfig.sloganTextColor = Colors.black.value; // uiConfig.sloganTextSize = 15; // // uiConfig.slogan // //uiConfig.sloganHidden = 0; // // uiConfig.logBtnWidth = 220; // uiConfig.logBtnHeight = 50; // //uiConfig.logBtnOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logBtnWidth/2).toInt(); // uiConfig.logBtnOffsetY = isiOS ? 20 : 230; // uiConfig.logBtnVerticalLayoutItem = JVIOSLayoutItem.ItemSlogan; // uiConfig.logBtnText = '登录按钮'; // uiConfig.logBtnTextColor = Colors.brown.value; // uiConfig.logBtnTextSize = 16; // uiConfig.logBtnTextBold = true; // uiConfig.loginBtnNormalImage = 'login_btn_normal'; //图片必须存在 // uiConfig.loginBtnPressedImage = 'login_btn_press'; //图片必须存在 // uiConfig.loginBtnUnableImage = 'login_btn_unable'; //图片必须存在 // // uiConfig.privacyHintToast = // true; //only android 设置隐私条款不选中时点击登录按钮默认显示toast。 // // uiConfig.privacyState = false; //设置默认勾选 // uiConfig.privacyCheckboxSize = 20; // uiConfig.checkedImgPath = 'check_image'; //图片必须存在 // uiConfig.uncheckedImgPath = 'uncheck_image'; //图片必须存在 // uiConfig.privacyCheckboxInCenter = true; // uiConfig.privacyCheckboxHidden = false; // uiConfig.isAlertPrivacyVc = true; // // //uiConfig.privacyOffsetX = isiOS ? (20 + uiConfig.privacyCheckboxSize) : null; // uiConfig.privacyOffsetY = 15; // 距离底部距离 // uiConfig.privacyVerticalLayoutItem = JVIOSLayoutItem.ItemSuper; // uiConfig.clauseName = '协议1'; // uiConfig.clauseUrl = 'http://www.baidu.com'; // uiConfig.clauseBaseColor = Colors.black.value; // uiConfig.clauseNameTwo = '协议二'; // uiConfig.clauseUrlTwo = 'http://www.hao123.com'; // uiConfig.clauseColor = Colors.red.value; // uiConfig.privacyText = ['1极', '4证']; // uiConfig.privacyTextSize = 13; // uiConfig.privacyItem = [ // JVPrivacy('自定义协议1', 'http://www.baidu.com', // beforeName: '==', afterName: '++', separator: '*'), // JVPrivacy('自定义协议2', 'http://www.baidu.com', separator: '、'), // JVPrivacy('自定义协议3', 'http://www.baidu.com', separator: '、'), // JVPrivacy('自定义协议4', 'http://www.baidu.com', separator: '、'), // JVPrivacy('自定义协议5', 'http://www.baidu.com', separator: '、') // ]; // uiConfig.textVerAlignment = 1; // //uiConfig.privacyWithBookTitleMark = true; // //uiConfig.privacyTextCenterGravity = false; // uiConfig.authStatusBarStyle = JVIOSBarStyle.StatusBarStyleDarkContent; // uiConfig.privacyStatusBarStyle = JVIOSBarStyle.StatusBarStyleDefault; // uiConfig.modelTransitionStyle = // JVIOSUIModalTransitionStyle.CrossDissolve; // // uiConfig.statusBarColorWithNav = true; // // uiConfig.virtualButtonTransparent = true; // // uiConfig.privacyStatusBarColorWithNav = true; // uiConfig.privacyVirtualButtonTransparent = true; // // uiConfig.needStartAnim = true; // uiConfig.needCloseAnim = true; // uiConfig.enterAnim = 'activity_slide_enter_bottom'; // uiConfig.exitAnim = 'activity_slide_exit_bottom'; // // uiConfig.privacyNavColor = Colors.red.value; // uiConfig.privacyNavTitleTextColor = Colors.blue.value; // uiConfig.privacyNavTitleTextSize = 16; // // uiConfig.privacyNavTitleTitle = 'ios lai le'; //only ios // uiConfig.privacyNavReturnBtnImage = 'back'; //图片必须存在; // // //协议二次弹窗内容设置 -iOS // uiConfig.isAlertPrivacyVc = true; // uiConfig.agreementAlertViewTitleTexSize = 18; // uiConfig.agreementAlertViewTitleTextColor = Colors.red.value; // uiConfig.agreementAlertViewContentTextAlignment = // JVTextAlignmentType.center; // uiConfig.agreementAlertViewContentTextFontSize = 16; // uiConfig.agreementAlertViewLoginBtnNormalImagePath = 'login_btn_normal'; // uiConfig.agreementAlertViewLoginBtnPressedImagePath = 'login_btn_press'; // uiConfig.agreementAlertViewLoginBtnUnableImagePath = 'login_btn_unable'; // uiConfig.agreementAlertViewLogBtnTextColor = Colors.black.value; // // //协议二次弹窗内容设置 -Android // final JVPrivacyCheckDialogConfig privacyCheckDialogConfig = // JVPrivacyCheckDialogConfig(); // // privacyCheckDialogConfig.width = 250; // // privacyCheckDialogConfig.height = 100; // privacyCheckDialogConfig.title = '测试协议标题'; // privacyCheckDialogConfig.offsetX = 0; // privacyCheckDialogConfig.offsetY = 0; // privacyCheckDialogConfig.logBtnText = '同11意'; // privacyCheckDialogConfig.titleTextSize = 22; // privacyCheckDialogConfig.gravity = 'center'; // privacyCheckDialogConfig.titleTextColor = Colors.black.value; // privacyCheckDialogConfig.contentTextGravity = 'left'; // privacyCheckDialogConfig.contentTextSize = 14; // privacyCheckDialogConfig.logBtnImgPath = 'login_btn_normal'; // privacyCheckDialogConfig.logBtnTextColor = Colors.black.value; // privacyCheckDialogConfig.logBtnMarginT = 20; // privacyCheckDialogConfig.logBtnMarginB = 20; // privacyCheckDialogConfig.logBtnMarginL = 10; // privacyCheckDialogConfig.logBtnWidth = 140; // privacyCheckDialogConfig.logBtnHeight = 40; // // /// 添加自定义的 控件 到dialog // final List dialogWidgetList = []; // const String btn_dialog_widgetId = // 'jv_add_custom_dialog_button'; // 标识控件 id // final JVCustomWidget buttonDialogWidget = // JVCustomWidget(btn_dialog_widgetId, JVCustomWidgetType.button); // buttonDialogWidget.title = '取消'; // buttonDialogWidget.left = 163; // buttonDialogWidget.top = 142; // buttonDialogWidget.width = 140; // buttonDialogWidget.height = 40; // buttonDialogWidget.textAlignment = JVTextAlignmentType.center; // buttonDialogWidget.btnNormalImageName = 'main_btn_other'; // buttonDialogWidget.btnPressedImageName = 'main_btn_other'; // // buttonDialogWidget.backgroundColor = Colors.yellow.value; // //buttonWidget.textAlignment = JVTextAlignmentType.left; // // // 添加点击事件监听 // jverify.addClikWidgetEventListener(btn_dialog_widgetId, (eventId) { // AppLog.log('receive listener - click dialog widget event :$eventId'); // if (btn_dialog_widgetId == eventId) { // AppLog.log('receive listener - 点击【新加 dialog button】'); // } // }); // dialogWidgetList.add(buttonDialogWidget); // privacyCheckDialogConfig.widgets = dialogWidgetList; // uiConfig.privacyCheckDialogConfig = privacyCheckDialogConfig; // // //sms // final JVSMSUIConfig smsConfig = JVSMSUIConfig(); // smsConfig.smsPrivacyBeanList = [ // JVPrivacy('自定义协议1', 'http://www.baidu.com', // beforeName: '==', afterName: '++', separator: '*') // ]; // smsConfig.enableSMSService = true; // uiConfig.smsUIConfig = smsConfig; // // uiConfig.setIsPrivacyViewDarkMode = false; //协议页面是否支持暗黑模式 // // //弹框模式 // // JVPopViewConfig popViewConfig = JVPopViewConfig(); // // popViewConfig.width = (screenWidth - 100.0).toInt(); // // popViewConfig.height = (screenHeight - 150.0).toInt(); // // // uiConfig.popViewConfig = popViewConfig; // // /// 添加自定义的 控件 到授权界面 // final List widgetList = []; // // const String text_widgetId = 'jv_add_custom_text'; // 标识控件 id // final JVCustomWidget textWidget = // JVCustomWidget(text_widgetId, JVCustomWidgetType.textView); // textWidget.title = '新加 text view 控件'; // textWidget.left = 20; // textWidget.top = 360; // textWidget.width = 200; // textWidget.height = 40; // textWidget.backgroundColor = Colors.yellow.value; // textWidget.isShowUnderline = true; // textWidget.textAlignment = JVTextAlignmentType.center; // textWidget.isClickEnable = true; // // // 添加点击事件监听 // jverify.addClikWidgetEventListener(text_widgetId, (eventId) { // AppLog.log('receive listener - click widget event :$eventId'); // if (text_widgetId == eventId) { // AppLog.log('receive listener - 点击【新加 text】'); // } // }); // widgetList.add(textWidget); // // const String btn_widgetId = 'jv_add_custom_button'; // 标识控件 id // final JVCustomWidget buttonWidget = // JVCustomWidget(btn_widgetId, JVCustomWidgetType.button); // buttonWidget.title = '新加 button 控件'; // buttonWidget.left = 100; // buttonWidget.top = 400; // buttonWidget.width = 150; // buttonWidget.height = 40; // buttonWidget.isShowUnderline = true; // buttonWidget.backgroundColor = Colors.brown.value; // //buttonWidget.btnNormalImageName = ""; // //buttonWidget.btnPressedImageName = ""; // //buttonWidget.textAlignment = JVTextAlignmentType.left; // // // 添加点击事件监听 // jverify.addClikWidgetEventListener(btn_widgetId, (eventId) { // AppLog.log('receive listener - click widget event :$eventId'); // if (btn_widgetId == eventId) { // AppLog.log('receive listener - 点击【新加 button】'); // } // }); // widgetList.add(buttonWidget); // // // 设置iOS的二次弹窗按钮 // uiConfig.agreementAlertViewWidgets = dialogWidgetList; // uiConfig.agreementAlertViewUIFrames = { // 'superViewFrame': [10, 60, 280, 300], // 'alertViewFrame': [0, 0, 280, 300], // 'titleFrame': [10, 10, 260, 40], // 'contentFrame': [15, 60, 250, 110], // 'buttonFrame': [10, 200, 100, 40] // }; // // /// 步骤 1:调用接口设置 UI // jverify.setCustomAuthorizationView(true, uiConfig, // landscapeConfig: uiConfig, widgets: widgetList); // if (!isSms) { // /// 步骤 2:调用一键登录接口 // jverify.loginAuthSyncApi2( // autoDismiss: true, // enableSms: true, // loginAuthcallback: (event) { // AppLog.log( // '获取到 loginAuthSyncApi 接口返回数据,code=${event.code},message = ${event.message},operator = ${event.operator}'); // }); // } else { // /// 步骤 2:调用短信登录接口 // jverify.smsAuth( // autoDismiss: true, // smsCallback: (event) { // AppLog.log( // '获取到 smsAuth 接口返回数据,code=${event.code},message = ${event.message},phone = ${event.phone}'); // }); // } // } else { /* 弹框模式 JVPopViewConfig popViewConfig = JVPopViewConfig(); popViewConfig.width = (screenWidth - 100.0).toInt(); popViewConfig.height = (screenHeight - 150.0).toInt(); uiConfig.popViewConfig = popViewConfig; */ /* /// 方式二:使用异步接口 (如果想使用异步接口,则忽略此步骤,看方式二) /// 先,执行异步的一键登录接口 jverify.loginAuth(true).then((map) { /// 再,在回调里获取 loginAuth 接口异步返回数据(如果是通过添加 JVLoginAuthCallBackListener 监听来获取返回数据,则忽略此步骤) int code = map[f_code_key]; String content = map[f_msg_key]; String operator = map[f_opr_key]; setState(() { _hideLoading(); _result = "接口异步返回数据:[$code] message = $content"; }); print("通过接口异步返回,获取到 loginAuth 接口返回数据,code=$code,message = $content,operator = $operator"); }); */ // } // }); } }