flutter 앱에서 앱을 열어서 사용자에게 제공하기…

우리 앱에서 문의하기 페이지를 따로 만들지 않기로 결정했다. 그렇다면 이 기능은 그대로 사라지는 것일까?
윤여찬's avatar
Dec 11, 2024
flutter 앱에서 앱을 열어서 사용자에게 제공하기…
우리 앱에서 문의하기 페이지를 따로 만들지 않기로 결정했다. 그렇다면 이 기능은 그대로 사라지는 것일까?
 
아니다. 나는 기획자 출신의 개발자다. 사용자 경험(UX)을 중요하게 생각하는 자랑스러운 대한민국의 프론트엔드 개발자로서, 사용자에게 더 나은 대안을 고민했다.
 
그래서 선택한 방법은 바로 아래와 같다… "이메일로 문의하기" 버튼을 통해 앱에서 새로운 이메일 앱을 열어주는 방식이다. 이를 통해 안정적인 환경을 제공하며, 사용자에게는 이메일 주소, 제목, 본문 양식을 미리 채워 넣어 문의 내용을 작성하기만 하면 되도록 설계했다.
 
먼저, JavaScript 핸들러를 등록해 이메일 관련 데이터를 받아 Flutter에서 이메일 앱을 열도록 처리했다.

핸들러 로직

// 이메일 앱 열기 핸들러: JavaScript에서 전달된 이메일 정보를 사용해 이메일 앱 열기 _registerJavaScriptHandler( handlerName: 'openEmailApp', callback: (args) async { if (args.isNotEmpty) { String emailAddress = args[0]; // 이메일 주소 String subject = args.length > 1 ? args[1] : "No Subject"; // 이메일 제목 String body = args.length > 2 ? args[2] : "No Body"; // 이메일 본문 // 이메일 앱 열기 호출 await openEmailApp(emailAddress, subject, body); } return "Email app opened"; }, );
  • JavaScript에서 호출되며 이메일 주소, 제목, 본문을 전달받는다.
  • 이 데이터를 사용해 이메일 앱을 여는 함수인 openEmailApp을 호출한다.

주요 로직

// 메일 앱 열기 함수 Future<void> openEmailApp( String emailAddress, String subject, String body) async { final Uri emailUri = Uri.parse( 'mailto:$emailAddress?subject=${Uri.encodeComponent(subject)}&body=${Uri.encodeComponent(body)}'); try { if (await canLaunchUrl(emailUri)) { await launchUrl( emailUri, mode: LaunchMode.externalApplication, // 외부 앱에서 열기 강제 ); } else { throw 'Could not launch email app.'; } } catch (e) { print("Unable to open email app: $e"); } }
  1. mailto 스킴 사용:
      • 이메일 앱을 열기 위해 mailto: URI를 사용하며, 제목과 본문은 URL 인코딩 후 추가했다.
  1. 앱 실행 가능 여부 확인:
      • canLaunchUrl로 이메일 앱 실행 가능 여부를 확인 그 후 실행해준다.
  1. 외부 앱 실행 강제:
      • LaunchMode.externalApplication을 사용해 반드시 외부 앱에서 이메일 작성 화면을 실행한다. 이유는 웹뷰안에서 탭이 열리는 문제가 발생했기 때문에
  1. 예외 처리:
      • 앱 실행 실패 시 에러 메시지를 로깅해 사용자와 개발자 모두에게 문제를 알림. e 에러메세지

사용자 경험(UX) 강화

  • 불필요한 페이지 생략: 앱 내에서 별도의 "문의하기" 페이지를 만들지 않아도 사용자가 쉽게 문의할 수 있도록 UX 단순화하였다.
  • 사전 작성 필드 제공: 이메일 주소, 제목, 본문 양식을 미리 제공해 사용자 편의성을 극대화시켜 사용자가 신경쓸 부분을 줄였다.
  • 안정적이고 일관된 환경 제공: 사용자가 기존에 사용하던 이메일 앱에서 바로 문의를 작성하도록 설계했다.
notion image
위 사항들을 통해서 나는 우리앱에서 문의를 안전하고 빠르게 처리하도록 설계하였고 경험도 중요하게 반영하여 뿌듯? 하였다. 마치 aka 우체부…
 
Share article

찬찬잉