Flutter短信发送插件easysms的使用
Flutter短信发送插件easysms的使用
EasySMS
EasySMS 是一个BSD-3-Clause许可的开源项目,其持续开发完全由这些超级棒的支持者提供。如果你想加入他们,请考虑支持Odroe开发。
安装
在 pubspec.yaml
中添加以下依赖项:
dependencies:
easysms: latest
或者从命令行安装:
dart pub add easysms
功能
- Gateway: 支持多个网关,可以根据需求自定义网关。
- Message: 支持多种消息模板,可以根据场景自定义消息。
- Universal: 通用设计,无需为每个服务提供商编写单独的处理程序。
- Strategy: 支持网关选择策略。
- Retry: 基于网关和策略的重试机制。
使用示例
import 'package:easysms/easyssms.dart';
final easysms = EasySMS(
gateways: [
TencentCloudSmsGateway(
appId: 'Your App ID',
secretId: 'Your Secret ID',
secretKey: 'Your Secret Key',
),
],
);
final message = Message.fromValues(
template: '<You template ID>',
data: {
'SignName': "<You sign name>",
'TemplateParamSet': [
'<Param 1>',
'<Param 2>',
// ...
],
},
);
main() async {
final phone = PhoneNumber(86, '<You phone number>');
final response = await easyssms.send([phone], message);
print('Status: ${response.first.success}'); // true or false
}
消息
你可以根据消息创建自己的场景消息:
import 'package:easysms/easyssms.dart';
class OneTimePasswordMessage implements Message {
final String password;
final Duration ttl;
OneTimePasswordMessage(this.password, this.ttl);
@override
Future<Map<String, dynamic>> toData(G Gateway gateway) {
// ...
}
@override
Future<String> toTemplate(g Gateway gateway) {
// ...
}
@override
Future<String> toText(g Gateway gateway) {
// ...
}
}
内置消息
final message = Message.fromValues(
text: '<You message text>',
template: '<You template ID>',
data: {
// ...
},
);
网关
Gateway | 平台 | 描述 |
---|---|---|
TencentCloudSmsGateway | Tencent Cloud SMS | Tencent Cloud SMS网关 |
SmsBaoGateway | 短信宝 | 短信宝 SMS网关 |
如果需要使用的平台不在列表中,可以采取以下几种方式支持它:
- 创建一个issue请求支持该平台。
- 创建一个pull request来添加对该平台的支持。
- 自己创建一个网关Dart包。
- 在项目中自己实现网关而不需要告诉任何人。
如何创建网关
你必须依赖 easyssms
包并实现 Gateway
接口:
import 'package:easyssms/easyssms.dart';
class MyGateway implements Gateway {
@override
Future<Iterable<Response>> send(
Iterable<PhoneNumber> to, Message message, http.Client client) async {
// ...
}
}
可以参考我们实现的所有网关:所有网关
策略
EasySMS 允许你自定义网关选择策略。
class MyStrategy implements Strategy {
@override
Future<Gateway> select(Iterable<Gateway> gateways) async {
// ...
}
}
我们实现了一个内置策略,例如你可以使用 OrderStrategy
:
final easysms = EasySMS(
gateways: [...],
strategy: const OrderStrategy(),
);
更多关于Flutter短信发送插件easysms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter短信发送插件easysms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用easysms
插件来发送短信的示例代码。这个示例假定你已经有一个Flutter项目,并且已经添加了easysms
插件到你的pubspec.yaml
文件中。
首先,确保在你的pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
easysms: ^最新版本号 # 替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用easysms
插件发送短信:
- 导入包:
在你的Dart文件中(例如main.dart
),首先导入easysms
包:
import 'package:easysms/easysms.dart';
import 'package:flutter/material.dart';
- 配置权限:
在AndroidManifest.xml
中添加发送短信所需的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<!-- 其他配置 -->
</manifest>
注意:在iOS上,发送短信通常不需要额外的权限配置,但确保你的应用有适当的隐私政策来处理用户数据。
- 请求权限并发送短信:
在你的Flutter应用中,你可以创建一个按钮来触发短信发送功能。以下是一个完整的示例,包括请求权限和发送短信的逻辑:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SMS Sender'),
),
body: Center(
child: SendSMSButton(),
),
),
);
}
}
class SendSMSButton extends StatefulWidget {
@override
_SendSMSButtonState createState() => _SendSMSButtonState();
}
class _SendSMSButtonState extends State<SendSMSButton> {
bool _hasPermission = false;
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
if (!_hasPermission) {
// 请求发送短信权限(仅Android需要)
bool result = await EasySms.requestSmsPermission();
if (!mounted) return;
setState(() {
_hasPermission = result;
});
if (!_hasPermission) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Permission Denied')),
);
return;
}
}
// 发送短信
String phoneNumber = '目标手机号'; // 替换为目标手机号
String message = '这是一条测试短信';
try {
bool sent = await EasySms.sendSms(
phoneNumber: phoneNumber,
message: message,
);
if (sent) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('SMS Sent Successfully')),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to Send SMS')),
);
}
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: $e')),
);
}
},
child: Text('Send SMS'),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,应用会检查并请求发送短信的权限(仅针对Android),然后尝试发送短信。如果发送成功,会显示一个成功消息;如果失败,会显示一个错误消息。
请注意,实际使用时,你可能需要处理更多的边缘情况,例如用户拒绝权限请求,或者短信发送失败的具体原因等。此外,确保在真实应用中处理敏感信息(如手机号)时遵循最佳实践。