앱ID: * 775109
이전에 아래 글로 카카오 소셜 로그인 에러 질문 드렸었고 답 주신대로 catch 블록에서 await UserApi.instance.me() 호출을 제거해서 해당 에러는 사라졌습니다.
→ 카카오 소셜 로그인 이전 질문
다만, 에러는 달라졌지만 이전부터 발생하던 에러는 동일하게 발생합니다.
카카오가 설치되어있음에도 카카오톡 로그인이 안 되는 경우예요.
@override
Future<bool> login() async {
try {
bool isInstalled = await isKakaoTalkInstalled();
if (isInstalled) {
// 로그인
try {
// 로그인
await UserApi.instance.loginWithKakaoTalk();
return true;
} catch (error) {
if (error is PlatformException && error.code == "CANCELED") {
final user = await UserApi.instance.me();
await sendMail("카카오 로그인 에러",
"사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소하였습니다.\n\nerrorMessage: $error\n\nkakaoId: ${user.id}");
return false;
}
try {
await UserApi.instance.loginWithKakaoAccount();
return true;
} catch (error) {
final user = await UserApi.instance.me();
await sendMail("카카오 로그인 에러",
"카카오톡에 연결된 카카오 계정이 없습니다. 다시 카카오 계정으로 로그인 시도하였으나 실패했습니다.\n\nerrorMessage: $error\n\nkakaoId: ${user.id}");
return false;
}
}
} else {
// 로그인 x
try {
// 토큰 생성
await UserApi.instance.loginWithKakaoAccount();
return true;
} catch (error) {
final user = await UserApi.instance.me();
await sendMail("카카오 로그인 에러",
"기기에 카카오톡 설치가 되지 않았습니다. 다시 로그인 후 시도했으나 실패했습니다.\n\nnerrorMessage: $error\n\nkakaoId: ${user.id}");
return false;
}
}
} catch (error) {
// 설치 여부 체크 x
final user = await UserApi.instance.me();
await sendMail("카카오 로그인 에러",
"카카오 설치 과정 자체에 에러가 발생했습니다.\n\nnerrorMessage: $error\n\nkakaoId: ${user.id}");
return false;
}
}
이 로그인 함수 부분에서 await isKakaoTalkInstalled() 함수가 false로 떨어지고
await UserApi.instance.loginWithKakaoAccount() 호출도 실패해서 catch 블록으로 떨어집니다.
그래서 아래의 에러 메세지가 와요.
PlatformException(CANCELED, User canceled., null, null)
현재까지 에러가 발생했던 핸드폰 기종들은 너무 다양한데 그 중 몇가지를 전달드립니다,
Android / iOS 모두 발생하고 있고 버전도 다양해서 핸드폰 기기 버전의 문제는 아닌 것 같습니다.
Platform: Android
Device Model: Pixel 6 Pro
Android Version: 12
Platform: iOS
Device Model: iPhone
iOS Version: 17.3.1
Platform: Android
Device Model: SM-G991N
Android Version: 14
안드로이든는 AndroidManifest 파일에 아래와 같이 권한 설정을 application 태그 하위에 해줬습니다.
<activity
android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity"
android:exported="true">
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- "kakao${YOUR_NATIVE_APP_KEY}://oauth" 형식의 앱 실행 스킴 설정 -->
<!-- 카카오 로그인 Redirect URI -->
<data android:scheme="kakao~~앱코드~~" android:host="oauth"/>
</intent-filter>
</activity>
iOS는 Info.plist 파일에 아래와 같이 권한 설정해주었구요.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakao~~앱코드~~</string>
<string>kakaokompassauth</string>
<string>kakaolink</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>kakao</string>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao7b75ed8572cde8b500be41d8bbf28296</string>
</array>
</dict>
</array>
카카오 로그인이 되는 분들도 있고, 안 되는 분들도 있는데 어떤 부분이 문제인지 알 수 있을까요?