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

Ionic/Angular4配置Cordova SMS插件后无法静默发送短信求助

嘿,你遇到的这个问题十有八九是权限没配置到位——毕竟短信发送属于敏感系统操作,不管是Android还是iOS都得专门申请权限才行。我来给你一步步梳理该怎么解决:

一、Android 端权限处理

Android 对短信操作的权限管控很严,哪怕插件理论上会自动帮你添加权限,也建议手动确认+动态申请:

  1. 检查静态权限
    打开项目里的 platforms/android/app/src/main/AndroidManifest.xml,确认是否有这几行权限配置,如果没有就手动加上:
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    
  2. 动态申请权限(关键!)
    Android 6.0(API 23)及以上版本,必须在代码里主动请求权限,不能只靠静态配置。你可以借助AndroidPermissions插件来实现:
    import { AndroidPermissions } from '@ionic-native/android-permissions/ngx';
    
    // 记得在构造函数里注入依赖
    constructor(private sms: SMS, private androidPermissions: AndroidPermissions) {}
    
    sendSms() {
      // 先检查是否拥有发送短信的权限
      this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.SEND_SMS).then(
        result => {
          if (result.hasPermission) {
            // 有权限,执行发送逻辑
            this.executeSendSms();
          } else {
            // 没权限,主动申请
            this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.SEND_SMS).then(
              () => this.executeSendSms(),
              err => alert('权限申请失败,无法发送短信')
            );
          }
        },
        err => alert('权限检查出错:' + err)
      );
    }
    
    private executeSendSms() {
      let options = {
        replaceLineBreaks: false,
        android: {
          intent: '' // 无intent直接发送(注意:部分Android 10+机型可能拦截)
        }
      };
      // 一定要加错误捕获!不然发送失败连原因都不知道
      this.sms.send('656225667', 'SMS Works', options).then(
        val => alert('It works'),
        err => alert('发送失败:' + JSON.stringify(err))
      );
    }
    
    另外提一句:如果用intent: 'INTENT'调用系统自带短信APP发送,反而更稳定——直接发送(intent: '')需要更高权限,部分厂商会拦截。
二、iOS 端权限配置

iOS 这边必须在Info.plist里添加权限说明,否则会被系统拒绝:
打开platforms/ios/你的APP名称/Info.plist,添加以下配置:

<key>NSMessagesUsageDescription</key>
<string>需要访问短信权限来发送消息</string>

注意:iOS不支持无交互直接发送短信,必须唤起系统短信界面让用户手动点击发送,所以你的options不用额外配置iOS相关参数,插件会自动处理。

三、其他排查小技巧
  • 确认插件安装正确:执行cordova plugin list看看cordova-sms-plugin是否在列表里,没装的话重新运行cordova plugin add cordova-sms-plugin
  • 打开调试日志:用Chrome的chrome://inspect(Android)或Safari调试(iOS)查看控制台错误,比如号码格式错误、短信内容过长、权限被拒等信息,能快速定位问题
  • 测试号码要有效:确保接收号码是正确的(比如加对国家区号)

内容的提问来源于stack exchange,提问作者Mitchell Yuen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:27