随着Flutter逐渐的被越来越多的公司所采用,本文将演示如何将中国移动统一认证SDK接入到Flutter应用中。
?
目录
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
<style name="AuthPage" parent="@android:style/Theme.Holo.Light.NoActionBar">
<item name="android:background">@null</item>
<item name="android:colorBackground">@null</item>
<item name="android:windowIsTranslucent">true</item>
</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<MyHomePage> {
//调用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: <Widget>[
RaisedButton(
child: Text("一键登录"),
onPressed: () {
loginAuth();
},
),
],
),
),
);
}
}
3.1 真机调试
3.2 控制台日志
一定要按照文档将资源文件、权限、network_security_config以及授权页activity配置好。
程序员在编写代码的时候少不了和字符串以及“查询”打交道,两者的交集中有一个...
文章目录 1 标准化 2 归一化 3 正则化 4 离散化 5 白化 机器学习的本质是从数据...
再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有...
? 一、如何修改IP端口号以及发送的指令 ? 打开项目文件夹— src — com.example....
复制代码 代码如下: ?xml version="1.0" encoding="utf-8"? s:MXDataGridItemRen...
复制代码 代码如下: frameset cols="*,1280,*" frameborder="0" framespacing="0...
操作系统的安装看似神秘,但其实很简单。以下是成功安装 Linux 的步骤。 在 2021...
在以前的应用,大多是应用正向预搜索情况。也就是说,在查找内容的右面有特定的...
刚才运行了一段代码,来查看Request.ServerVariables里面有多少值,看了一下,共...
我的是: !DOCTYPE html 博客园: !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 ...