SDK버전은 1.8.0 입니다.
개발자가이드에 따라서 if (await isKakaoTalkInstalled()) ~ (중략) 을 사용하고 있는데요.
print를 찍어보니 카카오톡이 설치되지 않은 환경에서도 isKakaoTalkInstalled()의 값이 true를 반환하는데 왜 false가 아닌 true를 반환하는건가요?
저희는 flutter 로 만든 네이티브 앱이며 하이브리드 웹앱의 형태는 아닙니다.
SDK버전은 1.8.0 입니다.
개발자가이드에 따라서 if (await isKakaoTalkInstalled()) ~ (중략) 을 사용하고 있는데요.
print를 찍어보니 카카오톡이 설치되지 않은 환경에서도 isKakaoTalkInstalled()의 값이 true를 반환하는데 왜 false가 아닌 true를 반환하는건가요?
저희는 flutter 로 만든 네이티브 앱이며 하이브리드 웹앱의 형태는 아닙니다.
안녕하세요.
테스트 하신 환경이 어떻게 되실까요?
(android/ios)
IOS 환경입니다.
동일 환경에서 테스트 해 보았는데요 재현되지 않아 문의 드립니다.
혹시 제공되는 샘플 코드에서도 재현되시나요?
저희코드입니다.
if (await isKakaoTalkInstalled()) {
try {
print (await isKakaoTalkInstalled());
OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
// print('카카오톡으로 로그인 성공 ${token.accessToken}');
kakaoUser = await UserApi.instance.me();
userMap = {
'email': kakaoUser.kakaoAccount?.email,
'sns_type': 'kakao',
};
// print('사용자 정보 요청 성공'
// '\n전체데이터: ${kakaoUser}'
// '\n회원번호: ${kakaoUser.id}'
// '\n닉네임: ${kakaoUser.kakaoAccount?.profile?.nickname}'
// '\n이메일: ${kakaoUser.kakaoAccount?.email}'
// '\n이름: ${kakaoUser.kakaoAccount?.name}'
// // '\n사진: ${kakaoUser.kakaoAccount?.thumbnailImageUrl}'
// '\n전화번호: ${kakaoUser.kakaoAccount?.phoneNumber}');
} catch (error) {
print('카카오톡으로 로그인 실패 $error');
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
if (error is PlatformException && error.code == 'CANCELED') {
return null;
}
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인
try {
OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
// access_token = fcmToken;
// print('카카오 계정으로 로그인 성공 2 ${token}');
kakaoUser = await UserApi.instance.me();
userMap = {
'email': kakaoUser.kakaoAccount?.email,
'sns_type': 'kakao',
};
} catch (error) {
print('카카오계정으로 로그인 실패2 $error');
}
}
} else {
print('else ///////');
final String url = Platform.isAndroid
? 'https://play.google.com/store/apps/details?id=com.kakao.talk'
: 'https://apps.apple.com/app/id362008775';
// URL 열기
if (await canLaunchUrl(Uri.parse(url))) {
await launchUrl(
Uri.parse(url),
mode: LaunchMode.externalApplication,
);
} else {
Fluttertoast.showToast(msg: 'error.잠시후에 다시 시도하여 주세요.');
// URL 열기 실패 처리
}
// try {
// OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
// try {
// kakaoUser = await UserApi.instance.me();
// userMap = {
// 'email': kakaoUser.kakaoAccount?.email,
// 'sns_type': 'kakao',
// };
// // print('사용자 정보 요청 성공3'
// // '\n전체데이터: ${kakaoUser}'
// // '\n회원번호: ${kakaoUser.id}'
// // '\n닉네임: ${kakaoUser.kakaoAccount?.profile?.nickname}'
// // '\n이메일: ${kakaoUser.kakaoAccount?.email}'
// // // '\n사진: ${kakaoUser.kakaoAccount?.thumbnailImageUrl}'
// // '\n전화번호: ${kakaoUser.kakaoAccount?.phoneNumber}');
// } catch (error) {
// print('사용자 정보 요청 실패3 $error');
// }
// print('카카오계정으로 로그인 성공3');
// } catch (error) {
// print('카카오계정으로 로그인 실패3 $error');
// }
}
return userMap;
}
번거로우시겠지만, 작성하신 프로젝트와 비교 확인을 위해 제공되는 샘플 프로젝트에서 해당 기능 테스트 부탁드립니다.
코드도 예시코드로 직접 돌려도 동일하게 true만 반환됩니다.