Flutter短信验证码自动填充插件otp_autofill_sms的使用
Flutter短信验证码自动填充插件otp_autofill_sms的使用
otp_autofill_sms
是一个专为Android应用设计的Flutter插件,用于简化一次性密码(OTP)的自动填充。
此插件仅适用于Android平台,因为iOS设备可以原生处理OTP自动填充。对于iOS用户,系统内置了OTP自动填充功能。而对于Android用户,该插件通过管理OTP自动填充,无需请求SMS读取权限,从而提高了用户体验。
特性
- 自动OTP检测:自动捕获并填充通过短信发送的一次性密码,增强用户体验。
- 无需SMS权限:利用Google的SMS用户同意API,在不需要显式SMS读取权限的情况下运行。
- 简单集成:在Flutter项目中轻松设置和集成。
截图
默认界面 | OTP自动填充 |
---|---|
工作原理
该插件利用Google的SMS Retriever API自动检测OTP。为了确保正确检测,短信必须遵循特定的格式规则:
短信格式指南
- 长度:短信应不超过140字节。
- 内容:消息必须包含一个一次性验证码。
- 结束字符串:消息应以11个字符的哈希字符串结尾,用于标识您的应用。
示例短信格式
你的ExampleApp验证码是:915456 FA+9qCVSz
务必为应用的发布版和调试版生成签名代码,并将其附加到您的消息中。
安装
要将otp_autofill_sms
添加到您的Flutter项目,请按以下步骤操作:
-
添加依赖:在
pubspec.yaml
文件中添加插件:dependencies: otp_autofill_sms: ^1.0.0
-
安装包:运行
flutter pub get
以获取包。 -
Android配置:请按照以下设置说明配置您的Android项目。
设置说明
-
Flutter集成:在Dart代码中导入并初始化插件:
import 'package:otp_autofill_sms/otp_autofill_sms.dart';
-
基本使用:
// 获取应用签名代码。 Future<void> _getSignatureCode() async { String? signature = await OtpAutofillSms.getAppSignature(); print("签名: $signature"); } // 开始监听短信 void _startListeningSms() { OtpAutofillSms.startListeningSms().then((message) { setState(() { print("收到的消息: $message"); }); }); }
贡献
欢迎贡献!如果您发现任何问题或有改进建议,请提交拉取请求或在otp_autofill_sms仓库上创建一个issue。
完整示例代码
以下是一个完整的示例代码,展示了如何在Flutter项目中使用otp_autofill_sms
插件。
import 'package:flutter/material.dart';
import 'package:otp_autofill_sms/otp_autofill_sms.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
String? _signature;
String? _receivedMessage;
[@override](/user/override)
void initState() {
super.initState();
_getSignatureCode();
_startListeningSms();
}
// 获取应用签名代码
Future<void> _getSignatureCode() async {
String? signature = await OtpAutofillSms.getAppSignature();
setState(() {
_signature = signature;
});
print("签名: $_signature");
}
// 开始监听短信
void _startListeningSms() {
OtpAutofillSms.startListeningSms().then((message) {
setState(() {
_receivedMessage = message;
print("收到的消息: $_receivedMessage");
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('OTP自动填充示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('签名代码: $_signature'),
SizedBox(height: 20),
Text('收到的消息: $_receivedMessage'),
],
),
),
);
}
}
更多关于Flutter短信验证码自动填充插件otp_autofill_sms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter短信验证码自动填充插件otp_autofill_sms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用otp_autofill_sms
插件来实现短信验证码自动填充的示例代码。这个插件允许你自动从接收到的短信中提取一次性密码(OTP)并填充到指定的文本框中。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加otp_autofill_sms
依赖:
dependencies:
flutter:
sdk: flutter
otp_autofill_sms: ^x.y.z # 请将x.y.z替换为最新版本号
2. 导入插件
在你的Dart文件中(通常是main.dart
或你的主页面文件),导入otp_autofill_sms
插件:
import 'package:otp_autofill_sms/otp_autofill_sms.dart';
3. 配置TextFormField
使用TextFormField
来接收OTP,并设置textInputAction
和keyboardType
为适当的值。同时,使用otpController
来监听OTP的变化。
import 'package:flutter/material.dart';
import 'package:otp_autofill_sms/otp_autofill_sms.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('OTP Autofill SMS Example'),
),
body: OTPExample(),
),
);
}
}
class OTPExample extends StatefulWidget {
@override
_OTPExampleState createState() => _OTPExampleState();
}
class _OTPExampleState extends State<OTPExample> {
final TextEditingController _controller = TextEditingController();
String? otp;
@override
void initState() {
super.initState();
// 初始化OTP监听器
OtpAutofillSms.addListener(onOtpReceived: (String receivedOtp) {
setState(() {
otp = receivedOtp;
_controller.value = TextEditingValue(
text: receivedOtp,
selection: TextSelection.fromPosition(
TextPosition(offset: receivedOtp.length),
),
);
});
});
}
@override
void dispose() {
// 移除OTP监听器
OtpAutofillSms.removeListener();
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Enter OTP:', style: TextStyle(fontSize: 18)),
SizedBox(height: 8),
TextFormField(
controller: _controller,
maxLength: 6, // 假设OTP长度为6
keyboardType: TextInputType.number,
textInputAction: TextInputAction.done,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'OTP',
),
),
SizedBox(height: 16),
otp != null
? Text('OTP Automatically Filled: $otp', style: TextStyle(color: Colors.green))
: Text(''),
],
),
);
}
}
4. 权限配置
确保在AndroidManifest.xml
中添加接收短信的权限(如果尚未添加):
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
5. 运行应用
完成上述步骤后,你可以运行你的Flutter应用。当接收到包含OTP的短信时,插件将自动提取OTP并填充到指定的TextFormField
中。
这个示例代码展示了如何使用otp_autofill_sms
插件来自动填充短信验证码。根据项目的具体需求,你可能需要进行一些调整,比如处理不同的OTP长度或添加更多的UI元素。