Flutter一键登录插件flutter_one_pass的使用

Flutter一键登录插件flutter_one_pass的使用

flutter_one_pass

Pub

极验OnePass插件

入门指南

集成极验OnePass SDK,支持 Android 和 iOS。

集成

pubspec.yaml文件中添加依赖:

dependencies:
  flutter_one_pass: ^latest version

Android端

无需任何操作。

iOS端

无需任何操作。

使用文档

Android

导入包

import 'package:flutter_one_pass/flutter_one_pass.dart' as flutterOnePass;

初始化SDK

bool status = await flutterOnePass.init(appId: "your appId");

注意:务必在页面销毁的时候释放SDK引用

bool status = await flutterOnePass.destroy();

验证手机号码

flutterOnePass.checkMobile(phone: phone, cacheNumber: true);

监听验证结果

[@override](/user/override)
void initState() {
  super.initState();
  flutterOnePass.response.listen((reponse) {
    flutterOnePass.CheckResultResponse res = response as flutterOnePass.CheckResultResponse;
  });
}
其他接口
  • 获取最近缓存的一条手机号码
String number = await flutterOnePass.getCachedNumber;
  • 获取匹配的手机号码
List<dynamic> numbers = await flutterOnePass.getCachedNumbers(number: "search number");

iOS

导入包

import 'package:flutter_one_pass/flutter_one_pass.dart' as flutterOnePass;

初始化SDK

flutterOnePass.setup(appId: "your appId", enableCachePhoneNumber: true, timeout: 10.0);

验证手机号码

bool status = flutterOnePass.checkMobile(phone: phone);

监听验证结果

[@override](/user/override)
void initState() {
  super.initState();
  flutterOnePass.response.listen((reponse) {
    flutterOnePass.CheckResultResponse res = response as flutterOnePass.CheckResultResponse;
  });
}
其他接口
  • 获取最近缓存的一条手机号码
String number = await flutterOnePass.getCachedNumber;
  • 获取缓存的手机号码列表
List<dynamic> numbers = await flutterOnePass.getIosCachedNumbers;

验证结果字典

参数 参数类型 描述
errorCode Int 错误码(为0表示验证通过,其他表示验证不通过)
errorInfo String 错误描述
processId String processId
accesscode String accesscode
phone String 手机号码

验证通过之后,需要将processIdaccesscodephone发送到后台进行验证。

详细文档

文档地址


