如何用Flutter实现WhatsApp一次性向多个号码发送消息
问题原因
你代码的核心问题是Dart的forEach方法不会等待内部异步函数执行完成,循环内的所有launch调用会在极短时间内依次触发,前一次跳转WhatsApp的请求还未执行完成,就被后一次跳转请求覆盖,最终只有列表最后一个号码的发送请求能被WhatsApp接收。
解决方案
将forEach替换为支持异步等待的for...in循环,同时在两次跳转之间添加合理的等待时长,给用户留出发送操作的响应时间,也避免跳转请求互相覆盖。修正后的代码如下:
sendMessage() async { var number = ["201020402642", "201030666895"]; var baseUrl = "https://api.whatsapp.com/send/"; // 用for in循环替代forEach,支持异步等待 for (var element in number) { var url = baseUrl + "?phone=${element}&text=msg"; if (await canLaunch(url)) { await launch(url); // 每次跳转后等待15秒,可根据实际需求调整时长,留足用户手动点击发送的时间 await Future.delayed(const Duration(seconds: 15)); } else { print("not installed"); } } }
注意事项
- 上述方案使用的是WhatsApp公开的跳转协议,无法实现完全自动发送,每次跳转后都需要用户手动点击发送按钮才能完成消息发送,这是WhatsApp的安全限制,没有绕过方案。
- 请勿频繁批量发送营销类等非私人消息,否则会被WhatsApp判定为垃圾账号,触发封禁限制。
- 如果你使用的是新版
url_launcher库,可将代码中的canLaunch替换为canLaunchUrl、launch替换为launchUrl,参数改为Uri.parse(url)即可。
内容的提问来源于stack exchange,提问作者Ahmed Khalid
相关产品推荐
相关产品推荐

