문의 시 사용하시는 SDK 버전 정보와 플랫폼(Android / iOS) 및 디벨로퍼스 앱ID를 알려주세요.
___앱 ID 1224324
flutter 기반 파이어베이스 카카오 로그인을 구현했는데 안드로이드 실제 폰에서는 동작을 잘 하는데 안드로이드 에뮬레이터에서는 log in to 앱이름 with kakao account 에서 continue를 눌러도 더 이상 진행이 안 됩니다.
import ‘package:cloud_firestore/cloud_firestore.dart’;
import ‘package:flutter/material.dart’;
import ‘package:flutter/services.dart’;
import ‘package:kakao_flutter_sdk_user/kakao_flutter_sdk_user.dart’;
import ‘package:get/get.dart’;
import ‘package:parking_lot_help/naver_map_screen.dart’;
import ‘package:firebase_auth/firebase_auth.dart’;
import ‘package:parking_lot_help/const.dart’;
class KakaoLogin extends StatefulWidget {
const KakaoLogin({super.key});
@override
State createState() => _KakaoLoginState();
}
class _KakaoLoginState extends State {
CollectionReference userRef = FirebaseFirestore.instance.collection(‘users’);
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () async {
await _signInWithKakao();
if (FirebaseAuth.instance.currentUser != null) {
userRef.doc(FirebaseAuth.instance.currentUser!.uid).get().then((
doc,
) async {
if (!doc.exists) {
await userRef.doc(FirebaseAuth.instance.currentUser!.uid).set({
'userId': FirebaseAuth.instance.currentUser!.uid,
'pointMoney': SEEDMONEYPOINT,
'giveHelpNum': 0,
'getHelpNum': 0,
'giveRewardNum': 0,
'getRewardNum': 0,
'rewardRate': 101,
'waitingPointToMoney': 0,
});
print('*************새로운 문서를 생성했습니다************');
} else {
print('*************이미 문서가 존재합니다.**************');
}
});
}
Get.offAll(() => NaverMapScreen());
},
child: Card(
elevation: 0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(7)),
child: Image.asset(
'asset/image/kakao_login_large_wide.png',
height: 60,
)
),
);
}
Future _signInWithKakao() async {
// 카카오 로그인 구현 예제
// 카카오톡 실행 가능 여부 확인
// 카카오톡 실행이 가능하면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (await isKakaoTalkInstalled()) {
try {
OAuthToken token = await UserApi.instance.loginWithKakaoTalk();
var provider = OAuthProvider('oidc.parking_lot_help');
var credential = provider.credential(
idToken: token.idToken,
accessToken: token.accessToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
print('카카오톡으로 로그인 성공');
} catch (error) {
print('카카오톡으로 로그인 실패 $error');
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
if (error is PlatformException && error.code == 'CANCELED') {
return;
}
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인
try {
OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
var provider = OAuthProvider('oidc.parking_lot_help');
var credential = provider.credential(
idToken: token.idToken,
accessToken: token.accessToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
print('카카오계정으로 로그인 성공');
} catch (error) {
print('카카오계정으로 로그인 실패 $error');
}
}
} else {
try {
OAuthToken token = await UserApi.instance.loginWithKakaoAccount();
var provider = OAuthProvider('oidc.parking_lot_help');
var credential = provider.credential(
idToken: token.idToken,
accessToken: token.accessToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
print('카카오계정으로 로그인 성공');
} catch (error) {
print('카카오계정으로 로그인 실패 $error');
}
}
}
}
질문 1. 파이어 베이스 콘솔에 클라이언트 ID에는 REST API 키를 넣나요, 아니면 네이티브 앱 키를 넣나요? 저는 네이티브 앱 키를 넣는 걸로 알고 있는데 gemini는 자꾸 REST API 키를 넣으라고 해서요.
질문 2. app store에 출시할 때, 다른 SNS 로그인이 있으면 반드시 Apple login 기능도 넣어야 하는 강제 조항은 없어졌나요?