Ionic/Angular4配置Cordova SMS插件后无法静默发送短信求助
嘿,你遇到的这个问题十有八九是权限没配置到位——毕竟短信发送属于敏感系统操作,不管是Android还是iOS都得专门申请权限才行。我来给你一步步梳理该怎么解决:
一、Android 端权限处理
Android 对短信操作的权限管控很严,哪怕插件理论上会自动帮你添加权限,也建议手动确认+动态申请:
- 检查静态权限
打开项目里的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" /> - 动态申请权限(关键!)
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
相关产品推荐
相关产品推荐

