Skip to content

카카오 싱크를 진행 후 카카오 동의한 약관 확인하기 기능을 추가 해야 할 것 같습니다. #352

@Kwon-Bum-Kyu

Description

@Kwon-Bum-Kyu

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
해당 사항을 해결하기 위해서

  • Android

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")
        }
    }
  • iOS

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?)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions