随着Flutter逐渐的被越来越多的公司所采用,本文将演示如何将中国移动统一认证SDK接入到Flutter应用中。
目录
1.准备工作
2.开始接入
3.运行调试
4.注意事项
1.1 下载好统一认证SDK,这里使用的版本是quick_login_android_5.8.1
1.2 在移动开发平台申请好应用拿到appid、appkey
2.1 按照统一认证SDK接入文档配置好权限,READ_PHONE_STATE权限根据应用方需要选择是否添加,SDK不强制要求授权该权限。
2.2 添加好SDK所需的资源文件
2.3 manifest中配置好授权登录的Activity,这里可以指定授权页的主题为 NoActionBar
授权页style
2.4 按照文档要求添加network_security_config
2.5 将下载的jar文件添加工程中,并进行依赖。
2.6 MainActivity中初始化中国移动统一认证SDK并调用loginAuth授权方法
public class MainActivity extends FlutterActivity {
private AuthnHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MethodChannel(getFlutterView(),"TYRZ").setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
if(methodCall.method.equals("loginAuth")){
loginAuth(result);
}else{
Log.e("TYRZ","notImplemented");
result.notImplemented();
}
}
});
//创建AuthnHelper实例
mHelper= AuthnHelper.getInstance(this);
//打开SDK日志打印开关
AuthnHelper.setDebugMode(true);
//初始化授权页主题
mHelper.setAuthThemeConfig(new AuthThemeConfig.Builder().build());
GeneratedPluginRegistrant.registerWith(this);
}
/**
* 统一认证SDK授权方法调用
*/
private void loginAuth(MethodChannel.Result result){
//调用授权方法,这里要填写的appid、appkey为开发者在移动开发平台申请的appid、appkey
mHelper.loginAuth("30********73", "2DD524A94*************EA287B7CA0", new TokenListener() {
@Override
public void onGetTokenComplete(int i, JSONObject jsonObject) {
try {
String resultCode = jsonObject.optString("resultCode","没有返回码!");
Toast.makeText(MainActivity.this, resultCode, Toast.LENGTH_SHORT).show();
//将结果回传给flutter
result.success(resultCode);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}}
2.7 main.dart中调用loginAuth
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
//调用java方法
void loginAuth() async {
print("按钮点击!");
try {
String result = await MethodChannel("TYRZ").invokeMethod("loginAuth");
//打印统一认证回调的响应码
print("resultCode = " + result);
} catch (e) {
print(e);
}
}
//创建一个按钮,在点击按钮时调用统一认证的loginAuth方法拉起授权页。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RaisedButton(
child: Text("一键登录"),
onPressed: () {
loginAuth();
},
),
],
),
),
);
}
}
3.1 真机调试
3.2 控制台日志
一定要按照文档将资源文件、权限、network_security_config以及授权页activity配置好。