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

随着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所需的资源文件

中国移动一键登录 —— Flutter(安卓)_第1张图片

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

中国移动一键登录 —— Flutter(安卓)_第2张图片

授权页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.运行调试

3.1 真机调试

3.2 控制台日志

4.注意事项

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

你可能感兴趣的:(统一认证,android,flutter)