Flutter短信发送插件easysms的使用

发布于 1周前 作者 caililin 来自 Flutter

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: '&lt;You message text&gt;',
  template: '&lt;You template ID&gt;',
  data: {
    // ...
  },
);

网关

Gateway 平台 描述
TencentCloudSmsGateway Tencent Cloud SMS Tencent Cloud SMS网关
SmsBaoGateway 短信宝 短信宝 SMS网关

如果需要使用的平台不在列表中,可以采取以下几种方式支持它:

  1. 创建一个issue请求支持该平台。
  2. 创建一个pull request来添加对该平台的支持。
  3. 自己创建一个网关Dart包。
  4. 在项目中自己实现网关而不需要告诉任何人。

如何创建网关

你必须依赖 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&lt;Gateway&gt; select(Iterable&lt;Gateway&gt; gateways) async {
    // ...
  }
}

我们实现了一个内置策略,例如你可以使用 OrderStrategy

final easysms = EasySMS(
  gateways: [...],
  strategy: const OrderStrategy(),
);

更多关于Flutter短信发送插件easysms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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插件发送短信:

  1. 导入包

在你的Dart文件中(例如main.dart),首先导入easysms包:

import 'package:easysms/easysms.dart';
import 'package:flutter/material.dart';
  1. 配置权限

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上,发送短信通常不需要额外的权限配置,但确保你的应用有适当的隐私政策来处理用户数据。

  1. 请求权限并发送短信

在你的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),然后尝试发送短信。如果发送成功,会显示一个成功消息;如果失败,会显示一个错误消息。

请注意,实际使用时,你可能需要处理更多的边缘情况,例如用户拒绝权限请求,或者短信发送失败的具体原因等。此外,确保在真实应用中处理敏感信息(如手机号)时遵循最佳实践。

回到顶部