문의 시 사용하시는 SDK 버전 정보를 알려주세요.
사용 버젼:
pod ‘RxKakaoSDKCommon’, ‘~> 2.6.0’
pod ‘RxKakaoSDKAuth’, ‘~> 2.6.0’
pod ‘RxKakaoSDKUser’, ‘~> 2.6.0’
pod ‘RxKakaoSDKLink’, ‘~> 2.6.0’
===========
해당 버전의 sdk의 Properties.swift 파일에서
public class Properties {
static let sdkVersionKey = "com.kakao.sdk.version"
public static func saveCodable<T: Codable>(key: String, data:T?) {
if let encoded = try? JSONEncoder().encode(data) {
SdkLog.d("save-plain : \(encoded as NSData)")
guard let crypted = SdkCrypto.shared.encrypt(data: encoded) else { return }
SdkLog.d("save-crypted : \(crypted as NSData)")
UserDefaults.standard.set(crypted, forKey:key)
UserDefaults.standard.synchronize()
}
}
public static func loadCodable<T: Codable>(key: String) -> T? {
if let data = UserDefaults.standard.data(forKey: key) {
SdkLog.d("load-crypted : \(data as NSData)")
guard let plain = SdkCrypto.shared.decrypt(data: data) else { return nil }
SdkLog.d("load-plain : \(plain as NSData)")
do {
return try JSONDecoder().decode(T.self, from:plain)
} catch {
print("error occured while decoding to OAuthToken: \(error.localizedDescription)") // T: OAuthToken
// error occured while decoding to OAuthToken: 올바른 포맷이 아니기 때문에 해당 데이터를 읽을 수 없습니다.
return nil
}
//return try? JSONDecoder().decode(T.self, from:plain)
}
return nil
}
}
SDK에서 userdefault에 “com.kakao.sdk.version” 키에 암호화 하여 OAuthToken을 저장하는 것으로 알고 있는데요. 앱이 설치되고 로그인 된 채로, 업데이트가 이루지면, loadCodable() 부분에서 다시 "com.kakao.sdk.version"키에 암호화되어 저장된 값을 decode하여 OAuthToken 변환할 때, try JSONDecoder().decode(T.self, from:plain) 에서 <올바른 포맷이 아니기 때문에 해당 데이터를 읽을 수 없습니다> 라는 에러가 발생하면서, 디코딩이 실패하여 TokenManager의 token으로 다시 불러오지 못하고, 따라서 카카오 로그인이 풀리고 있습니다.
하지만, 로그인이 된채로 앱 업데이트가 될 때, 카카오 로그인이 해제되는 것은 정상적인 작동이 아닌 것 같은데,
혹시 제가 잘못파악한 게 있거나, 다른 해결책이 있을지 궁금합니다.
해당 현상 다음의 기기/OS 환경에서 간헐적으로 발생하고 있습니다 :
- iPhone Xs Max / iOS15.1
- iPhone 12 Pro Max / iOS 15.1
- iPad7 / iPadOS 14.7.1