app-starlock/lib/tools/jverify_one_click_login.dart

273 lines
9.6 KiB
Dart
Raw Normal View History

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
2024-12-30 18:17:28 +08:00
import 'package:jverify/jverify.dart';
import 'package:star_lock/app_settings/app_colors.dart';
2024-12-30 18:17:28 +08:00
import '../app_settings/app_settings.dart';
import '../common/XSConstantMacro/XSConstantMacro.dart';
2024-12-30 18:17:28 +08:00
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 {
try {
await initPlatformState();
2024-12-30 18:17:28 +08:00
isInitSuccess();
2024-12-30 18:17:28 +08:00
getToken();
2024-12-30 18:17:28 +08:00
preLogin();
} catch (e) {
AppLog.log('SDK 初始化错误: $e');
}
2024-12-30 18:17:28 +08:00
}
Future<void> initPlatformState() async {
// 初始化 SDK 之前添加监听
jverify.addSDKSetupCallBackListener((JVSDKSetupEvent event) {
print('receive sdk setup call back event :${event.toMap()}');
});
jverify.setDebugMode(true); // 打开调试模式
jverify.setCollectionAuth(true);
String appKey;
2024-12-30 18:17:28 +08:00
if (F.isSKY) {
appKey = '7ff37d174c1a568a89e98dad';
2024-12-30 18:17:28 +08:00
AppLog.log('appKey:7ff37d174c1a568a89e98dad');
} else {
appKey = '251fc8074820d122b6de58d2';
2024-12-30 18:17:28 +08:00
AppLog.log('appKey:251fc8074820d122b6de58d2');
}
jverify.setup(
appKey: appKey, //"你自己应用的 AppKey",
channel: 'devloper');
2024-12-30 18:17:28 +08:00
/// 授权页面点击时间监听
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<void> loginAuth(
Function(JVListenerEvent jvListenerEvent) action) async {
2024-12-30 18:17:28 +08:00
Map map = await jverify.checkVerifyEnable();
final bool result = map[f_result_key];
print('checkVerifyEnable $map');
//需要使用sms的时候不检查result
// if (result) {
// return await jverify.loginAuth(true);
2024-12-30 18:17:28 +08:00
// }
// return null;
if (result) {
bool isiOS = Platform.isIOS;
/// 自定义授权的 UI 界面,以下设置的图片必须添加到资源文件里,
/// android项目将图片存放至drawable文件夹下可使用图片选择器的文件名,例如btn_login.xml,入参为"btn_login"。
/// ios项目存放在 Assets.xcassets。
JVUIConfig uiConfig = JVUIConfig();
// uiConfig.authBGGifPath = "main_gif";
// uiConfig.authBGVideoPath="main_vi";
// uiConfig.authBGVideoPath = 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4';
uiConfig.authBackgroundImage = 'images/icon_left_grey.png';
// uiConfig.navHidden = !isiOS;
uiConfig.navColor = AppColors.mainColor.value;
uiConfig.navText = '一键登录'.tr;
uiConfig.navTextColor = Colors.white.value;
uiConfig.navReturnImgPath = 'return_bg'; //图片必须存在
uiConfig.logoWidth = 100;
uiConfig.logoHeight = 100;
//uiConfig.logoOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logoWidth/2).toInt();
uiConfig.logoOffsetY = 100;
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 ? 120 : 220;
uiConfig.numberVerticalLayoutItem = JVIOSLayoutItem.ItemLogo;
uiConfig.numberColor = AppColors.mainColor.value;
uiConfig.numberSize = 18;
uiConfig.sloganOffsetY = isiOS ? 120 : 260;
uiConfig.sloganVerticalLayoutItem = JVIOSLayoutItem.ItemNumber;
uiConfig.sloganTextColor = Colors.black.value;
uiConfig.sloganTextSize = 15;
// uiConfig.slogan
//uiConfig.sloganHidden = 0;
uiConfig.logBtnOffsetX = 20;
uiConfig.logBtnWidth = double.parse('${1.sw - 20 * 2}').toInt();
uiConfig.logBtnHeight = 50;
//uiConfig.logBtnOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logBtnWidth/2).toInt();
uiConfig.logBtnOffsetY = isiOS ? 120 : 330;
uiConfig.logBtnVerticalLayoutItem = JVIOSLayoutItem.ItemNumber;
uiConfig.logBtnText = '一键登录'.tr;
uiConfig.logBtnTextColor = Colors.white.value;
uiConfig.logBtnTextSize = 16;
uiConfig.logBtnBackgroundPath = '';
// 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 = 30; // 距离底部距离
uiConfig.privacyOffsetX = 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 = AppColors.mainColor.value;
uiConfig.privacyText = ['我已阅读并同意'.tr];
uiConfig.privacyTextSize = 13;
uiConfig.privacyItem = [
JVPrivacy('用户协议'.tr, XSConstantMacro.userAgreementURL,
beforeName: '', afterName: '', separator: ''),
JVPrivacy('隐私政策'.tr, XSConstantMacro.privacyPolicyURL, 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 = AppColors.mainColor.value;
uiConfig.privacyNavTitleTextColor = Colors.white.value;
uiConfig.privacyNavTitleTextSize = 16;
/// 调用接口设置 UI
jverify.setCustomAuthorizationView(true, uiConfig,
landscapeConfig: uiConfig);
jverify.loginAuthSyncApi2(
autoDismiss: true,
loginAuthcallback: (event) {
action(event);
// AppLog.log('获取到 loginAuthSyncApi 接口返回数据code=${event.code},message = ${event.message},operator = ${event.operator}');
});
}
2024-12-30 18:17:28 +08:00
}
}