Flutter中如何通过url_launcher打开Viber及Messenger指定聊天窗口
解决Viber和Facebook Messenger唤起APP打开指定聊天窗口的问题
Viber 实现
Viber的URI格式需确保电话号码为国际标准格式(不带+号,直接前缀国家代码),同时调用launchUrl时要指定唤起外部应用的模式,避免默认打开网页。
示例代码:
var viberNumber = "1234567890"; // 替换为目标号码(国际格式,无+号) var viberUrl = "viber://chat?number=$viberNumber"; try { await launchUrl( Uri.parse(viberUrl), mode: LaunchMode.externalApplication, // 强制唤起Viber APP ); } catch (e) { print('无法唤起Viber: $e'); }
Facebook Messenger 实现
直接使用m.me/username会默认打开网页,需使用Messenger专属URI协议:
- 若已知目标用户电话号码(国际格式,不带+号),用
fb-messenger://send-to - 若已知目标用户Facebook用户ID,用
fb-messenger://user-thread
用电话号码唤起
var messengerPhone = "1234567890"; // 替换为目标号码(国际格式,无+号) var messengerUrl = "fb-messenger://send-to?phone=$messengerPhone"; try { await launchUrl( Uri.parse(messengerUrl), mode: LaunchMode.externalApplication, // 强制唤起Messenger APP ); } catch (e) { print('无法唤起Messenger: $e'); }
用用户ID唤起
var messengerUserId = "123456789"; // 替换为目标用户的Facebook ID var messengerUrl = "fb-messenger://user-thread/$messengerUserId"; try { await launchUrl( Uri.parse(messengerUrl), mode: LaunchMode.externalApplication, ); } catch (e) { print('无法唤起Messenger: $e'); }
关键注意事项
- 设备需已安装对应APP,否则会抛出异常
- 电话号码必须为国际标准格式(移除所有特殊字符,仅保留数字,开头为国家代码)
LaunchMode.externalApplication是核心配置:它会告诉系统优先唤起对应APP,而非在浏览器中打开链接
内容的提问来源于stack exchange,提问作者Salar Azad
相关产品推荐
相关产品推荐

