Angular / Ionic4如何在不打开本机短信应用程序的情况下发送短信

时间:2019-10-09 14:33:10

标签: angular typescript sms ionic4

因此,我一直在关注Ionic Native SMS插件的github repo(https://github.com/cordova-sms/cordova-sms-plugin), 并且我已经配置了回购建议:

var options = {
            replaceLineBreaks: false, // true to replace \n by a new line, false by default
            android: {
                intent: 'INTENT'  // send SMS with the native android SMS messaging
                //intent: '' // send SMS without opening any other app
            }
        };

但是,当我在真实设备上对其进行测试时,它仍然不会发送SMS。

有人可以帮助我吗,我需要添加权限吗? 这是我到目前为止的代码

 sendSms() {
    let options = {
      replaceLineBreaks: false, // true to replace \n by a new line, false by default
      android: {
          intent: ''  // send SMS with the native android SMS messaging
          // intent: '' // send SMS without opening any other app
      }
  };
    this.sms.send('656225667', 'SMS Works', options).then(val => {
      alert('It works');
    });
  }

3 个答案:

答案 0 :(得分:1)

您没有发送短信,而是在创建INTENT来发送短信。

  

意图可以让您通过描述其他应用程序来启动活动   您想要执行的简单操作(例如“查看地图”或“   图片”)在Intent对象中。这种类型的intent被称为   隐式意图,因为它没有将应用程序组件指定为   开始,而是指定一个动作并提供一些数据   来执行操作。

这意味着代码仅生成“意图”,然后将其传递给您的手机默认应用进行处理。它如何处理intent取决于应用程序。甚至可以有多个可以处理intent的应用程序,然后在使用中获得一个选择对话框。当短信真正发送时,您的应用无法控制。

这实际上是一件好事,因此,如果您安装任何应用程序,都可以确定,它不会将SMS发送到订阅服务,您需要支付100欧元的电话费。

答案 1 :(得分:1)

不打开本机应用程序发送短信的唯一方法是使用付费的第三方服务为您发送短信。

那里有很多,例如Twilio是受欢迎的提供商。

我认为您需要使用服务器端技术或via a cloud function发送它,以便控制它的安全性。

答案 2 :(得分:0)

您可以在不打开本地SMS应用程序的情况下发送SMS。 您需要使用Android权限来获取SMS权限

使用这两个功能

checkSMSPermission() {
  this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.SEND_SMS).then(
    result => console.log('Has permission?', result.hasPermission),
    err => this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.SEND_SMS)
  );
}
requestSMSPermission() {
  // tslint:disable-next-line: max-line-length
  this.androidPermissions.requestPermissions([this.androidPermissions.PERMISSION.SEND_SMS, this.androidPermissions.PERMISSION.BROADCAST_SMS]);
}

,并且您还需要在Android Manifest中包括这些功能。

<uses-permission android:name="android.permission.SEND_SMS" />

,然后是SMS功能本身

sendSMS() {
  this.checkSMSPermission();
  this.contactComponent.getContact();
  const numberOne = this.contactComponent.mContacts[0].number;
  const numberTwo = this.contactComponent.mContacts[1].number;
  const numbeThree = this.contactComponent.mContacts[2].number;
  const numberFour = this.contactComponent.mContacts[3].number;
  const numberFive = this.contactComponent.mContacts[4].number;
  console.log(numberOne);

  // tslint:disable-next-line: max-line-length
  const message = this.messageComponent.dangerMessage + ' my location is: lat: ' + this.latitude.toString() + 'lng: ' + this.longitude.toString();
  console.log('number=' + numberOne + ', message= ' + message);

  // CONFIGURATION
  const options = {
      replaceLineBreaks: false, // true to replace \n by a new line, false by default
      android: {
          intent: ''  // send SMS with the native android SMS messaging
          // intent: '' // send SMS without opening any other app
      }
  };
  this.sms.send(numberOne, message, options).then(() => {
    this.presentAlert('Success', 'message has been sent');
  })
  .catch(error => {
    this.presentAlert('Error', 'Failed: ' + error);
  });
}