Flutter/Firebase/url_launcher/ 如何从应用程序发送短信?

Posted

技术标签:

【中文标题】Flutter/Firebase/url_launcher/ 如何从应用程序发送短信?【英文标题】:Flutter/Firebase/url_launcher/ how to send SMS message from the app? 【发布时间】:2021-03-25 15:04:01 【问题描述】:

我正在使用 Flutter 开发移动应用。

我只是想知道如何从应用程序发送 SMS 消息。

NewCustomIconButton(
  text: 'SMS',
  icon: Icons.sms,
  onPressed: () async 
    await Clipboard.setData(ClipboardData(
        text:
            "Hello, $confirmedBooking.userAccountID,  you have booking with $_artistAccount.getFullname(), "));
    UrlLauncher.launch(
        "sms://$confirmedBooking.phoneNumber");
    ,
  ),
)

在这段代码中,如果我按下按钮,它会在我的手机上进入短信屏幕,但是,我只是想知道是否可以在不手动输入文本的情况下发送短信。

感谢阅读,

我在等你的帮助。

【问题讨论】:

【参考方案1】:

如果您想直接从代码中发送SMS,您可以使用sms 包:

注意:sms 软件包目前仅支持 android

import 'package:sms/sms.dart';

SmsSender sender = new SmsSender();
String address = someAddress();
SmsMessage message = new SmsMessage(address, 'Hello from Flutter!');
message.onStateChanged.listen((state) 
  if (state == SmsMessageState.Sent) 
    print("SMS is sent");
   else if (state == SmsMessageState.Delivered) 
    print("SMS is delivered");
  
);
sender.sendSms(message);

如果您想打开预先填充指定内容和收件人的新SMS 消息,可以通过启动以下URI 来实现: sms://$confirmedBooking.phoneNumber?body=$messageBody

记得对String进行编码以获得有效的URI

String uriAndroid = "sms:$confirmedBooking.phoneNumber?body=$messageBody";
String uriios = "sms:$confirmedBooking.phoneNumber&body=$messageBody";
uriAndroid = Uri.encodeFull(uriAndroid);
uriIOS = Uri.encodeFull(uriIOS); // valid URIs

供参考,根据你的具体场景,遵循完整的代码sn-p:

NewCustomIconButton(
     text: 'SMS',
     icon: Icons.sms,
     onPressed: () async 
       String smsContent = 
               "Hello, $confirmedBooking.userAccountID,  you have booking with $_artistAccount.getFullname()";
       await Clipboard.setData(ClipboardData(
           text: smsContent));
       String char = Platform.isAndroid ? '?' : '&';
       UrlLauncher.launch(
           Uri.encodeFull("sms:$phoneNumber$charbody=$smsContent"));
     ,
   ),
)

我还建议创建一个可重用的函数:

void createNewSms(String phoneNumber, String smsContent) 
 String char = Platform.isAndroid ? '?' : '&';
 UrlLauncher.launch(
     Uri.encodeFull("sms:$phoneNumber$charbody=$smsContent"));

【讨论】:

感谢您的回复,但它实际上无法正常工作。它正在向“1234567890?body=hello,daegil,youhavebookingwithemiendo”这个号码发送消息。 onPressed: () async String messageBody = "您好,$confirmedBooking.userAccountID,您已使用 $_artistAccount.getFullname() 进行预订,"; String uri = "sms://$confirmedBooking.phoneNumber?body=$messageBody"; UrlLauncher.launch(Uri.encodeFull(uri)); , 我已经更新了代码来解决这个问题! 非常感谢,真的很有用!然而,这实际上并不是我要问的。我实际上是在询问在 App 中发送 SMS 消息,它也与正文消息一起进入消息屏幕,我也必须手动按下发送按钮。我认为我想要的在技术上是不可能的:)。感谢您的帮助。 乐于助人!我修改了答案以包含新发现,包括直接从应用程序(在 Android 上)发送 SMS 的方法。如果这有帮助,请告诉我

以上是关于Flutter/Firebase/url_launcher/ 如何从应用程序发送短信?的主要内容,如果未能解决你的问题,请参考以下文章