Flutter短信验证码自动填充插件sms_consent_for_otp_autofill的使用
Flutter短信验证码自动填充插件 sms_consent_for_otp_autofill
的使用
简介
sms_consent_for_otp_autofill
是一个用于自动填充OTP(一次性密码)的Flutter插件。它利用Android的SMS用户同意API来检索单条短信中的OTP,前提是用户授予了权限。该插件不需要在manifest中声明任何权限,并且仅适用于Android设备。iOS设备可以使用其他方式实现类似功能。
截图
使用步骤
1. 创建实例
你可以选择性地提供电话号码监听器和短信监听器:
import 'package:sms_consent_for_otp_autofill/sms_consent_for_otp_autofill.dart';
SmsConsentForOtpAutofill smsConsentForOtpAutoFill = SmsConsentForOtpAutofill(
phoneNumberListener: (number) {
// 当用户选择一个电话号码时执行的操作
},
smsListener: (otpcode) {
// 当用户接收到短信时执行的操作
}
);
2a. 请求用户的电话号码(可选)
smsConsentForOtpAutoFill.requestPhoneNumber();
获取到的电话号码可以通过以下方式访问:
String? selectedNumber = smsConsentForOtpAutoFill.selectedPhoneNumber;
2b. 请求接收短信(可选)
smsConsentForOtpAutoFill.requestSms();
// 或者指定发送方的电话号码
smsConsentForOtpAutoFill.requestSms(senderPhoneNumber: sender_number);
当用户点击“允许”并接收到短信后,可以通过以下方式访问:
String? receivedSms = smsConsentForOtpAutoFill.receivedSms;
3. 最后,销毁实例
smsConsentForOtpAutoFill.dispose();
注意事项
根据SMS用户同意API的要求,只有满足以下条件的短信才能被插件接收:
- 短信包含6到10位数字。
- 短信由不在用户联系人列表中的电话号码发送。
- 如果指定了发送方的电话号码,则短信必须由该号码发送。
示例代码
下面是一个完整的示例demo,展示了如何使用sms_consent_for_otp_autofill
插件来自动填充OTP:
import 'package:flutter/material.dart';
import 'package:otp_text_field/otp_field.dart';
import 'package:otp_text_field/style.dart';
import 'package:sms_consent_for_otp_autofill/sms_consent_for_otp_autofill.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late SmsConsentForOtpAutofill smsConsentForOtpAutoFill;
OtpFieldController otpbox = OtpFieldController();
String? phoneNumber;
bool startListen = false;
@override
void initState() {
super.initState();
smsConsentForOtpAutoFill = SmsConsentForOtpAutofill(
phoneNumberListener: (number) {
phoneNumber = number;
print("Selected phone number: $number");
},
smsListener: (otpcode) {
print("Received OTP code: $otpcode");
setState(() {
startListen = false;
});
otpbox.set(otpcode.split(""));
},
);
}
@override
void dispose() {
smsConsentForOtpAutoFill.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('SMS Consent for OTP AutoFill'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
const Text(
"Enter OTP Code",
style: TextStyle(fontSize: 20),
),
const SizedBox(height: 20),
OTPTextField(
controller: otpbox,
length: 6,
width: double.infinity,
fieldWidth: 50,
style: const TextStyle(fontSize: 17),
textFieldAlignment: MainAxisAlignment.spaceAround,
fieldStyle: FieldStyle.box,
onCompleted: (pin) {
print("Entered OTP Code: $pin");
},
),
const SizedBox(height: 30),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
MaterialButton(
color: Colors.red,
textColor: Colors.white,
child: Text(startListen ? 'Stop Listening' : 'Stopped'),
onPressed: () async {
smsConsentForOtpAutoFill.dispose();
setState(() {
startListen = false;
});
print("Stop Listening.........");
},
),
const SizedBox(width: 20),
MaterialButton(
color: Colors.green,
textColor: Colors.white,
child: Text(!startListen ? 'Start Listening' : 'Started'),
onPressed: () async {
smsConsentForOtpAutoFill.requestSms();
setState(() {
startListen = true;
});
print("Start Listening.........");
},
),
],
),
],
),
),
),
);
}
}
以上代码展示了一个简单的界面,用户可以选择开始或停止监听短信,并在接收到OTP后自动填充到输入框中。
更多关于Flutter短信验证码自动填充插件sms_consent_for_otp_autofill的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter短信验证码自动填充插件sms_consent_for_otp_autofill的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用sms_consent_for_otp_autofill
插件来实现短信验证码自动填充的示例代码。这个插件主要用于Android平台,帮助应用自动检测和填充通过短信收到的验证码。
首先,确保你的Flutter项目中已经添加了sms_consent_for_otp_autofill
依赖。在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
sms_consent_for_otp_autofill: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤来实现短信验证码的自动填充功能:
- 导入必要的包:
import 'package:flutter/material.dart';
import 'package:sms_consent_for_otp_autofill/sms_consent_for_otp_autofill.dart';
- 请求短信验证码权限:
在需要的地方(通常是用户点击“获取验证码”按钮时),请求短信读取权限。
void _requestSmsPermission() async {
SmsConsentStatus status = await SmsConsentForOtpAutofill.requestSmsRetrievalPermission();
if (status == SmsConsentStatus.granted) {
print("SMS retrieval permission granted.");
// 发送验证码请求到服务器
} else {
print("SMS retrieval permission denied.");
}
}
- 监听短信变化:
使用SmsListener
来监听短信的变化,并在接收到验证码时自动填充到相应的文本框中。
class _MyAppState extends State<MyApp> {
TextEditingController _otpController = TextEditingController();
@override
void initState() {
super.initState();
_startSmsListener();
}
@override
void dispose() {
_otpController.dispose();
SmsConsentForOtpAutofill.stopSmsListener();
super.dispose();
}
void _startSmsListener() {
SmsConsentForOtpAutofill.startSmsListener().listen((SmsMessage message) {
// 假设验证码是短信内容中的最后6位数字
RegExp exp = RegExp(r'\d{6}$');
Iterable<Match> matches = exp.allMatches(message.body ?? '');
if (matches.isNotEmpty) {
String otp = matches.first.group(0)!;
_otpController.value = TextEditingValue(
text: otp,
selection: TextSelection.collapsed(offset: otp.length),
);
}
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SMS OTP Autofill Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
controller: _otpController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: 'Enter OTP',
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _requestSmsPermission,
child: Text('Request OTP'),
),
],
),
),
),
);
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
在上面的代码中,我们首先请求短信读取权限,然后开始监听短信的变化。当接收到包含6位数字的短信时,我们自动将其填充到OTP文本框中。
注意:
- 在实际应用中,你可能需要根据短信格式调整正则表达式的匹配逻辑。
- 确保你的应用具有处理短信的权限,并在AndroidManifest.xml中声明必要的权限。
- 这个插件仅适用于Android平台,iOS平台有自己的自动填充机制,如TextContentType.oneTimeCode。
希望这个示例代码能帮助你理解如何在Flutter中使用sms_consent_for_otp_autofill
插件来实现短信验证码的自动填充功能。