일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- native flutter view
- 스위프트 웹뷰
- 앱 꺼졌을 때 푸시 데이터 저장
- swift sms
- 안드로이드 바로가기
- NotificationService Extension
- flutter rotate
- silent push
- 노티피케이션 익스텐션
- 스위프트 테이블 뷰 셀
- 안드로이드 숏컷
- flutter 회전
- 플러터 뷰 컨트롤러
- swift autolayout
- Flutter NativeView
- Swift flutterviewcontroller
- FlutterView MethodChannel
- 스위프트 UserDefaults
- 스위프트
- swift 문자
- Flutter UIKitView MethodChannel
- 안드로이드 에러
- 스위프트 카메라
- 안드로이드 FCM
- 스위프트 앨범
- Swift flutterview
- 스위프트 푸시
- 안드로이드 앨범
- 앱 백그라운드 푸시 데이터 저장
- 푸시 데이터 저장
- Today
- Total
Things take time
[Flutter] 네이버클라우드플랫폼 사용시 Signature Key얻을 때! 본문
[네이버 클라우드 플랫폼의 SMS API]
https://apidocs.ncloud.com/ko/ai-application-service/sens/sms_v2/
SMS인증서비스는 네이버 클라우드도 있고, 해외전송까지 유용한 Twillio도 있고 다양한데, 그 중 네이버를 접할일이 있었다. 엄청 자세한건아니지만, 레퍼런스대로 해서 콘솔에서도 보내지고, Swagger에서도 보내지는건 확인했는데, 네이티브 쪽에서 보내지지 않는 문제 발생!!
보니, 자주할 수 밖에 없는 실수가 많더라. 단순히 함수 하나로 정리한다.
해당 시그니쳐 키는, SMS 뿐아니라 다른 네이버 클라우드 플랫폼 API에서 공통적으로 사용하니 알아두면 좋을것 같다. 레퍼런스에는 당연히(?) 다트가 없다.
String getSignature(
String serviceId, String timeStamp, String accessKey, String secretKey) {
var space = " "; // one space
var newLine = "\n"; // new line
var method = "POST"; // method
var url = "/sms/v2/services/$serviceId/messages";
var buffer = new StringBuffer();
buffer.write(method);
buffer.write(space);
buffer.write(url);
buffer.write(newLine);
buffer.write(timeStamp);
buffer.write(newLine);
buffer.write(accessKey);
print(buffer.toString());
/// signing key
var key = utf8.encode(secretKey);
var signingKey = new Hmac(sha256, key);
var bytes = utf8.encode(buffer.toString());
var digest = signingKey.convert(bytes);
String signatureKey = base64.encode(digest.bytes);
return signatureKey;
}
1. serviceID: 클라우드 플랫폼 콘솔에서 사용할 프로젝트를 생성하면 볼 수 있는 키 값이다.(옆 SecretKey는 사용하지 않으므로, 헷갈리지 말 것)
2. timeStamp : 다트에서는 아래와 같이 사용한다.
(DateTime.now().millisecondsSinceEpoch).toString();
3. accessKey & secretKey : 클라우드 플랫폼 메인에서 로그인 후, 마이페이지 내 API 키 관리에 있는 키 값이다.
중요한 것
1. url을 예제 그대로 "/photos/puppy.jpg?query1=&query2"; 이렇게 써버리면.. 안된다. 사용할 api의 주소인데, https://example.apigw.ntruss.com/이 주소 이 후의 값을 넣어야한다. example은 사용 api에 따라 다르며, 난 SMS를 예제로 들어서 POST https://sens.apigw.ntruss.com/sms/v2/services/{serviceId}/messages 이 부분중 com/이후의 값을 쓴 것이다. 즉, "/sms/v2/services/$serviceId/messages";
2. method를 보면 GET, POST가 있는데 실제 요청하는 API가 POST면, 시그니처를 얻는 method도 그 값에 맞춰야한다.
3. serviceID는 URLEncode를 해야한다. 즉, 저 위의 serviceId는 실제 아래와 같다.
Uri.encodeComponent('ncp:sms:kr:숫자:등록프로젝트명');
이 것만 조심하면 다 잘될 것이다!
'Flutter' 카테고리의 다른 글
[Flutter] 잡다한 플러터 이것저것(계속 수정/추가) (0) | 2022.05.17 |
---|---|
[Flutter] Flutter안에 Native(iOS)의 UIView 넣는 방법 (0) | 2022.05.17 |
[Flutter] 카카오 로그인 기본 설정 + invalid key hash (2) | 2020.07.30 |
[Flutter] Route 이동할 때 애니메이션 주기 (0) | 2020.07.21 |
[Flutter] popUntil할 때 데이터 전달까지 하고싶다면 (0) | 2020.07.16 |