Flutter短信同意插件android_sms_consent的使用
Flutter短信同意插件 android_sms_consent
的使用
android_sms_consent
是一个用于在 Android 设备上执行一键短信验证的 Flutter 插件。该插件利用 SMS User Consent API 来简化短信验证码的获取过程。
使用条件
为了触发该 API,以下条件必须满足:
- 短信中包含一个 4-10 个字符的字母数字字符串,并且至少包含一个数字。
- 短信是由不在用户联系人列表中的电话号码发送的。
- 如果指定了发送者的电话号码,则短信必须由该号码发送。
示例代码
下面是一个完整的示例应用,演示了如何在 Flutter 中使用 android_sms_consent
插件来监听和处理短信验证码。
主要步骤
- 初始化
AndroidSmsConsent
对象。 - 设置回调函数以处理不同的事件(如允许、拒绝或未匹配模式)。
- 启动监听器。
- 在适当的时候停止监听器。
// Copyright (c) 2021 The Khalti Authors. All rights reserved.
import 'package:android_sms_consent/android_sms_consent.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late final AndroidSmsConsent _androidSmsConsent;
ScaffoldMessengerState? _scaffoldMessenger;
String _sms = '';
[@override](/user/override)
void initState() {
super.initState();
// 初始化 AndroidSmsConsent 实例
_androidSmsConsent = AndroidSmsConsent(
pattern: r'\d{4,}', // 匹配至少4位数的数字串
onAllowed: (sms) { // 当用户允许读取短信时调用
_sms = sms;
setState(() {});
},
onDenied: () { // 当用户拒绝读取短信时调用
_scaffoldMessenger?.showSnackBar(
const SnackBar(content: Text('User denied!')),
);
},
onPatternUnmatched: () { // 当没有找到符合模式的短信时调用
_scaffoldMessenger?.showSnackBar(
const SnackBar(
content: Text('OTP not found! Please try entering OTP manually.'),
),
);
},
)
..start('TestOne') // 开始监听来自 'TestOne' 的短信
..start('TestTwo'); // 可选:开始监听来自 'TestTwo' 的短信
}
[@override](/user/override)
void dispose() {
_androidSmsConsent.stop(); // 停止监听
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Android SMS Consent'),
),
body: Builder(
builder: (context) {
_scaffoldMessenger ??= ScaffoldMessenger.of(context);
return Center(
child: Text(
'SMS: $_sms', // 显示接收到的短信内容
style: Theme.of(context).textTheme.bodySmall,
),
);
},
),
),
);
}
}
更多关于Flutter短信同意插件android_sms_consent的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter短信同意插件android_sms_consent的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成android_sms_consent
插件以处理短信验证同意的功能,可以遵循以下步骤。这个插件主要用于在Android设备上请求和验证用户的短信权限,常见于一次性密码(OTP)验证的场景。
首先,确保你的Flutter环境已经正确设置,并且你的项目已经初始化。
1. 添加依赖
在你的pubspec.yaml
文件中添加android_sms_consent
依赖:
dependencies:
flutter:
sdk: flutter
android_sms_consent: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置AndroidManifest.xml
在android/app/src/main/AndroidManifest.xml
中,确保你添加了必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<!-- 其他配置 -->
</manifest>
注意:从Android 10(API级别29)开始,直接读取短信内容需要动态请求权限,而android_sms_consent
插件会帮助你处理这部分逻辑。
3. 使用插件
在你的Flutter代码中,你可以按照以下方式使用android_sms_consent
插件:
import 'package:flutter/material.dart';
import 'package:android_sms_consent/android_sms_consent.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? otpCode;
void _requestSmsPermission() async {
try {
// 自定义你的应用程序哈希值和应用名称
final result = await SmsRetrieverHelper.startSmsRetriever(
appName: "Your App Name",
appHash: "your-app-hash", // 你需要通过`keytool`命令生成应用的SHA-256哈希值
phoneNumber: "+1234567890", // 用户的手机号码
timeoutDuration: Duration(minutes: 5),
callback: (SmsMessage message) {
setState(() {
otpCode = message.body;
});
print("Received OTP: $otpCode");
},
);
if (result == SmsRetrieverHelper.SUCCESS) {
print("SMS Retriever API started successfully.");
} else {
print("Failed to start SMS Retriever API.");
}
} catch (e) {
print("Error: $e");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SMS Consent Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('OTP Code: ${otpCode ?? "N/A"}'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _requestSmsPermission,
child: Text('Request SMS Permission'),
),
],
),
),
),
);
}
}
注意事项
-
应用哈希值:你需要使用
keytool
命令生成你的应用的SHA-256哈希值,并将其替换到appHash
参数中。这个哈希值是基于你的应用的签名密钥生成的。 -
电话号码:在实际应用中,电话号码通常不会硬编码在代码中,而是从用户输入或其他安全的方式获取。
-
权限处理:从Android 10开始,读取短信内容需要动态请求
READ_SMS
权限。android_sms_consent
插件在内部处理了这个逻辑,但你可能需要在UI上提示用户授予权限。 -
测试:在测试时,确保你使用的是真实设备或模拟器,并且模拟发送短信以验证功能。
通过上述步骤,你应该能够在Flutter应用中成功集成并使用android_sms_consent
插件来处理短信验证同意的功能。