티스토리 뷰
[ 목표 ]
보통 앱의 설정 탭에 문의하기(또는 피드백 보내기) 기능을 넣어서
사용자가 회사 또는 개발자에게 의견을 보낼 수 있도록 합니다.
아이폰 기준,
기본 메일 앱이 깔려있고 메일 앱에 이메일을 등록해놨다면 email을 보낼 수 있는 폼이 나오고
아니라면 얼럿을 띄워줍니다.
(MFMailComposeViewController 로 이 기능을 구현합니다.)
'포토위젯' 앱의 경우
'프립' 앱의 경우
검색해보니, 안드로이드는 기본 메일 앱이 gmail이라서 gmail 앱 으로 랜딩시킨다고 하네요.
플러터 문서를 검색해보니 email 관련해서 제공해주는 Widget이나 유틸 같은 것은 따로 없는 것 같고
써드파티 패키지를 검색해보니 나옵니다..! (flutter email send라고 검색하면 됨)
저는 제일 간단해보이는 pub.dev/packages/flutter_email_sender 이 패키지를 사용하여서
이 기능을 구현해보겠습니다.
[1] 패키지 설치
pubspec.yaml > dependencies 에 아래 라인을 복붙해주시고
flutter_email_sender: ^4.0.0
flutter pub get 해줍니다.
[2] 문의하기 버튼 만들기
CupertinoButton(
child: Text("문의하기", style: _textStyle),
padding: EdgeInsets.zero,
onPressed: () {
_sendEmail();
},
),
[3] _sendEmail 메소드 작성
문의하기 버튼을 누르면 실행되는 메소드를 작성해주겠습니다.
'프립' 앱이 좋은 사례여서 에러메세지를 따라해줍니다.
import 'package:flutter_email_sender/flutter_email_sender.dart';
void _sendEmail() async {
final Email email = Email(
body: '',
subject: '[양파가족 문의]',
recipients: ['onionfamily.official@gmail.com'],
cc: [],
bcc: [],
attachmentPaths: [],
isHTML: false,
);
try {
await FlutterEmailSender.send(email);
} catch (error) {
String title = "기본 메일 앱을 사용할 수 없기 때문에 앱에서 바로 문의를 전송하기 어려운 상황입니다.\n\n아래 이메일로 연락주시면 친절하게 답변해드릴게요 :)\n\nonionfamily.official@gmail.com";
String message = "";
_showErrorAlert(title: title, message: message);
}
}
[4] 결과확인
4.1 안드로이드
gmail 앱이 깔려있고 계정 등록을 해놨다면
gmail 앱으로 랜딩되고 아래 화면이 뜹니다.
만약 gmail 앱에 계정등록을 안했으면 gmail 앱이 열리고 끝!
만약 gmail 앱이 안깔려있다면..? -> 이럴 일이 없음.
안드로이드 에뮬레이터에서 gmail 앱을 uninstall 할 수 없었습니다. 안드로이드는 기본 앱을 못지우나봐요.
4.2 iOS
메일 앱이 깔려있고 계정 등록을 해놨다면
현재 앱 내에서 이메일 폼이 뜹니다.
만약 메일 앱이 안깔려있거나
메일 앱이 깔려있지만 계정등록을 안한 상태라면
error로 떨어집니다.
[5] body에 필요한 정보 추가하기
이제 mail body에 device info, app info, user info를 추가해보겠습니다. ('프립' 앱이 좋은 사례여서 따라 해줍니다.)
device info, app info 구하는 코드는 이 글을 참고해주세요
Future<String> _getEmailBody() async {
Map<String, dynamic> userInfo = _getUserInfo();
Map<String, dynamic> appInfo = await _getAppInfo();
Map<String, dynamic> deviceInfo = await _getDeviceInfo();
String body = "";
body += "==============\n";
body += "아래 내용을 함께 보내주시면 큰 도움이 됩니다 🧅\n";
userInfo.forEach((key, value) {
body += "$key: $value\n";
});
appInfo.forEach((key, value) {
body += "$key: $value\n";
});
deviceInfo.forEach((key, value) {
body += "$key: $value\n";
});
body += "==============\n";
return body;
}
void _sendEmail() async {
String body = await _getEmailBody();
final Email email = Email(
body: body,
subject: '[양파가족 문의]',
recipients: ['onionfamily.official@gmail.com'],
cc: [],
bcc: [],
attachmentPaths: [],
isHTML: false,
);
...
}
'🤼♀️ > Flutter' 카테고리의 다른 글
[Flutter] Marquee Widget 만들기 (1) - alternate (1) | 2021.04.23 |
---|---|
[Flutter] 기기 정보, 앱 정보 구하기 (Device Info, App Info) (3) | 2021.03.02 |
[Flutter] Text에 Gradient Color 넣기 (1) | 2020.11.27 |
[Flutter] iOS / 안드로이드 앱 배포하기 (4) | 2020.11.16 |
[Flutter] Firebase Dynamic Link 만들기 + 수신하기 (7) | 2020.11.13 |
- Total
- Today
- Yesterday
- flutter deep link
- Django Firebase Cloud Messaging
- ribs
- DRF APIException
- Python Type Hint
- ipad multitasking
- 플러터 얼럿
- Flutter Text Gradient
- Flutter Spacer
- Django Heroku Scheduler
- PencilKit
- Flutter getter setter
- Sketch 누끼
- Watch App for iOS App vs Watch App
- Dart Factory
- Flutter 로딩
- 플러터 싱글톤
- SerializerMethodField
- METAL
- 장고 URL querystring
- flutter build mode
- flutter 앱 출시
- 구글 Geocoding API
- drf custom error
- cocoapod
- 장고 Custom Management Command
- flutter dynamic link
- Django FCM
- github actions
- Flutter Clipboard
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |