import 'package:flutter/cupertino.dart'; import 'package:mobsms/mobsms.dart'; import 'package:sharesdk_plugin/sharesdk_plugin.dart'; import 'package:zhiying_comm/pages/login_page/model/login_style_model.dart'; import 'package:zhiying_comm/util/dialog/loading/loading.dart'; import 'package:zhiying_comm/util/empty_util.dart'; import 'package:zhiying_comm/util/enum_util.dart'; import 'package:zhiying_comm/util/global_config.dart'; import 'package:zhiying_comm/util/log/let_log.dart'; import 'package:zhiying_comm/util/mob_util/secverify/quick_login_util.dart'; import 'package:zhiying_comm/util/net_util.dart'; import 'package:zhiying_comm/util/shared_prefe_util.dart'; import 'package:fluttertoast/fluttertoast.dart'; /// /// MOB SDK 工具类 /// class MobUtil { /// /// MOB 各个sdk初始化 /// /// static void init() { // 秒验的初始化 QuickLoginUtil.getInstance().init(); } /// /// 退出QQ登录 /// static void cancelQQAuth(){ SharesdkPlugin.cancelAuth(ShareSDKPlatforms.qq, (SSDKResponseState state, Map user, SSDKError error) { Logger.debug('state = ${state}\n rawData = ${error?.rawData?.toString()}'); }); } /// /// 退出微信登录 /// static void cancelWeChatAuth(){ SharesdkPlugin.cancelAuth(ShareSDKPlatforms.wechatSession, (SSDKResponseState state, Map user, SSDKError error) { Logger.debug('state = ${state}\n rawData = ${error?.rawData?.toString()}'); }); } /// /// 取消授权 /// static void cancelAuth(ShareSDKPlatform platform) { SharesdkPlugin.cancelAuth(platform, (SSDKResponseState state, Map user, SSDKError error) { // showAlert(state, error.rawData, context); Logger.debug('state = ${state}\n rawData = ${error?.rawData?.toString()}'); }); } /// /// 打开秒验页面 /// /// context: 当前应用的上下文 /// model: 快速登录的样式 /// static void openQuickLoginPage(BuildContext context, Quick model) { QuickLoginUtil.getInstance().openQuickLogin(context, model); } /// /// 获取短信 /// 流程:先根据类型请求后台获取是否余额充足,根据返回的模版类型进行MOB SDK的验证码下发。 /// /// phone: 手机号 /// zoneCode: 地区号码 /// templateID: 模板ID /// /// 例子:获取绑定手机号验证码:bool result = await MobUtil.getTextCode('手机号码', zoneCode = '86', smsCodeType = SMSCodeType.BIND_ALIPAY); /// static Future getTextCode(final String phone, {String zoneCode = '86', SMSCodeType smsCodeType = SMSCodeType.NORMAL}) async { bool result = false; String vCodeType = await _getSMSStrategy(phone, type: smsCodeType); if (EmptyUtil.isEmpty(vCodeType)) { result = await _getSMSDefault(phone, type: smsCodeType); return Future.value(result); } else { Logger.debug('phone = $phone, zoneCode = $zoneCode, vCodeType = $vCodeType'); await Smssdk.getTextCode(phone, zoneCode, vCodeType, (ret, err) { if (err != null) { result = false; Logger.debug('get vcode fail err = ${err?.toString()}, ret = ${ret?.toString()}'); if (!EmptyUtil.isEmpty(err)) { Fluttertoast.showToast(msg: '获取验证码失败:${err['msg']}'); } else { Fluttertoast.showToast(msg: '获取验证码失败~'); } } else { String rst = ret.toString(); if (rst == null || rst == "") { rst = '获取验证码成功! ret = ${ret?.toString()}, err = ${err?.toString()} '; } Logger.debug(rst); result = true; } }); } return Future.value(result); } /// /// 获取智联盟的短信验证码 /// static Future _getSMSDefault(final String phone, {SMSCodeType type = SMSCodeType.NORMAL}) async { bool rlt = false; try { String vCodeType = enumToString(type)?.toLowerCase(); if (EmptyUtil.isEmpty(vCodeType)) { vCodeType = enumToString(SMSCodeType.NORMAL).toLowerCase(); } var result = await NetUtil.post('/api/v1/sign/more_sms/captcha', method: NetMethod.POST, params: { 'mobile': phone, 'type': vCodeType }); if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) { // Fluttertoast.showToast(msg: result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]); Logger.debug(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]); rlt = true; } else { Fluttertoast.showToast(msg: result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]); } } catch (e, s) { Logger.error(e, s); } return rlt; } /// 询问验证码是否可以下发 static Future _getSMSStrategy(final String phone, {SMSCodeType type = SMSCodeType.NORMAL}) async { try { String vCodeType = enumToString(type)?.toLowerCase(); if (EmptyUtil.isEmpty(vCodeType)) { vCodeType = enumToString(SMSCodeType.NORMAL).toLowerCase(); } String url = type == SMSCodeType.AUTO ? '/api/v1/mob/sms/tmp/${vCodeType}?phone=${phone}' : '/api/v1/mob/sms/tmp/$vCodeType'; var result = await NetUtil.post(url, method: NetMethod.GET); if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) { return result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]; } } catch (e, s) { Logger.error(e, s); } return null; } static Future storeInvitedCode(String code) { return SharedPreferencesUtil.setStringValue('mobInvitedCode', code); } // 获取一件锁粉邀请码 static Future getInvitedCode() async { return SharedPreferencesUtil.getStringValue('mobInvitedCode'); } /// 隐私协议授权 static void submitPrivacyGrantResult(bool permission) { SharesdkPlugin.uploadPrivacyPermissionStatus(permission ? 1 : 0, (bool success) { if (success == true) { Logger.log('隐私协议授权提交结果: 成功'); } else { Logger.log('隐私协议授权提交结果: 失败'); } }); } /// /// 提交验证码 /// /// phone: 手机号码 /// code: 验证码 /// zoneCode: 区号 /// // static Future commitCode(final String phone, String code, {String zoneCode = '86'}) async { // bool result = false; // await Smssdk.commitCode(phone, zoneCode, code, (ret, err) { // if (err != null) { // // showAlert(err.toString(),context); // result = false; // } else { // // showAlert('提交验证码成功!',context); // result = true; // // _countMobSMS(phone, code, zoneCode: zoneCode); // } // }); // return Future.value(result); // } /// 统计MOB验证码提交 // static void _countMobSMS(final String phone, final String code, {String zoneCode = '86'}) async { // try { // NetUtil.post('/api/v1/funtions/mobsms', params: {'phone': phone, "code": code, 'zone': zoneCode}, showToast: false); // } catch (e, s) { // Logger.error(e, s); // } // } } enum SMSCodeType { // 普通验证码 NORMAL, // 登录 LOGIN, // 注册模版验证码 REGISTER, // 绑定支付宝验证码 BIND_ALIPAY, // 绑定手机号验证码 BIND_PHONE, // 取消绑定支付宝验证码 UNBIND_ALIPAY, // 取消绑定手机号 UNBIND_PHONE, // 后台自动判断登录还是注册 AUTO, }