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

Flutter调用Twilio WhatsApp API遇主机查找失败问题求助

Flutter调用Twilio WhatsApp API崩溃,提示"No address associated with hostname"

问题分析

你遇到的"Failed host lookup: 'api.twilio.com'"属于DNS解析失败,本质是设备无法找到Twilio API服务器的IP地址;同时try-catch无法捕获错误是因为异步IO异常的处理方式不对。另外代码里还有一个潜在问题:Twilio WhatsApp的From号码需要加上whatsapp:前缀,否则API会返回格式错误。

解决方案

1. 修复平台网络权限

  • Android:在android/app/src/main/AndroidManifest.xml中添加网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    

    Android 9及以上默认支持HTTPS请求,无需额外配置明文访问权限。

  • iOS:默认配置下HTTPS请求已被允许,若设备存在网络限制,可在Info.plist中确认ATS设置(不建议禁用ATS,Twilio API支持HTTPS):

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    

2. 正确捕获异步异常

将整个异步调用逻辑包裹在try块中,确保捕获所有IO异常:

Future<void> sendWhatsAppMessage(
    String recipientWhatsAppNumber, String message) async {
  const twilioAccountSid = '';
  const twilioAuthToken = '';
  // 修复From号码格式,添加whatsapp:前缀
  const twilioNumber = 'whatsapp:+15066160178';

  try {
    final basicAuth =
        'Basic ${base64Encode(utf8.encode('$twilioAccountSid:$twilioAuthToken'))}';

    final Uri uri = Uri.parse(
        'https://api.twilio.com/2010-04-01/Accounts/$twilioAccountSid/Messages.json');

    final Map<String, String> body = {
      'To': 'whatsapp:$recipientWhatsAppNumber',
      'From': twilioNumber,
      'Body': message,
    };

    final response = await http.post(
      uri,
      headers: <String, String>{
        'authorization': basicAuth,
        'content-type': 'application/x-www-form-urlencoded',
      },
      body: body,
    );

    if (response.statusCode == 200) {
      print('WhatsApp message sent successfully.');
    } else {
      print(
          'Failed to send message. Status code: ${response.statusCode}, Response: ${response.body}');
    }
  } catch (e, stackTrace) {
    print('Error sending message: $e');
    print('Stack trace: $stackTrace');
  }
}

3. 验证网络连通性

  • 在设备浏览器中直接访问https://api.twilio.com,确认能正常加载页面
  • 若设备使用代理网络,需确保代理可解析api.twilio.com域名

4. 检查Twilio配置

  • 确认账号已开通WhatsApp服务,From号码为Twilio分配的沙箱号码或已验证的发送号码
  • 确保recipientWhatsAppNumber格式正确,需包含国家代码(如+8613xxxxxxxxx)

额外提示

若仍有未捕获的异常,可配置全局异常处理器捕获未处理的异步错误:

void main() {
  FlutterError.onError = (details) {
    FlutterError.presentError(details);
  };
  runZonedGuarded(() {
    runApp(MyApp());
  }, (error, stackTrace) {
    print('Uncaught error: $error');
    print('Stack trace: $stackTrace');
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:58:30