小言_互联网的博客

中国移动一键登录 —— Flutter(安卓)

1030人阅读  评论(0)

随着Flutter逐渐的被越来越多的公司所采用,本文将演示如何将中国移动统一认证SDK接入到Flutter应用中。

 

目录

1.准备工作

2.开始接入

3.运行调试

4.注意事项


1.准备工作

1.1 下载好统一认证SDK,这里使用的版本是quick_login_android_5.8.1

1.2 在移动开发平台申请好应用拿到appid、appkey

2.开始接入

2.1 按照统一认证SDK接入文档配置好权限,READ_PHONE_STATE权限根据应用方需要选择是否添加,SDK不强制要求授权该权限。

2.2 添加好SDK所需的资源文件

2.3 manifest中配置好授权登录的Activity,这里可以指定授权页的主题为 NoActionBar

授权页style


  
  1. <style name="AuthPage" parent="@android:style/Theme.Holo.Light.NoActionBar">
  2. <item name="android:background">@null </item>
  3. <item name="android:colorBackground">@null </item>
  4. <item name="android:windowIsTranslucent">true </item>
  5. </style>

2.4 按照文档要求添加network_security_config

2.5 将下载的jar文件添加工程中,并进行依赖。

2.6 MainActivity中初始化中国移动统一认证SDK并调用loginAuth授权方法


  
  1. public class MainActivity extends FlutterActivity {
  2. private AuthnHelper mHelper;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. new MethodChannel(getFlutterView(), "TYRZ").setMethodCallHandler( new MethodChannel.MethodCallHandler() {
  7. @Override
  8. public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
  9. if(methodCall.method.equals( "loginAuth")){
  10. loginAuth(result);
  11. } else{
  12. Log.e( "TYRZ", "notImplemented");
  13. result.notImplemented();
  14. }
  15. }
  16. });
  17. //创建AuthnHelper实例
  18. mHelper= AuthnHelper.getInstance( this);
  19. //打开SDK日志打印开关
  20. AuthnHelper.setDebugMode( true);
  21. //初始化授权页主题
  22. mHelper.setAuthThemeConfig( new AuthThemeConfig.Builder().build());
  23. GeneratedPluginRegistrant.registerWith( this);
  24. }
  25. /**
  26. * 统一认证SDK授权方法调用
  27. */
  28. private void loginAuth(MethodChannel.Result result){
  29. //调用授权方法,这里要填写的appid、appkey为开发者在移动开发平台申请的appid、appkey
  30. mHelper.loginAuth( "30********73", "2DD524A94*************EA287B7CA0", new TokenListener() {
  31. @Override
  32. public void onGetTokenComplete(int i, JSONObject jsonObject) {
  33. try {
  34. String resultCode = jsonObject.optString( "resultCode", "没有返回码!");
  35. Toast.makeText(MainActivity. this, resultCode, Toast.LENGTH_SHORT).show();
  36. //将结果回传给flutter
  37. result.success(resultCode);
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. });
  43. }}

2.7 main.dart中调用loginAuth


  
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. void main() => runApp( MyApp());
  4. class MyApp extends StatelessWidget {
  5. @override
  6. Widget build( BuildContext context) {
  7. return MaterialApp(
  8. title: 'Flutter Demo',
  9. theme: ThemeData(
  10. primarySwatch: Colors.blue,
  11. ),
  12. home: MyHomePage(title: 'Flutter Demo Home Page'),
  13. );
  14. }
  15. }
  16. class MyHomePage extends StatefulWidget {
  17. MyHomePage({ Key key, this.title}) : super(key: key);
  18. final String title;
  19. @override
  20. _MyHomePageState createState() => _MyHomePageState();
  21. }
  22. class _MyHomePageState extends State<MyHomePage> {
  23. //调用java方法
  24. void loginAuth() async {
  25. print( "按钮点击!");
  26. try {
  27. String result = await MethodChannel( "TYRZ").invokeMethod( "loginAuth");
  28. //打印统一认证回调的响应码
  29. print( "resultCode = " + result);
  30. } catch (e) {
  31. print(e);
  32. }
  33. }
  34. //创建一个按钮,在点击按钮时调用统一认证的loginAuth方法拉起授权页。
  35. @override
  36. Widget build( BuildContext context) {
  37. return Scaffold(
  38. appBar: AppBar(
  39. title: Text(widget.title),
  40. ),
  41. body: Center(
  42. child: Column(
  43. mainAxisAlignment: MainAxisAlignment.center,
  44. children: < Widget>[
  45. RaisedButton(
  46. child: Text( "一键登录"),
  47. onPressed: () {
  48. loginAuth();
  49. },
  50. ),
  51. ],
  52. ),
  53. ),
  54. );
  55. }
  56. }

3.运行调试

3.1 真机调试

3.2 控制台日志

4.注意事项

一定要按照文档将资源文件、权限、network_security_config以及授权页activity配置好。


转载:https://blog.csdn.net/sumsear/article/details/115680451
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场