iOS 앱에서 로그인 시 일부 회원에서 KakaoSDKCommon.AuthFailureReason.InvalidRequest 에러가 발생합니다

안녕하세요.
최근까지 카카오 SDK v1을 사용하다가 카카오 SDK v2로 마이그레이션을 했습니다.
그리고 우연의 일치인지는 모르겠지만, 마이그레이션을 한 버전부터 카카오 로그인 시 일부 소수 회원들에게서 다음과 같은 오류가 발생하면서 로그인이 되지 않는 현상이 발견되고 있습니다.

message:AuthFailed(reason: KakaoSDKCommon.AuthFailureReason.InvalidRequest, errorInfo: Optional(KakaoSDKCommon.AuthErrorInfo(error: KakaoSDKCommon.AuthFailureReason.InvalidRequest, errorDescription: Optional(“All required service terms must be approved. required:[7828, 7829, 7830] agreed:[]”))))

실제로 해당 오류를 겪은 회원은 웹에서는 회원가입과 로그인을 했는데 IOS 앱에서는 로그인이 되지 않는다고 합니다.
필수 동의 항목을 변경한 적이 없고, 단순히 버전 마이그레이션만 했는데 원인을 알 수 있을 까요?

또한 오류로 인해 필수 동의 항목이 누락된 게 맞다면 기존에 필수 동의 항목이 누락된 회원들을 어떻게 다시 항목을 동의시킬 수 있는지 알려주시면 감사하겠습니다.

감사합니다.

안녕하세요~

확인을 위해 앱 ID 알려주세요~


앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다~
ex) 123456

88615 입니다.

로그를 보니 해당 에러는 JAVASCRIPT_KEY로 인가 요청할때만 발생하는 걸 봐서는 SDK 업데이트와 무관해보입니다.

아마도 iOS에서는 하이브리드앱방식을 사용하시는 것 같은데요.

(1) 사이트 소스를 보니 REST-API방식 을 사용하시며
(2) 해당 에러가 11월 1일 부터 발생했고 11월 7일 16시가 마지막이고,
11월 1일 파라메터 오류가 발생한 것으로 봐서는

웹페이지내 카카오 로그인 설정에 문제가 있었던 것으로 추측됩니다.

현재는 문제 없이 작동하는 것 같은데요. 추가 발생 시 댓글 주시면 확인해보겠습니다.

그리고 REST-API로그인을 하고 있으므로 JAVASCRIPT_KEY가 아니라 REST-API-KEY를 사용하시는게 좋을 것 같습니다.
확인 부탁드려요.

iOS에서는 하이브리드앱 방식을 사용하고 있지 않습니다.

해당 가이드 보고 네이티브로 구현했습니다.

오류가 발생한 회원은 웹페이지에서 회원가입 후 로그인까지 잘 사용하시다가, IOS 앱을 사용하여 로그인 할 떄 문제가 발생했다고 말했습니다.

(1) iOS로그인 (인가 요청) 구현부 코드블럭 공유해주세요.

(2) 해당 앱 제가 다운로드 받아 설치해볼 수 있는 URL알려주시겠어요?

// 카카오톡 설치 여부 확인
if (UserApi.isKakaoTalkLoginAvailable()) {
  
  // 카카오톡 앱으로 로그인
  UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
    if let error = error {
      Alert(title: "common_alarm".localized, message: "카카오톡으로 로그인을 하실수 없습니다.")
        .addAction("common_ok".localized, style: .destructive, handler: { [weak self] _ in
          guard let `self` = self else {
            return
          }
        }).show()
    }
    else {
      // 유저 정보를 읽어오는 로직
      self.kakaoUserMe()
    }
  }
}
else {
  
  // 카카오톡 계정으로 로그인
  UserApi.shared.loginWithKakaoAccount {(oauthToken, error) in
    if let error = error {
      Alert(title: "common_alarm".localized, message: "카카오톡으로 로그인을 하실수 없습니다.")
        .addAction("common_ok".localized, style: .destructive, handler: { [weak self] _ in
          guard let `self` = self else {
            return
          }
        }).show()
    }
    else {
      // 유저 정보를 읽어오는 로직
      self.kakaoUserMe()
    }
  }
}

