颤振用短信打开whatsapp

时间:2020-03-31 10:02:11

标签: flutter whatsapp flutter-dependencies

我想从Flutter应用程序中打开whatsapp并发送特定的文本字符串。在whatsapp中,我将选择发送给谁。

进行了一些研究之后,我想到了:

_launchWhatsapp() async {
  const url = "https://wa.me/?text=Hey buddy, try this super cool new app!";
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

哪个工作还可以,但是有两个问题:

  1. 一旦我将文本字符串转换成多个单词,它就会失败。因此,如果我将其更改为:
_launchWhatsapp() async {
   const url = "https://wa.me/?text=Hey buddy, try this super cool new app!";
   if (await canLaunch(url)) {
     await launch(url);
   } else {
   throw 'Could not launch $url';
  }
}

然后抛出无法启动$ url。

  1. 我的手机上已经安装了whatsapp,但它并没有直接转到该应用程序,而是为我提供了一个网页以及打开该应用程序的选项。

这是我看到的网页:

enter image description here

对于解决这些问题的任何帮助,将不胜感激。

谢谢

卡森

P.s。我正在使用Url_launcher软件包来执行此操作。

3 个答案:

答案 0 :(得分:6)

official Whatsapp FAQ中,您可以看到“使用通用链接是链接到WhatsApp帐户的首选方法”。

因此在您的代码中,URL字符串应为:

const url = "https://wa.me/?text=YourTextHere";

如果用户的手机中安装了Whatsapp,则此链接将直接打开它。那应该可以解决先打开网页的问题。

对于无法发送多字消息的问题,这是因为您需要将消息编码为URL。在文档中也有说明:

URL编码的文本是URL编码的预填充消息。

因此,为了在Dart中对邮件进行网址编码,您可以按以下步骤进行操作:

const url = "https://wa.me/?text=Your Message here";
var encoded = Uri.encodeFull(url);

Dart Language tour所示。

请注意,在示例代码中,您在文本消息周围加上了一组单引号,您不应该这样做。

编辑:

Whatsapp常见问题解答中还提供了另一个选项,就是直接使用Whatsapp方案。如果您想尝试一下,可以使用以下网址:

const url = "whatsapp://send?text=Hello World!"

请注意,如果您在iOS9或更高版本中进行测试,则Apple Documentation指出:

重要

如果您的应用在iOS 9.0或更高版本上链接,则必须通过将LSApplicationQueriesSchemes密钥添加到应用的Info.plist文件中来声明传递给此方法的URL方案。无论是否安装了适当的应用程序,此方法对于未声明的方案始终返回false。要了解有关该密钥的更多信息,请参见LSApplicationQueriesSchemes。

因此,如果您使用的是自定义whatsapp方案,则需要在info.plist中添加以下键:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>whatsapp</string>
</array>

答案 1 :(得分:0)

要使用wa.me域,请确保使用此格式...

https://wa.me/123?text=Your Message here

这将发送到电话号码123。否则,您将收到一条错误消息(请参阅?https://wa.me/?text=YourMessageHere)。或者,如果您不想包括电话号码,请尝试此...

https://api.whatsapp.com/send?text=Hello there!

请记住,wa.me需要电话号码,而api.whatsapp.com不需要电话号码。希望这会有所帮助!

答案 2 :(得分:0)

如果您将使用 URL Launcher,那么 whatsapp 链接将在网络浏览器上打开。所以你需要设置参数 - 不要在 safari 浏览器上打开。您可以在此 flutter tutorial 上找到完整代码。

但对于您的情况,请使用以下代码。

await launch(whatappURL, forceSafariVC: false);