Flutter 用短信打开 whatsapp

Flutter open whatsapp with text message

我想从我的 Flutter 应用程序打开 whatsapp 并发送特定的文本字符串。当我在 whatsapp 时,我会 select 发送给谁。

经过一些研究,我想到了这个:

_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';
  }
}

然后 Could not launch $url 被抛出。

  1. 我的 phone 上已经安装了 whatsapp,但它不会直接转到应用程序,而是先给我一个网页和打开应用程序的选项。

这是我看到的网页:

如果能帮助解决这些问题,我们将不胜感激。

谢谢

卡森

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

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

所以在你的代码中,url 字符串应该是:

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

如果用户在他的 phone 中安装了 Whatsapp,这个 link 将直接打开它。那应该先解决打开网页的问题

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

URL-encodedtext is the URL-encoded pre-filled message.

因此,为了在 Dart 中对您的消息进行 url 编码,您可以按如下方式进行:

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

Dart Language tour 中所见。

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

编辑:

Whatsapp 常见问题解答中还提供了另一种选择,即直接使用 Whatsapp Scheme。如果您想尝试一下,可以使用以下 url:

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

另请注意,如果您在 iOS9 或更高级别进行测试,Apple Documentation 状态:

Important

If your app is linked on or after iOS 9.0, you must declare the URL schemes you pass to this method by adding the LSApplicationQueriesSchemes key to your app's Info.plist file. This method always returns false for undeclared schemes, whether or not an appropriate app is installed. To learn more about the key, see LSApplicationQueriesSchemes.

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

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

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

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

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

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

请记住,wa.me 需要一个 phone 号码,而 api.whatsapp.com 不需要。希望这对您有所帮助!

如果您将使用 URL 启动器,那么 whatsapp link 将在网络浏览器中打开。所以你需要设置参数 - 不要在 safari 浏览器上打开。您可以在 flutter tutorial.

上找到完整的代码

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

await launch(whatappURL, forceSafariVC: false);