앱스토어 URL

로그상에는 해당 에러가 JAVASCRIPT_KEY로 요청 했을때 밖에 없어서 착각했네요.

해당 에러 겪은 유저의 앱유저ID와 에러 발생시간 알 수 있을까요?


All required service terms must be approved. required:[7828, 7829, 7830] 에러는 동의 받을 약관을 별도로 설정한 경우 보통 발생합니다. 첨부해주신 로그인 로직과 해당 앱에서 재현 테스트 해보니 현재 상태는 문제 없어보입니다.

약관 선택해 동의 받기 | Kakao Developers 문서

답변이 늦엇습니다.
에러 발생 시간은 정확히 알지 못하고,1611813362 입니다.

로그를 확인해봤지만 해당 유저의 NATIVE_APP_KEY로 인가요청한 로그에는 오류가 없습니다.
다만, 인가요청 이후 토큰 요청없는 증상이 있었는데

오늘 (11월 9일 )로그를 보니 NATIVE_APP_KEY로 인가요청과 토큰요청이 정상 처리되었습니다.

iOS앱에 어떤 조치하셨나요?

안녕하세요. 안그래도 오늘 추가 문의 드리려고 했습니다.
저희 측에서는 아무런 조치도 취하지 않았는데, 회원분께서 iOS 엡에서 안되던 카카오 로그인이 정상적으로 실행된다고 연락이 왔습니다.
그래서 tim.l 님께서 어떠한 조치를 취해주신 줄 알았습니다.
기존에는 카카오로 로그인하기를 누르면 카카오톡이 실행되었다가 다시 앱으로 돌아온 뒤 카카오톡 로그인 에러(제가 보내드렸던 로그)가 발생했다고 했었습니다.

계속 저희의 앱스토어 기준으로 최신 버전의 앱을 사용했었는데, 어떻게 JAVASCRIPT_KEY로 요청했다가 이번에는 NATIVE_APP_KEY키로 요청할 수가 있는지 의문입니다.
저는 Native 환경에서 위에 적어드린 코드만을 사용하고 있습니다.

오류가 최초 발생한 시점(2021.11.01)과 오늘사이에 혹시 저희의 카카오 설정의 변경점이 있었나요?
저희는 앱에 어떠한 조치도 취하지 않았습니다.

그리고 인가 요청 이후 토큰 요청 없는 증상이란 무엇인가요?
그것이 이번 오류와 연관이 있을까요? 차후에 해당 오류가 발생하는 것을 미연에 방지하고 싶습니다.

설정 변경 관점에서 좀더 내용 확인하고 공유 드리겠습니다.


JAVASCRIPT_KEY로 요청했다가 이번에는 NATIVE_APP_KEY키로 요청할 수가 있는지 의문입니다.

(1) 1611813362 유저는 ‘All required service terms must be approved.’ 에러 이력이 없습니다.
(2) 웹에서 JAVASCRIPT_KEY로 정상 로그인 하셨고, 앱에서 NATIVE_APP_KEY로 인가요청 후 토큰 요청 이력이 없습니다.
(11월 9일 오늘 부터는 NATIVE_APP_KEY도 정상처리되고 있습니다.)


1611813362와 별개로 ‘All required service terms must be approved.’ 에러 이력은 웹에서 JAVASCRIPT_KEY로 인가 요청한경우만 로그확인됩니다.


에러 증상과 로그상 인과관계가 없어서 유추하기가 어려운데요.
분석 후 공유 드리겠습니다.

네 감사합니다. 기다리고 있겠습니다.

로그를 봤지만, 설정 변경은 플랫폼 설정 두차례말고는 없네요.

1611813362유저가 ‘All required service terms must be approved.’ 에러 발생한 것은 어떤 방식으로 알게되신건가요?

카카오 로그인이 에러가 날때 로그 분석툴을 이용하여 로그를 저장하고 있습니다.

