Skip to content

Commit 2beeefe

Browse files
committed
카카오 로그인 추가
1 parent 8b134f3 commit 2beeefe

File tree

10 files changed

+475
-8
lines changed

10 files changed

+475
-8
lines changed

ios/Podfile.lock

+12
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ PODS:
7373
- GTMSessionFetcher/Core (1.7.2)
7474
- image_picker_ios (0.0.1):
7575
- Flutter
76+
- kakao_flutter_sdk_common (1.4.0):
77+
- Flutter
7678
- naver_map_plugin (0.9.4):
7779
- Flutter
7880
- NMapsMap
@@ -87,6 +89,8 @@ PODS:
8789
- FMDB (>= 2.7.5)
8890
- SwiftyGif (5.4.4)
8991
- Toast (4.0.0)
92+
- webview_flutter_wkwebview (0.0.1):
93+
- Flutter
9094

9195
DEPENDENCIES:
9296
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
@@ -98,9 +102,11 @@ DEPENDENCIES:
98102
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
99103
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
100104
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
105+
- kakao_flutter_sdk_common (from `.symlinks/plugins/kakao_flutter_sdk_common/ios`)
101106
- naver_map_plugin (from `.symlinks/plugins/naver_map_plugin/ios`)
102107
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
103108
- sqflite (from `.symlinks/plugins/sqflite/ios`)
109+
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
104110

105111
SPEC REPOS:
106112
trunk:
@@ -136,12 +142,16 @@ EXTERNAL SOURCES:
136142
:path: ".symlinks/plugins/google_sign_in_ios/ios"
137143
image_picker_ios:
138144
:path: ".symlinks/plugins/image_picker_ios/ios"
145+
kakao_flutter_sdk_common:
146+
:path: ".symlinks/plugins/kakao_flutter_sdk_common/ios"
139147
naver_map_plugin:
140148
:path: ".symlinks/plugins/naver_map_plugin/ios"
141149
shared_preferences_ios:
142150
:path: ".symlinks/plugins/shared_preferences_ios/ios"
143151
sqflite:
144152
:path: ".symlinks/plugins/sqflite/ios"
153+
webview_flutter_wkwebview:
154+
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
145155

146156
SPEC CHECKSUMS:
147157
AppAuth: 80317d99ac7ff2801a2f18ff86b48cd315ed465d
@@ -161,13 +171,15 @@ SPEC CHECKSUMS:
161171
GTMAppAuth: 4d8f864896f3646f0c33baf38a28362f4c601e15
162172
GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba
163173
image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb
174+
kakao_flutter_sdk_common: ee154ed8f05ee1fec394052d6f9db86c8a84f4f9
164175
naver_map_plugin: d1d67733c56b20b88270d9da51218e18fa916232
165176
NMapsMap: a2593320fca2bb09e521c05b4dffee4da42e96ed
166177
SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
167178
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
168179
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
169180
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
170181
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
182+
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
171183

172184
PODFILE CHECKSUM: cc1f88378b4bfcf93a6ce00d2c587857c6008d3b
173185

lib/_sample/kakao_login.dart

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import 'package:flutter/cupertino.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:flutter/services.dart';
4+
import 'package:kakao_flutter_sdk/kakao_flutter_sdk.dart';
5+
import 'package:kakao_flutter_sdk/kakao_flutter_sdk.dart' as kakao;
6+
7+
Future<void> main() async {
8+
kakao.KakaoSdk.init(nativeAppKey:'405c325522945902e2860008ec451ea0');
9+
10+
runApp(const KakaoLoginTestPage());
11+
}
12+
13+
class KakaoLoginTestPage extends StatefulWidget {
14+
const KakaoLoginTestPage({Key? key}) : super(key: key);
15+
16+
@override
17+
State<KakaoLoginTestPage> createState() => _KakaoLoginTestPageState();
18+
}
19+
20+
class _KakaoLoginTestPageState extends State<KakaoLoginTestPage> {
21+
@override
22+
Widget build(BuildContext context) {
23+
return MaterialApp(
24+
home: Scaffold(
25+
appBar: AppBar(),
26+
body: Column(
27+
children: [
28+
CupertinoButton(
29+
child: Text("로그인"),
30+
onPressed: () {
31+
KakaoLogin ka = KakaoLogin();
32+
ka.signInWithKaKao();
33+
})
34+
],
35+
),
36+
),
37+
);
38+
}
39+
}
40+
41+
class KakaoLogin {
42+
Future<bool> signInWithKaKao() async {
43+
OAuthToken? token;
44+
// 카카오톡 앱이 있을경우
45+
if (await isKakaoTalkInstalled()) {
46+
// 카카오톡 앱으로 로그인
47+
try {
48+
token = await UserApi.instance.loginWithKakaoTalk();
49+
print('카카오톡으로 로그인 성공');
50+
print('token: $token');
51+
return true;
52+
} catch (error) {
53+
print('카카오톡으로 로그인 실패 $error');
54+
55+
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
56+
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
57+
if (error is PlatformException && error.code == 'CANCELED') {
58+
return false;
59+
}
60+
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인
61+
try {
62+
token = await UserApi.instance.loginWithKakaoAccount();
63+
print('카카오계정으로 로그인 성공');
64+
print('token: $token');
65+
return true;
66+
} catch (error) {
67+
print('카카오계정으로 로그인 실패 $error');
68+
return false;
69+
}
70+
}
71+
} else {
72+
try {
73+
token = await UserApi.instance.loginWithKakaoAccount();
74+
print('카카오계정으로 로그인 성공');
75+
print('token: $token');
76+
return true;
77+
} catch (error) {
78+
print('카카오계정으로 로그인 실패 $error');
79+
return false;
80+
}
81+
}
82+
}
83+
}

