Flutter一键登录插件flutter_one_pass的使用
Flutter一键登录插件flutter_one_pass的使用
flutter_one_pass
极验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 | 手机号码 |
验证通过之后,需要将processId
、accesscode
、phone
发送到后台进行验证。
详细文档
示例代码
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
更多关于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');
// 处理错误
}