실제로 로그인이 이루어 지지 않았기 때문에 로그에 회원정보가 없어서
해당 회원이 그 에러가 났다고 확신 할 순 없었지만, 해당 버전에서 난 오류를 모두 살펴본 결과
유저에 의해 취소됨, 유저가 로그인 거절함 에러를 제외하고는
해당 에러 'All required service terms must be approved’만 존재하였고, 에러 발생시점도 일치했기 때문에
해당 회원이 그 에러를 겪었다고 생각했습니다.

회원분께서 카카오 로그인을 누르고 카카오톡이 켜진 뒤, 다시 저희 앱으로 돌아와서 로그인이 실패(에러)했다고 말씀하셨기 때문에 카카오 로그인 프로세스 취소나, 로그인 거절 등의 에러는 아니라고 확신했습니다.

그러면 정확한 원인과 앞으로 발생할 같은 에러에 대해서 미연에 방지할 수 있는 방법은 없을까요?( Web환경이나 App환경 모두)

해당 회원은 웹사이트에서 먼저 회원가입을 한 뒤 웹에서 로그인도 정상적으로 되어 사용하였지만, 동일한 카카오 계정으로 앱 환경에서 로그인을 시도 했을 때 로그인이 되질 않았습니다.

또 이전에는 되질 않았다가, 아무런 카카오 설정도, 앱 업데이트도 하질 않았는데 로그인이 어떻게 되었는지도 궁금합니다…

iOS SDK개발자에게 문의해서

"All required service terms must be approved. required:[7828, 7829, 7830] " 에러는 SDK에서 출력하는게 아니라
인증 서버에서 받아서 출력한다고 확인 했는데요.

실제 로그에는 NATIVE_APP_KEY 로 인증 서버에서 해당 에러를 출력한 이력 이 없었어요.
즉, iOS SDK를 사용 중 발생한 에러는 아니라는 것인데요.


인증 서버 이력에는 JAVASCRIPT_KEY를 사용했을때만 해당 에러가 확인 되고
이 에러는 카카오 싱크 적용하시면서 등록한 서비스 약관에 기존 회원이 동의하지 않고 진입했을때 발생할 수 있습니다.
즉, 기존 카카오 로그인회원이 약관동의를 하지 않은 상태에서 동의창 없이 진입했다는 것으로 유추할 수 있는데요.


카카오톡 인앱브라우저에서 웹사이트로 자동로그인을 시도한다면 에러가 재현될 수 있을 것 같긴합니다.

카카오톡 인앱브라우저에서 자동로그인은

(1) REST-API 방식 인가 요청일때, promt=none 파라메터를 전달하면 톡으로 인증하여 동의창 없이 인가 요청합니다. 필수 동의를 받지 않은경우 위 에러가 발생하구요.

(2) js sdk authorize함수에 promt=none 파라메터를 전달하거나 loginForm함수를 사용하는 경우도 자동로그인 구현할 수 있습니다.


로그를 가지고 합리적으로 의심해볼 수 있는 상황은

아이폰 카카오톡 인앱브라우저에서 서비스하시는 웹사이트에 접근하여 자동로그인 하는 경우 말고는 딱히 가능성이 없어보이긴하네요.

혹시, prompt=none설정이 있나요?

(참고로, 어디서든 필수 약관 동의가 되면 해당 문제는 해소되어 더이상 발생하지 않게됩니다.)

회원은 오류를 겪은 상황을 이렇게 말해주었습니다.

  1. 사용자가 네이티브 앱에서 카카오 로그인하기를 누름(아이폰에 카카오톡이 깔려있음)
  2. 카카오톡이 켜짐, 로그인 성공, 네이티브 앱으로 돌아감
  3. 네이티브 앱에서 오류 발생

그래서 말씀해주신 케이스는 아닌 것 같습니다.

그럼, 이전에 말씀하셨던 해당 회원이 겪었던, 인가 요청 후 토큰 요청 없는 증상은 발생하는 원인이 무엇인가요?
SDK에서 발생한 일시적인 오류인지, 앱이나 웹에서의 로그인 과정에서의 누락된 처리 과정이 있는 걸까요?