lib/cloud/kakao_sign_in.dart

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
import 'package:flutter/services.dart';
3+
import 'package:kakao_flutter_sdk/kakao_flutter_sdk.dart';
4+
5+
6+
class KakaoLogin {
7+
Future<bool> signInWithKaKao() async {
8+
User u= await UserApi.instance.me();
9+
10+
print(u.id);
11+
OAuthToken? token;
12+
// 카카오톡 앱이 있을경우
13+
if (await isKakaoTalkInstalled()) {
14+
// 카카오톡 앱으로 로그인
15+
try {
16+
token = await UserApi.instance.loginWithKakaoTalk();
17+
print('카카오톡으로 로그인 성공');
18+
print('token: $token');
19+
return true;
20+
} catch (error) {
21+
print('카카오톡으로 로그인 실패 $error');
22+
23+
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
24+
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
25+
if (error is PlatformException && error.code == 'CANCELED') {
26+
return false;
27+
}
28+
// 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인
29+
try {
30+
token = await UserApi.instance.loginWithKakaoAccount();
31+
print('카카오계정으로 로그인 성공');
32+
print('token: $token');
33+
return true;
34+
} catch (error) {
35+
print('카카오계정으로 로그인 실패 $error');
36+
return false;
37+
}
38+
}
39+
} else {
40+
try {
41+
token = await UserApi.instance.loginWithKakaoAccount();
42+
print('카카오계정으로 로그인 성공');
43+
print('token: $token');
44+
return true;
45+
} catch (error) {
46+
print('카카오계정으로 로그인 실패 $error');
47+
return false;
48+
}
49+
}
50+
}
51+
}

lib/main.dart

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'inmat/models/token_model.dart';
1414
import 'src/account/login_main/signin_page.dart';
1515
import 'src/navigator/NavigatePage.dart';
1616
import 'utils/navigator_context.dart';
17+
import 'package:kakao_flutter_sdk/kakao_flutter_sdk.dart' as kakao;
1718

1819
void main() async {
1920
// DB에서 유저 정보 가져오기
@@ -25,8 +26,13 @@ void main() async {
2526
// "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJmbHV0dGVyMSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE2NzUyNzEyMTd9.Rn_qBBydqgHDeEKvk0__T8iSvUYDrzqgjFEGv2nMF-NSegCNR_-L382zLIJppP0dSh_BIa22WZQlAjy07oJdsg",
2627
// );
2728
// Inmat.testInitial(testToken);
29+
30+
2831
await Inmat.initialize();
2932

33+
kakao.KakaoSdk.init(nativeAppKey:'405c325522945902e2860008ec451ea0');
34+
35+
3036
runApp(const MyApp());
3137
}
3238

lib/src/account/login_main/signin_page.dart

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/cupertino.dart';
22
import 'package:flutter/material.dart';
3+
import 'package:inmat/cloud/kakao_sign_in.dart';
34
import 'package:inmat/src/account/sign_in_email/sign_in_email_page.dart';
45
import 'package:inmat/utils/inmat_colors.dart';
56
import 'package:inmat/utils/toast.dart';
@@ -113,7 +114,10 @@ class _SignInMainPageState extends State<SignInMainPage> {
113114
SocialLoginButton(
114115
text: '카카오로 계속하기',
115116
onclick: () {
116-
Message.showMessage("개발 중 입니다.");
117+
KakaoLogin kakao=KakaoLogin();
118+
kakao.signInWithKaKao();
119+
120+
// Message.showMessage("개발 중 입니다.");
117121
},
118122
color: const Color(0xffFFE26A),
119123
textColor: const Color(0xff2E2E2E),

lib/src/account/sign_in_email/sign_in_email_model.dart

+9-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import 'package:inmat/inmat/auth/inmat_auth.dart';
44
import 'package:inmat/inmat/exception/inmat_exception.dart';
55
import 'package:inmat/utils/toast.dart';
66

7+
import '../../navigator/NavigatePage.dart';
8+
79

810
class EmailSignInModel with ChangeNotifier {
911
String _username = "test123";
@@ -23,14 +25,20 @@ class EmailSignInModel with ChangeNotifier {
2325
notifyListeners();
2426
}
2527

26-
signIn() async {
28+
signIn(BuildContext context) async {
2729
print('id : $username');
2830
print('password: $password');
2931
//"test123", "qwe12345&&");
3032

3133
try {
3234
await InmatAuth.instance.signInEmail(username, password);
3335
Message.showMessage('로그인 성공: $username, $password');
36+
37+
Navigator.pushAndRemoveUntil(
38+
context,
39+
MaterialPageRoute(builder: (context) => NavigatePage()),
40+
(route) => false,
41+
);
3442
} on SignInFailed {
3543
// 로그인 실패 메세지 띄우기
3644
Message.showMessage('없는 아이디이거나 비밀번호가 틀렸습니다.\n$username, $password');

lib/src/account/sign_in_email/sign_in_email_page.dart

+2-6
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,8 @@ class _EmailSignInPageState extends State<EmailSignInPage> {
7575
LoginButton(
7676
onclick: () async {
7777
await Provider.of<EmailSignInModel>(context, listen: false)
78-
.signIn();
79-
Navigator.pushAndRemoveUntil(
80-
context,
81-
MaterialPageRoute(builder: (context) => NavigatePage()),
82-
(route) => false,
83-
);
78+
.signIn(context);
79+
8480
},
8581
),
8682
Spacer(),

0 commit comments

Comments
 (0)