Closed timekeeper88 closed 2 years ago
안녕하세요
kakao_flutter_sdk에는 isKakaoTalkLoginAvailable()
메소드와 비슷한 역할을 하는 메소드로 UserApi#isKakaoTalkInstalled
메서드가 있습니다.
하지만 해당 메소드는 패키지 명을 기반으로 카카오톡의 설치 유무를 판단해주기 때문에 톡의 로그인 유무는 알 수 없습니다.ㅠㅠ
UserApi#loginWithKakaoTalk
를 호출했을 때, iOS 환경에서는 톡 로그인이 되어있지 않아도 에러가 발생하지 않지만, 안드로이드 환경에서는 앱의 상황에 따라 동작이 달라집니다.
카카오톡 설치 후, 최초 앱 실행 상황(권한 허용 화면)일 때는 UserApi#loginWithKakaoTalk
를 호출해도 에러가 발생하지 않고 톡으로 전환되고, 톡 로그인을 하신 뒤 다시 UserApi#loginWithKakaoTalk
를 호출해서 간편 로그인이 가능합니다.
하지만 카카오톡 설치 후 권한 허용까지 진행하고 로그인이 되어있지 않은 상황(로그인 화면)이라면 UserApi#loginWithKakaoTalk
를 호출했을 때 다음과 같은 에러가 발생하게 됩니다.
PlatformException(NotSupportError, KakaoTalk is installed but not connected to Kakao account., null, null)
따라서 아래와 같이 구현하시기를 권장드립니다.
void login() async {
bool talkInstalled = await isKakaoTalkInstalled();
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (talkInstalled) {
try {
OAuthToken token = await UserApi.instance.loginWithKakaoTalk();
print('카카오톡으로 로그인 성공 ${token.accessToken}');
} catch (e) {
print('카카오톡으로 로그인 실패 $e');
// 유저에 의해서 카카오톡으로 로그인이 취소된 경우 카카오계정으로 로그인 생략 (ex 뒤로가기)
if (e is PlatformException && e.code == 'CANCELED') {
return;
}
// 카카오톡에 로그인이 안되어있는 경우 카카오계정으로 로그인
try {
OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
print('카카오계정으로 로그인 성공 ${token.accessToken}');
} catch (e) {
print('카카오계정으로 로그인 실패 $e');
}
}
} else {
try {
OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
print('카카오계정으로 로그인 성공 ${token.accessToken}');
} catch (e) {
print('카카오계정으로 로그인 실패 $e');
}
}
}
Stale issue message
카카오톡은 설치되어있으나, 로그인이 되지 않은 상황에서 loginWithKakaoTalk() 호출 시, "KakaoTalk is installed but not connected to Kakao account"의 문구와 함께 오류가 발생합니다.
kakao developer 사이트에 해당 이슈 관련하여, isKakaoTalkAvailable 메소드를 사용하여 처리할 것을 추천하였는데
현재 kakao_flutter_sdk v.0.9.0에서는 해당 메소드가 지원이되지 않는 것 같아
어떤식으로 해당 이슈처리를 하면되는지 문의드립니다.
개발 환경