You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Android应用打开WhatsApp异常:应用内打开且报错问题求助

Flutter 打开 WhatsApp 异常问题描述

尝试从Flutter应用中打开WhatsApp时,并未启动独立的WhatsApp客户端,而是在当前Flutter应用内打开,且立即弹出错误提示。已尝试多种网上的解决方案组合,仍未解决。

使用的代码

void _showWhatssap() async {
  String whatsapp = '+593963631704';   
  var whatsappURlAndroid = Uri.parse('https://wa.me/$whatsapp');    
  var whatappURLIos = Uri.parse('https://wa.me/$whatsapp?text=${Uri.parse("hello")}');

  if (Platform.isIOS) {
    // for iOS phone only
    if (await canLaunchUrl(whatappURLIos)) {
      await launchUrl(whatappURLIos);
    } else {
      ScaffoldMessenger.of(context)
          .showSnackBar(SnackBar(content: new Text("whatsapp no installed")));
    }
  } else {
    bool status = await canLaunchUrl(whatsappURlAndroid);
    print("ESTADO: ${status}");
    if (status) {
      await launchUrl(whatsappURlAndroid);
    } else {
      ScaffoldMessenger.of(context)
          .showSnackBar(SnackBar(content: new Text("whatsapp no installed para android")));
    }
  }
}

错误截图

错误截图

解决方案

1. 强制使用外部应用启动模式

launchUrl 默认会在应用内加载网页,需添加 mode: LaunchMode.externalApplication 参数,强制系统唤起独立的WhatsApp客户端:

// Android 端修改
await launchUrl(whatsappURlAndroid, mode: LaunchMode.externalApplication);

// iOS 端修改
await launchUrl(whatappURLIos, mode: LaunchMode.externalApplication);

2. 替换为 WhatsApp 原生协议链接

https://wa.me 是网页链接,部分设备会优先打开浏览器,改用原生协议链接更可靠:

  • Android:whatsapp://send?phone=$whatsapp
  • iOS:whatsapp://send?phone=$whatsapp&text=${Uri.encodeFull("hello")}

修改后的完整代码:

void _showWhatssap() async {
  String whatsapp = '+593963631704';
  String message = "hello";
  
  var whatsappURlAndroid = Uri.parse('whatsapp://send?phone=$whatsapp');
  var whatappURLIos = Uri.parse('whatsapp://send?phone=$whatsapp&text=${Uri.encodeFull(message)}');

  if (Platform.isIOS) {
    if (await canLaunchUrl(whatappURLIos)) {
      await launchUrl(whatappURLIos, mode: LaunchMode.externalApplication);
    } else {
      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("未安装WhatsApp")));
    }
  } else {
    bool status = await canLaunchUrl(whatsappURlAndroid);
    print("ESTADO: ${status}");
    if (status) {
      await launchUrl(whatsappURlAndroid, mode: LaunchMode.externalApplication);
    } else {
      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("未安装WhatsApp")));
    }
  }
}

3. 完善 url_launcher 平台配置

确保 url_launcher 包为最新版本,并完成以下平台配置:

  • Android:在 android/app/src/main/AndroidManifest.xml 中添加查询权限:
<queries>
  <package android:name="com.whatsapp" />
  <package android:name="com.whatsapp.w4b" /> <!-- 适配WhatsApp Business -->
</queries>
  • iOS:在 ios/Runner/Info.plist 中添加协议白名单:
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>whatsapp</string>
</array>

4. 校验号码格式

确保号码格式正确,+ 号后直接跟国家代码和纯数字号码,无空格、括号等多余字符,示例中的 +593963631704 格式是正确的。

内容的提问来源于stack exchange,提问作者PartnerTech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:54:25