📌 Android SMS 본인 인증 유저의 정보 얻어오기
📕 감잡기
단순한 성공과 실패의 본인 인증 결과만이 아닌, 본인 인증에 성공한 유저의 정보를 가져오고 싶다면
아임포트에서 제공하는 rest api를 통하여 받아와야 합니다.
이는
https://api.iamport.kr/users/getToken 로의 POST 요청으로 access_token을 받아오고,
https://api.iamport.kr/certifications/imp_xxxxxxxxxx 로의 GET 요청으로 유저 프로필을 받는
2단계로 가능합니다.
✉️ Full 예제 확인!
📗 개발 방법
/users/getToken
API 호출에 필요한 변수: imp_key, imp_secret
imp_key와 imp_secret은 아임포트 관리자 페이지에서 얻을 수 있는 값 입니다.
/certifications/{imp_uid}
API 호출에 필요한 변수: (Header) Authorization, imp_uid
Authorization의 경우 위의 getToken API에서 얻은 key이며,
imp_uid는 인증에 성공했을 시 response로 얻을 수 있는 값 입니다.
이전글에서, 인증에 성공하였을 때에, result success값과 함께 넘겨주었던 값 중 하나입니다.
정리하자면
/users/getToken Api를 통하여 token을 얻고, 해당 키와 imp_uid를 통하여 결제 유저의 정보를 가져오는 식입니다.
이제 전 글과 이어서, Android에서 Api 호출을 위한 비동기 처리 진행 예시를 작성해보도록 하겠습니다.
📘 Android에서의 API 처리
Retrofit2으로 처리하였으며, MVVM 패턴을 활용하여 작업하였습니다.
우선 Retrofit2 Response용 3가지 클래스를 준비합니다.
getToken Api Response를 받기위한 Class입니다.
@Keep
data class SmsAuthResponse(
@SerializedName("code") var code : Int? = null,
@SerializedName("message") var message : String? = null,
@SerializedName("response") var response : SmsAuthTokenResponse? = null
)
@Keep
data class SmsAuthTokenResponse(
@SerializedName("access_token") var access_token : String? = null,
@SerializedName("now") var now : Int? = null,
@SerializedName("expired_at") var expired_at : Int? = null
)
그리고 이것은 인증 UserProfile을 받기 위한 Class입니다.
@Keep
data class SmsAuthUserProfileResponse(
@SerializedName("birth") var birth : Int? = null,
@SerializedName("certified") var certified : Boolean? = null,
@SerializedName("certified_at") var certified_at : Int? = null,
@SerializedName("gender") var gender : String? = null,
@SerializedName("name") var name : String? = null,
@SerializedName("phone") var phone : String? = null
)
위의 클래스들은, 아래의 retrofit2 interface를 위해 만든 것 입니다.
/* IMPORT */
@GET("/certifications/{imp_uid}")
suspend fun getAuthProfile(@Header("Authorization") token: String, @Path("imp_uid") imp_uid: String) : SmsAuthUserProfileResponse
@FormUrlEncoded
@POST("/users/getToken")
suspend fun postAccessToken(@Field("imp_key") imp_key: String, @Field("imp_secret") imp_secret: String) : SmsAuthResponse
주의하셔야 할 점은, 네트워크 도메인은 https://api.iamport.kr 라는 점입니다.
마지막으로, 아래는 retrofit2 과 coroutine을 이용한 네트워크 통신 소스 코드 예시입니다.
// in ViewModel.kt
fun smsAuthPostAccessToken(imp_key: String, imp_secret: String, auth_user_imp_uid: String) {
viewModelScope.launch(Dispatchers.IO) {
try {
smsAuthApi.postAccessToken(imp_key, imp_secret).apply {
/** 첫번째 API를 통하여 access_token을 얻고, 얻어낸 즉시 두번째 API 호출 진행 */
this.response?.access_token?.let {
smsAuthGetAuthProfile(it, auth_user_imp_uid)
}
}
} catch (e: Throwable) {
...
}
}
}
suspend fun smsAuthGetAuthProfile(access_token: String, auth_user_imp_uid: String) {
smsAuthApi.getAuthProfile(access_token, auth_user_imp_uid).apply {
/** API 호출로 얻은 name과 phone값을 통하여 가입 진행 */
this.name?.let { name ->
this.phone?.let { phone ->
join(name, phone)
}
}
}
}
이로써 인증 결과 및 인증 유저의 값까지 가져올 수 있게 되었습니다.
'Android > 연동 방법' 카테고리의 다른 글
[Android/연동방법] SMS 본인인증 연동 (with iamport, 아임포트) (1) (9) | 2019.10.14 |
---|---|
[Android/연동 방법] Google Play Console 프로덕션 Key Hash 얻기 (0) | 2019.09.16 |
[안드로이드/Android] Android Studio BitBucket 연동 방법 (0) | 2019.08.22 |
[안드로이드/Android] Android Studio 통해 SHA1 Key 매우 쉽게 알아내기 (0) | 2019.08.20 |