Flutter SMS用户同意管理插件sms_user_consent_manager的使用
Flutter SMS用户同意管理插件sms_user_consent_manager的使用
请求用户的手机号(支持双卡)和/或同意读取短信,而无需添加任何权限,使用Android的SMS用户同意API。 此包实际上是SMS用户同意API,但将通道类型从私有更改为公共以处理通道。
截图
使用步骤
1. 创建实例,可选地提供电话号码监听器和短信监听器
SmsUserConsent smsUserConsent = SmsUserConsent(
// 可选地,当用户选择一个号码时做一些事情。
// 您甚至可以稍后通过调用smsUserConsent.updatePhoneNumberListener(updatedListener)来更新此监听器
phoneNumberListener: () {},
// 可选地,当用户收到短信时做一些事情。
// 您甚至可以稍后通过调用smsUserConsent.updateSmsListener(updatedListener)来更新此监听器
smsListener: () {}
);
2a. 可选:请求用户的手机号码
smsUserConsent.requestPhoneNumber();
一旦用户选择了手机号码,可以通过以下方式访问:
smsUserConsent.selectedPhoneNumber;
2b. 可选:请求接收短信
smsUserConsent.requestSms();
或者您可以指定要捕获短信的发送者手机号码:
smsUserConsent.requestSms(senderPhoneNumber: sender_number);
一旦用户收到短信并点击了“允许”,可以通过以下方式访问:
smsUserConsent.receivedSms;
3. 最后,释放实例
smsUserConsent.dispose();
注意事项
根据SMS用户同意API的要求,消息将仅由插件接收如果满足以下条件:
- 消息包含一个4到10个字符的字母数字字符串,并至少包含一个数字。
- 消息是由不在用户联系人中的电话号码发送的。
- 如果指定了发送者的电话号码,消息是由该号码发送的。
贡献
- 发现了一个错误或有改进插件的想法?发送PR。
- 发现此插件很有帮助并想感谢我?我爱 ☕。
- 想雇佣我进行项目合作?让我们在LinkedIn上聊聊。
许可证
MIT © 2020 Harsh P
完整示例代码
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:sms_user_consent/sms_user_consent.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late SmsUserConsent smsUserConsent;
[@override](/user/override)
void initState() {
super.initState();
smsUserConsent = SmsUserConsent(
phoneNumberListener: () => setState(() {}),
smsListener: () => setState(() {}));
}
[@override](/user/override)
void dispose() {
smsUserConsent.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('sms_user_consent Example'),
),
body: Center(
child: SizedBox(
width: 250,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('要检索短信,请确保以下条件:'),
SizedBox(height: 8.0),
Text('- 消息包含一个4到10个字符的字母数字字符串,并至少包含一个数字。'),
Text('- 消息是由不在用户联系人中的电话号码发送的。'),
Text('- 如果指定了发送者的电话号码,消息是由该号码发送的。'),
SizedBox(height: 16.0),
Text('点击FABs请求手机号码和短信', style: TextStyle(fontWeight: FontWeight.bold)),
SizedBox(height: 16.0),
Text('已选择的手机号码: ${smsUserConsent.selectedPhoneNumber}'),
SizedBox(height: 8.0),
Text('接收到的短信: ${smsUserConsent.receivedSms}')
],
),
),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
child: Icon(Icons.phone_android),
onPressed: () => smsUserConsent.requestPhoneNumber(),
),
SizedBox(height: 16.0),
Builder(builder: (context) => FloatingActionButton(
child: Icon(Icons.sms),
onPressed: () {
// 调用您的服务器获取短信,然后
// requestOtp();
smsUserConsent.requestSms();
print('正在监听短信...');
}
))
],
)
),
);
}
}
更多关于Flutter SMS用户同意管理插件sms_user_consent_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter SMS用户同意管理插件sms_user_consent_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,sms_user_consent_manager
是一个用于管理用户同意读取短信的插件。它可以帮助你在应用中请求用户同意读取短信内容,这在使用短信验证码等场景中非常有用。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sms_user_consent_manager
插件的依赖:
dependencies:
flutter:
sdk: flutter
sms_user_consent_manager: ^latest_version
然后运行 flutter pub get
来获取依赖。
2. 请求用户同意
在你的 Dart 代码中,你可以使用 SmsUserConsentManager
来请求用户同意读取短信。
import 'package:sms_user_consent_manager/sms_user_consent_manager.dart';
void requestSmsConsent() async {
try {
bool hasConsent = await SmsUserConsentManager.requestSmsConsent();
if (hasConsent) {
print("用户已同意读取短信");
// 在这里处理短信读取逻辑
} else {
print("用户拒绝了读取短信的请求");
}
} catch (e) {
print("请求短信读取权限时出错: $e");
}
}
3. 处理短信内容
一旦用户同意读取短信,你可以使用 SmsUserConsentManager
来监听并读取短信内容。
void listenForSms() async {
SmsUserConsentManager.onSmsReceived.listen((SmsMessage message) {
print("收到短信: ${message.body}");
// 在这里处理短信内容
});
}
4. 权限处理
确保在 AndroidManifest.xml
文件中添加必要的权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
5. 处理用户拒绝
如果用户拒绝了读取短信的请求,你可以提示用户手动输入验证码,或者引导用户到设置中开启权限。
void handleUserRejection() {
// 提示用户手动输入验证码
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("权限被拒绝"),
content: Text("请手动输入验证码或前往设置开启权限。"),
actions: <Widget>[
TextButton(
child: Text("确定"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
6. 完整示例
以下是一个完整的示例,展示了如何请求用户同意并处理短信内容:
import 'package:flutter/material.dart';
import 'package:sms_user_consent_manager/sms_user_consent_manager.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: SmsConsentScreen(),
);
}
}
class SmsConsentScreen extends StatefulWidget {
[@override](/user/override)
_SmsConsentScreenState createState() => _SmsConsentScreenState();
}
class _SmsConsentScreenState extends State<SmsConsentScreen> {
String smsContent = '';
[@override](/user/override)
void initState() {
super.initState();
requestSmsConsent();
listenForSms();
}
void requestSmsConsent() async {
try {
bool hasConsent = await SmsUserConsentManager.requestSmsConsent();
if (hasConsent) {
print("用户已同意读取短信");
} else {
print("用户拒绝了读取短信的请求");
handleUserRejection();
}
} catch (e) {
print("请求短信读取权限时出错: $e");
}
}
void listenForSms() async {
SmsUserConsentManager.onSmsReceived.listen((SmsMessage message) {
setState(() {
smsContent = message.body;
});
});
}
void handleUserRejection() {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("权限被拒绝"),
content: Text("请手动输入验证码或前往设置开启权限。"),
actions: <Widget>[
TextButton(
child: Text("确定"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SMS 用户同意管理'),
),
body: Center(
child: Text('收到的短信内容: $smsContent'),
),
);
}
}