如何使用 UrlLauncher 从我的 Flutter 应用程序直接向 WhatsApp 发送消息?

Posted

技术标签:

【中文标题】如何使用 UrlLauncher 从我的 Flutter 应用程序直接向 WhatsApp 发送消息?【英文标题】:How to send a message directly from my Flutter app to WhatsApp using UrlLauncher? 【发布时间】:2019-09-17 10:28:52 【问题描述】:

我正在构建一个必须能够接受订单并将其发送到特定 WhatsApp 号码的应用程序。我到底应该怎么做?我可以打开 WhatsApp,但我不知道打开时如何发送消息。

 title: new Text("WhatsApp"),
            trailing: new Icon(Icons.message),
             onTap: () async 
              int phone = 962770593839;
              var whatsappUrl = "whatsapp://send?phone=$phone";
              await UrlLauncher.canLaunch(whatsappUrl) != null
                  ? UrlLauncher.launch(whatsappUrl)
                  : print(
                      "open WhatsApp app link or do a snackbar with 
notification that there is no WhatsApp installed");
            ,

我希望当我输入一个 TextField 并按下发送时,保存的字符串将能够在启动 WhatsApp 后发送到 WhatsApp 号码。

【问题讨论】:

应用程序的工作方式并非如此。您可以启动共享意图,以便支持它的应用程序可以使用它,也可以启动您在此处使用的深层链接 URL。深层链接是应用程序随附的手机的本地 API,它完全取决于 WhatsApp,取决于他们如何实现它。有关如何使用深层链接的更多信息,请查看 WhatsApp 文档。 在颤振中,我们没有像 android 那样的 Intent。我可以轻松地将消息从我的应用程序发送到 Android 中的 WhatsApp。为什么我可以在这里做。?我可以启动whatsapp,但不能发送任何东西。 太棒了!你知道在Android怎么做,写你自己的plugin,就可以和你在Android做的一样。 【参考方案1】:

使用插件。

url_launcher

使用以下链接:https://api.whatsapp.com/send?phone=XXXXXXXXXXX(在 X 的位置输入您要联系的人的电话号码,包括国家代码,但不带 + 号。)

RaisedButton(
      onPressed: () async => await launch(
         "https://wa.me/$number?text=Hello"),,
      child: Text('Open Whatsapp'),
),

或者

您可以使用这个其他插件。

whatsapp_unilink

whatsapp_unilink 包可帮助您构建 HTTP 链接并为您提供惯用的 Dart 接口:

import 'package:whatsapp_unilink/whatsapp_unilink.dart';
import 'package:url_launcher/url_launcher.dart';

launchWhatsApp() async 
  final link = WhatsAppUnilink(
    phoneNumber: '+001-(555)1234567',
    text: "Hey! I'm inquiring about the apartment listing",
  );
  await launch('$link');

【讨论】:

这会填满字段,但不会按发送键。有没有办法自动化整个过程,包括按下发送键 不按发送键是什么意思? launchWhatsApp() 是一个函数。 意思是最终创建了一个URI,当你launch它时,Whatsapp窗口被打开,并且消息文本被预先填充,但它无法在没有用户按下的情况下自动发送消息窗口中的发送按钮 我现在明白你的意思了,WhatsApp 用户隐私政策不允许在未经用户同意的情况下发送消息。【参考方案2】:

试试flutter_open_whatsapp插件。你直接发消息给号码

FlutterOpenWhatsapp.sendSingleMessage("918179015345", "Hello");

链接 Open in WhatsApp

【讨论】:

对于任何想使用这个包的人,我建议不要使用它。它维护得很差,作者没有回应用户在 GitHub 上提出的问题。无论如何我尝试使用它,并得到一个 java 整数转换错误。 我也在用这个【参考方案3】:

你可以这样做。

onPressed: () async          
          for (var msg in msgList) 
            if (msg["phone"] != null) 
              var url = "$baseURL91$msg['phone']&text=$msg['messages']";
              print(url);
              AndroidIntent intent = AndroidIntent(
                  action: 'action_view',
                  data: Uri.encodeFull(url),
                 package: "com.whatsapp.w4b");
              intent.launch();
            
          
        ,
        child: Icon(Icons.send),
      ),

【讨论】:

【参考方案4】:

使用whatsapp_share包

这会启动带有相应编号的 WhatsApp 并预填充文本字段。

文本和链接
 Future<void> share() async 
    await WhatsappShare.share(
      text: 'Whatsapp share text',
      linkUrl: 'https://flutter.dev/',
      phone: '911234567890',
    );
  
分享图片、文件

_image.path 是你要分享给whatsapp的文件路径

 Future<void> shareFile() async 
    await WhatsappShare.shareFile(
      text: 'Whatsapp share text',
      phone: '911234567890',
      filePath: "$_image.path",
    );
  

完整示例here

【讨论】:

以上是关于如何使用 UrlLauncher 从我的 Flutter 应用程序直接向 WhatsApp 发送消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenCV 从我的磁盘播放视频文件。? [关闭]

如何从我的流中获取数据并使用它?

如何使用 @WithMockUser 并从我的属性文件中传递我的用户名和密码?

如何直接从我的应用程序使用 Google 地图导航

如何使用 AlamofireImage 从我的服务器加载 LCR 图像?

如何使用本地 xampp 和 php 联系人表单从我的 mac 发送邮件