Flutter + Android 버전으로 제작한 Werewolf Moderator 라는 앱의 개발자입니다. 해당 앱은 googleplay에 정식 등록되어 있구요, 이곳에서 검수 완료 후 카카오톡 친구 API를 아무 문제없이 사용하고 있습니다.
Flutter는 Cross Platform언어이므로, 동일한 코드로 IOS버전으로 빌드해서 테스트 중인데요, IOS 버전에서만 친구목록을 읽어올 수가 없네요.
---- 관련 코드 ----
final UserApi api = UserApi.instance;
OAuthToken token = await api.loginWithKakaoTalk();
debugPrint(‘현재 스코프: ${token.scopes}’);
위 코드로 scope를 확인해 보면, IOS빌드에서만 friends 항목이 누락되어 있습니다. 기존에 Android 버전에 대한 검수를 완료했더라도, IOS 버전에 대한 검수가 별도로 필요한가요?
안녕하세요.
확인을 위해 앱 ID 부탁드립니다.
앱ID
https://developers.kakao.com/ 의 내 애플리케이션에 표시되는 ID 값 입니다.
숫자로된 ID 입니다
ex) 123456
[@tim.l @woody.ho ]
tim.l
5월 19, 2025, 12:34오전
4
scope 는 카카오 로그인 시, 동의 항목을 의미하며
동의항목은 권한으로 제어하지 않고 동의항목 설정 후, 이용자에게 동의 받으면 정보를 사용할 수 있습니다.
권한의 여부는 설정 가능 여부 일뿐 동작에 영항을 주지는 않고, 빌드 환경과도 무관합니다.
현재, 권한은 있는 것으로 확인됩니다.
즉, iOS에서 시도한 계정에는 friends에 동의 하지 않은 상황으로 추정되는데요.
로그인한 계정의 앱유저ID 기재해주시면 추가 확인 해보겠습니다.
로그인한 유저의 카카오ID는 hae****** 입니다. 현재 팀원으로 등록되어있구요, EDITOR 권한을 가지고 있습니다.
tim.l
5월 19, 2025, 2:31오전
6
카카오ID가 아니라 카카오 로그인 시, v2/user/me에서 전달한 id, 숫자로된 일련번호 알려주시겠어요?
tim.l
5월 19, 2025, 11:31오후
8
해당 계정은 friends 동의항목이 동의 이력이 없습니다.
확인 부탁드려요.
추가로
카카오 로그인으로 액세스 토큰 발급받아 연결되어도 사용자 정보조회나 친구목록 조회등 개인정보 API 를 호출하지 않으면,
미가입자로 판단하여 24시간뒤 연결끊기됩니다.
이점도 개발에 참고 부탁드려요.
일단 로그인 관련 코드는 다음과 같습니다.
class KakaoLoginApi {
Future<User?> signWithKakao() async {
final UserApi api = UserApi.instance;
try {
if (await isKakaoTalkInstalled()) {
debugPrint('카카오톡 설치됨');
try {
OAuthToken token = await api.loginWithKakaoTalk();
debugPrint('✅ KakaoTalk 로그인 성공');
debugPrint('현재 스코프: ${token.scopes}');
} catch (error) {
if (error is PlatformException && error.code == 'CANCELED') {
debugPrint('로그인 취소됨');
return null;
}
// 카카오톡 실패 시 계정 로그인 시도
await api.loginWithKakaoAccount();
}
} else {
debugPrint('카카오톡 설치 안됨');
await api.loginWithKakaoAccount();
}
// 로그인 성공 후 사용자 정보 반환
return await api.me();
} catch (e) {
debugPrint('카카오 로그인 전체 실패: $e');
return null;
}
}
}
Future<KakaoResultCode> fetchKakaoFriends(
List<FriendInfo> friendInfoList) async {
KakaoResultCode result = KakaoResultCode.Undefined;
try {
// KakaoLoginApi를 통해 로그인 시도
final user = await KakaoLoginApi().signWithKakao();
if (user == null) {
debugPrint('카카오 로그인 실패 또는 취소');
return KakaoResultCode.LoginError;
}
debugPrint(
'카카오 로그인 성공: ${user.kakaoAccount?.profile?.nickname} (${user.id})');
// 친구 목록 요청
try {
debugPrint('카카오톡 친구 목록 요청...');
Friends friends = await TalkApi.instance.friends();
... 이하 생략 ...
fetchKakaoFriends() 메서드를 통해 카카오톡 로그인 및 친구목록을 가져오도록 구현되어 있으며, IOS 팀원의 ipad 환경에서 실행했을 때, 디버그 로그는 다음과 같이 출력됩니다.
flutter: KakaoTalk 로그인 성공
flutter: 현재 스코프: [profile_image, talk_message, profile_nickname]
flutter: 카카오 로그인 성공: XXX (4256702060)
flutter: 카카오톡 친구 목록 요청…
보시다시피, scope에 friends 항목이 포함되어 있지 않은 상태라 정상적으로 친구목록을 받아올 수 없어서 계속 await TalkApi.instance.friends(); 상태에 머물러 있습니다.
Info.plist 설정은 다음과 같습니다.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao*********************</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-9002384061260621~8989239164</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakaokompassauth</string>
<string>kakaolink</string>
<string>kakaoplus</string>
<string>kakaotalk</string>
</array>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSContactsUsageDescription</key>
<string>This app uses contact info to send assigned role to the players by SMS.</string>
<key>NSUserTrackingUsageDescription</key>
<string>This app requires user tracking permission to access the friends list.</string>
IOS 팀원의 동의항목은 정상적으로 설정되어 있는 것으로 보입니다.
안드로이드에서는 문제없이 동작하는데, IOS에서는 카카오 로그인이 필요한 시점에 카카오톡이 실행됨과 동시에 아주 짧은 시간, 안내 팝업창이 떴다가 버튼을 누를 새도 없이 바로 사라집니다. (링크 동영상의 5-6초 부분입니다.)
왜 IOS에서만 이런 현상이 발생하는지 궁금합니다. 안내 팝업창의 <계속> 버튼을 누르지 않아서 친구목록 제공에 동의가 되지 않는 것일까요 ? 버튼을 눌러보려고 시도해봤지만, 도저히 누를 수가 없네요…ㅠ
안녕하세요
iOS에서 발생하는 현상은 이전에 제보들어온 내용 과 동일한 현상으로 보여요.
확인해보시고 이후에도 이슈가 발생하면 말씀 부탁드립니다.
알려주신 내용과 동일한 문제네요. Minimum Deployments 설정을 ios 13.0 으로 변경 후 문제 해결되었습니다.
감사합니다 !
1개의 좋아요