app-starlock/lib/tools/jverify_one_click_login.dart

477 lines
20 KiB
Dart
Raw Normal View History

2024-12-30 18:17:28 +08:00
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<void> _initSDK() async {
await initPlatformState();
isInitSuccess();
getToken();
preLogin();
}
Future<void> 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<bool> 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<Map?> 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<JVCustomWidget> 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<JVCustomWidget> 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");
});
*/
// }
// });
}
}