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
相关产品推荐
相关产品推荐

