티스토리 뷰

반응형

Flutter에서 Twilio API를 사용하여 SMS를 보내는 방법을 설명해 드리겠습니다.
Flutter는 Dart 기반이므로, Twilio의 HTTP API를 호출해야 합니다.


🔹 1. Twilio 계정 설정

Twilio를 사용하려면 API 키를 발급받아야 합니다.

  1. Twilio 가입 및 로그인
  2. Account SID, Auth Token 확인 (Twilio Console에서 확인 가능)
  3. Twilio에서 제공하는 발신 전화번호(From Number) 발급

🔹 2. Flutter에서 Twilio API 호출

Flutter에서는 http 패키지를 사용하여 Twilio의 REST API를 호출하면 됩니다.

✅ http 패키지 설치

먼저, pubspec.yaml에 http 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.5  # 최신 버전 확인 후 사용

이후 flutter pub get을 실행하여 패키지를 설치합니다.


✅ Twilio API를 호출하는 Dart 코드

import 'dart:convert';
import 'package:http/http.dart' as http;

class TwilioService {
  final String accountSid = "your_account_sid";  // Twilio에서 제공
  final String authToken = "your_auth_token";    // Twilio에서 제공
  final String twilioNumber = "+1234567890";     // Twilio에서 발급한 발신번호
  final String myPhoneNumber = "+8210XXXXXXXX"; // 수신할 본인의 번호

  Future sendSms(String message) async {
    final String url = "https://api.twilio.com/2010-04-01/Accounts/$accountSid/Messages.json";

    final response = await http.post(
      Uri.parse(url),
      headers: {
        "Authorization":
            "Basic ${base64Encode(utf8.encode('$accountSid:$authToken'))}",
        "Content-Type": "application/x-www-form-urlencoded"
      },
      body: {
        "From": twilioNumber,
        "To": myPhoneNumber,
        "Body": message
      },
    );

    if (response.statusCode == 201 || response.statusCode == 200) {
      print("SMS 전송 성공!");
    } else {
      print("SMS 전송 실패: ${response.body}");
    }
  }
}

void main() {
  TwilioService().sendSms("Flutter에서 Twilio로 문자 전송 테스트!");
}

설명

  • http.post()를 사용하여 Twilio의 REST API를 호출.
  • Basic Authentication 방식으로 Account SID와 Auth Token을 base64 인코딩하여 인증.
  • From은 Twilio에서 발급받은 발신 번호, To는 수신자 번호(+82 한국 국가 코드 포함).
  • Body에 보낼 메시지를 입력.

🔹 3. Twilio API 테스트 (Flutter 실행 없이 먼저 확인)

API가 정상적으로 작동하는지 먼저 확인하고 싶다면, Postman 또는 Curl을 사용하여 Twilio API를 직접 호출해볼 수 있습니다.

✅ Curl로 Twilio 테스트

curl -X POST "https://api.twilio.com/2010-04-01/Accounts/your_account_sid/Messages.json" \
--data-urlencode "Body=Flutter에서 Twilio SMS 테스트!" \
--data-urlencode "From=+1234567890" \
--data-urlencode "To=+8210XXXXXXXX" \
-u your_account_sid:your_auth_token

✅ 이 명령어가 성공하면, Flutter에서도 정상적으로 실행될 가능성이 높습니다.


🔹 4. Twilio SMS를 Flutter UI와 연동

Flutter UI에서 버튼을 눌러 SMS를 보낼 수 있도록 간단한 UI를 추가할 수도 있습니다.

✅ Flutter 버튼 UI + Twilio SMS 전송

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

class TwilioService {
  final String accountSid = "your_account_sid";
  final String authToken = "your_auth_token";
  final String twilioNumber = "+1234567890";
  final String myPhoneNumber = "+8210XXXXXXXX";

  Future sendSms(String message) async {
    final String url = "https://api.twilio.com/2010-04-01/Accounts/$accountSid/Messages.json";

    final response = await http.post(
      Uri.parse(url),
      headers: {
        "Authorization":
            "Basic ${base64Encode(utf8.encode('$accountSid:$authToken'))}",
        "Content-Type": "application/x-www-form-urlencoded"
      },
      body: {
        "From": twilioNumber,
        "To": myPhoneNumber,
        "Body": message
      },
    );

    if (response.statusCode == 201 || response.statusCode == 200) {
      print("SMS 전송 성공!");
    } else {
      print("SMS 전송 실패: ${response.body}");
    }
  }
}

void main() {
  runApp(SmsApp());
}

class SmsApp extends StatelessWidget {
  final TwilioService twilioService = TwilioService();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Flutter Twilio SMS")),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              twilioService.sendSms("Flutter에서 Twilio로 문자 전송 테스트!");
            },
            child: Text("SMS 보내기"),
          ),
        ),
      ),
    );
  }
}

설명

  • ElevatedButton을 눌렀을 때 Twilio API를 호출하여 문자 메시지를 보냄.
  • TwilioService를 활용하여 비동기적으로 API 요청을 처리.
  • Flutter UI와 Twilio SMS API를 쉽게 연동 가능!

🔹 5. Twilio 대체 API (한국 전용)

Twilio는 한국에서 사용할 때 무료 계정에서는 발신번호 제한이 있습니다.
네이버 클라우드 SMS API를 사용하면 한국 통신사(KT, SKT, LG U+)에 직접 문자 전송 가능합니다.
👉 Flutter에서 네이버 클라우드 SMS API 사용법을 원하면 요청하세요!


🔹 결론

방법 장점 단점

Twilio API 사용이 간편하고 글로벌 지원 한국 무료 계정은 발신번호 제한
네이버 클라우드 SMS 한국 통신사 직접 지원 API Key 필요

📌 추천:

  • 해외 번호 지원이 필요하다면 → Twilio API
  • 한국 번호로 직접 문자 보내려면 → 네이버 클라우드 SMS API

이제 Flutter에서도 Twilio API를 사용하여 SMS를 보낼 수 있습니다! 🚀

반응형