Skip to content

fluttercandies/flutter_ali_auth

Repository files navigation

flutter_ali_auth

Language: 中文

基于阿里云一键登录的 Flutter集成的SDK插件

阿里云一键登录安卓接入文档: Android_V2.12-1.9

阿里云一键登录IOS接入文档: iOS_V2.12.9

目录

效果图 📷

IOS

全屏 底部弹窗 中间弹窗

Android

全屏 底部弹窗 中间弹窗

准备工作 🔧

请登录阿里云控制台号码认证服务 分别添IOS和Android的认证方案,从而获取到SDK的秘钥。 注意:Ios只需要输入绑定Bundle name即可,Android则需要包名和和签名。如何获取App的签名

先了解原生SDK代码调用顺序 🔗

/*
* 1.初始化获取Token实例
*/
TokenResultListener mTokenListener = new TokenResultListener();

/*
* 2.初始化SDK实例
*/
mAlicomAuthHelper = PhoneNumberAuthHelper.getInstance(context, mTokenListener);

/*
* 3.设置SDK密钥
*/
mAlicomAuthHelper.setAuthSDKInfo();

/*
* 4.检测终端⽹络环境是否⽀持⼀键登录或者号码认证,根据回调结果确定是否可以使⽤⼀键登录功能
*/
mAlicomAuthHelper.checkEnvAvailable(PhoneNumberAuthHelper#SERVICE_TYPE_LOGIN);

/*
* 5.若步骤4返回true,则根据业务情况,调⽤预取号或者⼀键登录接⼝
*   详⻅Demo接⼊⼯程
*/
mAlicomAuthHelper.getLoginToken(context, 5000);

插件使用 ☄️

1. 添加监听

/// 传入回调函数 onEvent,onError(可选),onDone(可选)
AliAuthClient.onListen(_onEvent, onError: _onError);

onEvent中监听回调并且自行进行判断

void _onEvent(dynamic event) async {
    final responseModel = AuthResponseModel.fromJson(Map.from(event));
    if (responseModel.resultCode == PNSCodeSuccess &&
        responseModel.token != null) {
      setState(() {
        _token = responseModel.token;
      });
    } else if (responseModel.resultCode == PNSCodeDecodeAppInfoFailed) {
      print(responseModel.msg)
    } else {
      print(responseModel.msg)
      print('code:${responseModel.resultCode}');
    }
}

回调实例AuthResponseModel 在原生中已经对事件响应码进行了包装,消息成员如下

参数名 类型 描述
resultCode String SDK返回码,600000表示操作成功(初始化/检查环境/预取号/登录成功),详情参考官网的SDK返回码
requestId String SDK请求ID,如出现无法解决问题时候可以根据Id创建工单咨询
msg String SDK返回码描述,详情参考官网的SDK返回码
token String 授权页面点击登录按钮成功 认证后resultCode为60000时,会返回认证的Token,此时SDK提供的服务到此结束,可以拿Token到服务端进行自行判断登录认证
innerCode String 如果初始化认证SDK出现问题,回调信息一般会携带运行商的错误代码和错误信息,详情参考运营商SDK错误码
innerMsg String 运行商认证时候出现的错误信息

2.初始化SDK (initSdk)

/// 初始化前需要须对插件进行监听
await AliAuthClient.initSdk(
authConfig: const AuthConfig(),
);

需要通过 AuthConfig 来配置安卓和IOS端的秘钥,以及UI的配置 AuthUIConfig,成员如下

参数名 类型 描述
iosSdk String IOS秘钥
androidSdk String Android秘钥
enableLog bool 是否打印日志
authUIStyle Enum fullScreen(全屏) bottomSheet(底部弹窗) alert(中间弹窗) 目前暂时配置了三种常用竖屏的形式,更多形式参考官方文档 后续将陆续支持
authUIConfig AuthUIConfig UI配置类

AuthUIConfig为UI的配置类型,分为全屏UI配置 FullScreenUIConfig 和弹窗UI配置 AlertUIConfig

FullScreenUIConfig 成员如下

参数名 类型 描述
navConfig NavConfig 导航栏UI配置
backgroundColor String 十六进制背景颜色,eg: "#ffffff"
backgroundImage String 本地的背景图片,eg: "/assets/image/background.png"
prefersStatusBarHidden Boolean 状态栏是否隐藏,默认显示
logoConfig LogoConfig LogoUI配置类
sloganConfig SloganConfig SloganConfig配置类
phoneNumberConfig PhoneNumberConfig PhoneNumberConfig配置类
loginButtonConfig LoginButtonConfig LoginButtonConfig配置类
changeButtonConfig ChangeButtonConfig ChangeButtonConfig配置类
checkBoxConfig CheckBoxConfig CheckBoxConfig配置类
privacyConfig PrivacyConfig PrivacyConfig配置,自定义协议(目前只支持三个)

AlertUIConfig 成员如下

参数名 类型 描述
alertTitleBarConfig AlertTitleBarConfig 弹窗ActionBar的UI配置
alertContentViewColor String 十六进制背景颜色,eg: "#ffffff"
alertBlurViewColor String 弹窗蒙层的颜色,安卓暂时不支持
alertBlurViewAlpha double 弹窗蒙层的透明度,安卓暂时不支持
alertBorderRadius double 弹窗圆角,安卓暂时不支持
alertWindowWidth double 弹窗宽度
alertWindowHeight double 弹窗高度
logoConfig LogoConfig LogoUI配置类
sloganConfig SloganConfig SloganConfig配置类
phoneNumberConfig PhoneNumberConfig PhoneNumberConfig配置类
loginButtonConfig LoginButtonConfig LoginButtonConfig配置类
changeButtonConfig ChangeButtonConfig ChangeButtonConfig配置类
checkBoxConfig CheckBoxConfig CheckBoxConfig配置类,弹窗默认隐藏checkbox
privacyConfig PrivacyConfig PrivacyConfig配置,自定义协议(目前只支持三个)

3.一键登录获取Token (login)

调用该接口首先会弹起授权页,点击授权页的登录按钮获取Token,可选参数为Timeout,默认5s

调用此接口后会通过之前注册的监听中回调信息

await AliAuthClient.login();

4.检查认证环境 (checkVerifyEnable)

一般不需要主动调用检查,因为插件本身在初始化成功后马上进行检查环境(checkVerifyEnable)和加速一键登录授权页弹起(accelerateLoginPage),防止等待弹起授权页时间过长,这个逻辑与原生SDK一样,建议此方法在debug或者自行判断使用

调用此接口后会通过之前注册的监听中回调信息

await AliAuthClient.checkVerifyEnable();

5.一键登录预取号 (accelerateLoginPage)

一般不需要主动调用检查,因为插件本身在初始化成功后马上进行检查环境(checkVerifyEnable)和加速一键登录授权页弹起(accelerateLoginPage),防止等待弹起授权页时间过长,这个逻辑与原生SDK一样,建议此方法在debug或者自行判断使用

  • 在不是一进app就需要登录的场景 建议调用此接口 加速拉起一键登录页面
  • 等到用户点击登录的时候 授权页可以秒拉
  • 预取号的成功与否不影响一键登录功能,所以不需要等待预取号的返回。
await AliAuthClient.accelerateLoginPage();

6.移除登录事件 (removeListener)

移除授权页的事件监听

await AliAuthClient.removeListener();

7.其他方法

下面的方法与官网接入文档一致,可以根据个人开发情况进行使用

/// 关闭授权页loading
await AliAuthClient.hideLoginLoading();

/// 退出授权认证页
await AliAuthClient.quitLoginPage();

插件须知 ⚠️

关于权限

  1. 安卓权限,本插件已经添加必要的权限支持:
<uses-permission android:name="android.permission.INTERNET" /> <!-- 网络访问 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 检查wifi网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 检查网络状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 切换网络通道 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 本地信息缓存 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 开关Wi-Fi状态,解决中国内地机型移动网络权限问题需要 -->

已经添加增加usesCleartextTraffic配置

 <application
        android:name=".DemoApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">

目前中国移动提供的个别接口为HTTP请求,对于全局禁用HTTP的项目,需要设置HTTP白名单。以下为运营商HTTP接口域名:onekey.cmpassport.com,enrichgw.10010.com, 详情可参见官方文档

2.苹果开发

  • 插件已经集成主库ATAuthSDK.framework,不需要添加-ObjC

  • 开发工具建议使用Xcode 11及以上。

  • 支持iOS 10及以上系统。

最后,有用请🌟~