示例代码

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_one_pass/flutter_one_pass.dart' as flutterOnePass;

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  final TextEditingController textEditingController = TextEditingController();

  String resData = "";

  [@override](/user/override)
  void initState() {
    super.initState();

    if (Platform.isIOS) {
      flutterOnePass.setup(appId: "your appId", enableCachePhoneNumber: true, timeout: 10.0);
    }

    /// 添加监听
    flutterOnePass.response.listen((response) {
      flutterOnePass.CheckResultResponse res = response as flutterOnePass.CheckResultResponse;
      print(res.errorCode);
      print(res.errorInfo);
      print(res.accesscode);
      print(res.processId);
      print(res.phone);

      Map<String, dynamic> data = {
        "errorCode": res.errorCode,
        "errorInfo": res.errorInfo,
        "accesscode": res.accesscode,
        "process_id": res.processId,
        "phone": res.phone
      };

      setState(() {
        resData = data.toString();
      });
    });
  }

  [@override](/user/override)
  void dispose() {
    super.dispose();

    if (Platform.isAndroid) {
      flutterOnePass.destroy();
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FlutterOnePass Example'),
        ),
        body: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            TextField(
              controller: textEditingController,
              decoration: InputDecoration(
                hintText: "请填写手机号码",
                contentPadding: EdgeInsets.symmetric(
                  horizontal: 10
                )
              )
            ),
            ElevatedButton(
              child: Text("初始化(仅限于Android端)"),
              onPressed: () async {
                if (Platform.isIOS) {
                  print(true);
                  return;
                };

                bool status = await flutterOnePass.init(appId: "your appId");
                print(status);
              },
            ),

            ElevatedButton(
              child: Text("获取最近一条缓存的手机号码"),
              onPressed: () async {
                String number = await flutterOnePass.getCachedNumber;
                print(number);
              },
            ),

            ElevatedButton(
              child: Text("获取匹配的手机号码"),
              onPressed: () async {
                if (Platform.isIOS) {
                  List<dynamic> numbers = await flutterOnePass.getIosCachedNumbers;
                  print(numbers);
                  return;
                }
                List<dynamic> numbers = await flutterOnePass.getCachedNumbers(number: "search number");
                print(numbers);
              },
            ),

            ElevatedButton(
              child: Text("销毁所有引用"),
              onPressed: () async {
                bool status = await flutterOnePass.destroy();
              },
            ),

            ElevatedButton(
              child: Text("验证手机号"),
              onPressed: () async {
                String phone = textEditingController.text;
                if (Platform.isAndroid) {
                  /// 验证手机号之前必须先初始化sdk
                  /// flutterOnePass.init()
                  flutterOnePass.checkMobile(phone: phone, cacheNumber: true);
                } else {
                  /// ios端不需要初始化sdk,直接调用 setup 即可
                  flutterOnePass.checkMobile(phone: phone);
                }
              },
            ),

            Container(
              margin: EdgeInsets.only(
                top: 10
              ),
              alignment: Alignment.centerLeft,
              padding: EdgeInsets.all(10),
              color: Color(0xfff1f1f1),
              child: SelectableText(
                resData.toString(),
                style: TextStyle(
                  fontSize: 12,
                  color: Color(0xff666666)
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

更多关于Flutter一键登录插件flutter_one_pass的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter一键登录插件flutter_one_pass的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_one_pass 是一个用于在 Flutter 应用中实现一键登录功能的插件。它通常与第三方服务(如阿里云、腾讯云等)集成,用于快速验证用户手机号并登录。

以下是使用 flutter_one_pass 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_one_pass 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_one_pass: ^版本号  # 请替换为最新版本号

然后运行 flutter pub get 来获取依赖。

2. 配置 Android 和 iOS 项目

Android 配置

android/app/build.gradle 文件中,确保 minSdkVersion 至少为 16:

defaultConfig {
    minSdkVersion 16
    ...
}

iOS 配置

ios/Podfile 文件中,确保 platform :ios 至少为 9.0:

platform :ios, '9.0'

然后在 Info.plist 文件中添加以下键值对,以允许网络请求:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

3. 初始化插件

main.dart 文件中初始化 flutter_one_pass 插件:

import 'package:flutter_one_pass/flutter_one_pass.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 初始化插件
    FlutterOnePass.init("your_app_key");  // 替换为你的 AppKey
    return MaterialApp(
      title: 'Flutter One Pass Demo',
      home: HomePage(),
    );
  }
}

4. 实现一键登录

在你的登录页面中,调用 FlutterOnePass.login 方法来实现一键登录:

import 'package:flutter/material.dart';
import 'package:flutter_one_pass/flutter_one_pass.dart';

class HomePage extends StatelessWidget {
  Future<void> _onePassLogin() async {
    try {
      final result = await FlutterOnePass.login();
      print('Login success: $result');
      // 处理登录成功后的逻辑
    } catch (e) {
      print('Login failed: $e');
      // 处理登录失败的逻辑
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter One Pass Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _onePassLogin,
          child: Text('一键登录'),
        ),
      ),
    );
  }
}

5. 处理登录结果

FlutterOnePass.login 方法会返回一个包含用户手机号等信息的 Map,你可以根据返回的数据进行后续处理,例如:

final result = await FlutterOnePass.login();
String phoneNumber = result['phoneNumber'];
// 使用手机号进行登录或其他操作

6. 处理错误

在登录过程中可能会遇到各种错误,例如网络问题、用户取消等。你可以通过 try-catch 块来捕获并处理这些错误:

try {
  final result = await FlutterOnePass.login();
  print('Login success: $result');
} catch (e) {
  print('Login failed: $e');
  // 处理错误
}
回到顶部