You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter应用中实现安卓iOS双端点击直接发送短信

Flutter双端短信发送适配方案

系统限制前置说明

iOS系统层面禁止第三方应用在无用户主动触发的情况下直接后台发送短信,所有短信发送操作必须唤起系统自带的Messages应用,由用户手动点击发送按钮完成操作,不存在可绕过该限制的公开API,因此双端无法实现完全一致的「应用内无跳转直接发送」逻辑。

分端实现方案

  • 安卓端:可直接使用telephony包实现应用内直接发送
    1. 首先在android/app/src/main/AndroidManifest.xml中添加短信发送权限:
    <uses-permission android:name="android.permission.SEND_SMS" />
    
    1. 调用发送逻辑代码示例:
    import 'package:telephony/telephony.dart';
    
    final Telephony telephony = Telephony.instance;
    
    Future<void> sendSmsAndroid(String targetPhone, String smsContent) async {
      bool? hasPermission = await telephony.requestSmsPermissions;
      if (hasPermission == true) {
        await telephony.sendSms(to: targetPhone, message: smsContent);
      }
    }
    
  • iOS端:仅可通过唤起系统短信应用实现发送,可使用url_launcher包实现,代码示例:
    import 'package:url_launcher/url_launcher.dart';
    
    Future<void> sendSmsIos(String targetPhone, String smsContent) async {
      final Uri smsUri = Uri(
        scheme: 'sms',
        path: targetPhone,
        queryParameters: {'body': smsContent},
      );
      if (await canLaunchUrl(smsUri)) {
        await launchUrl(smsUri);
      }
    }
    

统一调用封装

可通过平台判断封装统一调用入口,无需业务层区分双端逻辑:

import 'dart:io';

Future<void> sendSms(String targetPhone, String smsContent) async {
  if (Platform.isAndroid) {
    await sendSmsAndroid(targetPhone, smsContent);
  } else if (Platform.isIOS) {
    await sendSmsIos(targetPhone, smsContent);
  }
}

内容的提问来源于stack exchange,提问作者Muhammad Arbaz Zafar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:09:04