Version of kakao-login libraries
v5.2.4
Version of react-native
v0.70.5
Platforms you faced the error (IOS or Android or both?)
둘다 해당합니다.
Expected behavior
카카오 동의한 약관 확인하기 해당 사항을 이용한 카카오 싱크 적용하여 동의 화면 띄웠을때 채널 가입 가능한 아래 선택 동의 항목을 받아올 수 없는 문제 해결
Actual behavior
해당 사항을 해결하기 위해서
RNKakaoLoginsModule.kt
@ReactMethod
private fun getServiceTerms(promise: Promise) {
// 동의한 약관 확인하기
UserApiClient.instance.serviceTerms { userServiceTerms, error ->
if (error != null) {
promise.reject("RNKakaoLogins", error.message, error)
return@serviceTerms
}
else if (userServiceTerms != null) {
val map = Arguments.createMap()
val list: List<ServiceTerms>? = userServiceTerms.allowedServiceTerms
val jsonObject = JSONObject()
val allowedServiceTerms: ArrayList<String> = ArrayList()
if (list != null) {
for (item in list!!) {
Log.d("allowedServiceTerms", item.tag);
Log.d("allowedServiceTerms", item.agreedAt.toString());
jsonObject.put("tag", item.tag);
jsonObject.put("agreedAt", item.agreedAt.toString());
allowedServiceTerms.add(jsonObject.toString())
}
Log.d("allowedServiceTerms", allowedServiceTerms.toString());
}else {
promise.reject("RNKakaoLogins", "serviceTerms is null")
}
map.putString("user_id", userServiceTerms.userId.toString());
map.putString("allowedServiceTerms", allowedServiceTerms.toString());
promise.resolve(map)
return@serviceTerms
}
promise.reject("RNKakaoLogins", "serviceTerms is null")
}
}
RNKakaoLogins.swift
@objc(getServiceTerms:rejecter:)
func getServiceTerms(_ resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
DispatchQueue.main.async {
let encoder = JSONEncoder()
UserApi.shared.serviceTerms {(serviceTerms, error) in
if let error = error {
reject("RNKakaoLogins", error.localizedDescription, nil)
}
else {
print("serviceTerms() success.")
let jsonData = try? encoder.encode(serviceTerms?.allowedServiceTerms)
if let jsonData = jsonData, let allowedServiceTerms = String(data: jsonData, encoding: .utf8){
print("allowedServiceTerms",allowedServiceTerms)
resolve([
"userId" : serviceTerms?.userId ?? "",
"allowedServiceTerms" : allowedServiceTerms
])
}else {
reject("RNKakaoLogins", "serviceTerms() failed.", nil)
}
}
}
}
}
위의 사항 처럼 모듈을 커스텀 해서 활용하고 있습니다. 해당 부분이 추가가 된다면 좀 더 수월하게 사용할 수 있을것 같습니다.
Tested environment (Emulator? Real Device?)
Version of kakao-login libraries
v5.2.4
Version of react-native
v0.70.5
Platforms you faced the error (IOS or Android or both?)
둘다 해당합니다.
Expected behavior
카카오 동의한 약관 확인하기 해당 사항을 이용한 카카오 싱크 적용하여 동의 화면 띄웠을때 채널 가입 가능한 아래 선택 동의 항목을 받아올 수 없는 문제 해결
Actual behavior
해당 사항을 해결하기 위해서
RNKakaoLoginsModule.kt
@ReactMethod private fun getServiceTerms(promise: Promise) { // 동의한 약관 확인하기 UserApiClient.instance.serviceTerms { userServiceTerms, error -> if (error != null) { promise.reject("RNKakaoLogins", error.message, error) return@serviceTerms } else if (userServiceTerms != null) { val map = Arguments.createMap() val list: List<ServiceTerms>? = userServiceTerms.allowedServiceTerms val jsonObject = JSONObject() val allowedServiceTerms: ArrayList<String> = ArrayList() if (list != null) { for (item in list!!) { Log.d("allowedServiceTerms", item.tag); Log.d("allowedServiceTerms", item.agreedAt.toString()); jsonObject.put("tag", item.tag); jsonObject.put("agreedAt", item.agreedAt.toString()); allowedServiceTerms.add(jsonObject.toString()) } Log.d("allowedServiceTerms", allowedServiceTerms.toString()); }else { promise.reject("RNKakaoLogins", "serviceTerms is null") } map.putString("user_id", userServiceTerms.userId.toString()); map.putString("allowedServiceTerms", allowedServiceTerms.toString()); promise.resolve(map) return@serviceTerms } promise.reject("RNKakaoLogins", "serviceTerms is null") } }RNKakaoLogins.swift
위의 사항 처럼 모듈을 커스텀 해서 활용하고 있습니다. 해당 부분이 추가가 된다면 좀 더 수월하게 사용할 수 있을것 같습니다.
Tested environment (Emulator? Real Device?)