capacitor3-kakao-login 0.8.3 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/definitions.d.ts +3 -0
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +3 -0
- package/dist/esm/web.js +176 -62
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +176 -62
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +176 -62
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export interface Capacitor3KakaoLoginPlugin {\n initializeKakao(options: {\n app_key: string;\n web_key: string;\n }): Promise<{ value: string }>;\n kakaoLogin(): Promise<{ value: string }>;\n kakaoLogout(): Promise<{ value: string }>;\n kakaoUnlink(): Promise<{ value: string }>;\n sendLinkFeed(options: {\n title: string;\n description: string;\n image_url: string;\n image_link_url: string;\n button_title: string;\n }): Promise<{ value: string }>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export interface Capacitor3KakaoLoginPlugin {\n initializeKakao(options: {\n app_key: string;\n web_key: string;\n }): Promise<{ value: string }>;\n kakaoLogin(): Promise<{ value: string }>;\n handleKakaoCallback(): Promise<{ value: string }>;\n kakaoLogout(): Promise<{ value: string }>;\n kakaoUnlink(): Promise<{ value: string }>;\n sendLinkFeed(options: {\n title: string;\n description: string;\n image_url: string;\n image_link_url: string;\n button_title: string;\n }): Promise<{ value: string }>;\n}\n"]}
|
package/dist/esm/web.d.ts
CHANGED
package/dist/esm/web.js
CHANGED
|
@@ -18,35 +18,31 @@ export class Capacitor3KakaoLoginWeb extends WebPlugin {
|
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
//웹 카카오 로그인
|
|
21
|
+
//웹 카카오 로그인 (SDK 2.0 방식)
|
|
22
22
|
kakaoLogin() {
|
|
23
23
|
return new Promise(async (resolve, reject) => {
|
|
24
24
|
if (!this.web_key) {
|
|
25
25
|
reject('kakao_sdk_not_initialzed');
|
|
26
|
-
|
|
27
|
-
this.removeKakaoSdk();
|
|
28
|
-
await this.loadKakaoSdk();
|
|
29
|
-
if (typeof window['Kakao'] !== 'undefined') {
|
|
30
|
-
window['Kakao'].init(this.web_key); // Initialize Kakao with your JavaScript key
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
reject(new Error('Kakao undefined'));
|
|
26
|
+
return;
|
|
34
27
|
}
|
|
35
28
|
try {
|
|
36
|
-
|
|
29
|
+
this.removeKakaoSdk();
|
|
30
|
+
await this.loadKakaoSdk();
|
|
31
|
+
if (typeof window['Kakao'] === 'undefined') {
|
|
32
|
+
reject(new Error('Kakao undefined'));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// SDK 2.0 초기화
|
|
36
|
+
window.Kakao.init(this.web_key);
|
|
37
|
+
// SDK 2.0: authorize() 메서드 사용 (리다이렉트 방식)
|
|
38
|
+
window.Kakao.Auth.authorize({
|
|
39
|
+
redirectUri: window.location.origin + '/kakao-login-callback',
|
|
37
40
|
throughTalk: true,
|
|
38
|
-
|
|
39
|
-
success: (response) => {
|
|
40
|
-
console.log(response);
|
|
41
|
-
resolve({
|
|
42
|
-
value: response.access_token,
|
|
43
|
-
});
|
|
44
|
-
},
|
|
45
|
-
fail: (error) => {
|
|
46
|
-
console.error('Kakao Login Failed', error);
|
|
47
|
-
reject(new Error('Kakao Login Failed'));
|
|
48
|
-
},
|
|
41
|
+
state: 'kakao_login_' + Date.now(),
|
|
49
42
|
});
|
|
43
|
+
// 리다이렉트가 발생하므로 Promise는 즉시 resolve
|
|
44
|
+
// 실제 토큰은 handleKakaoCallback()에서 처리
|
|
45
|
+
resolve({ value: 'redirected' });
|
|
50
46
|
}
|
|
51
47
|
catch (e) {
|
|
52
48
|
console.error('Error during Kakao login', e);
|
|
@@ -54,66 +50,181 @@ export class Capacitor3KakaoLoginWeb extends WebPlugin {
|
|
|
54
50
|
}
|
|
55
51
|
});
|
|
56
52
|
}
|
|
57
|
-
|
|
53
|
+
//리다이렉트 후 콜백 처리 (SDK 2.0 방식)
|
|
54
|
+
handleKakaoCallback() {
|
|
55
|
+
return new Promise(async (resolve, reject) => {
|
|
56
|
+
if (!this.web_key) {
|
|
57
|
+
reject('kakao_sdk_not_initialzed');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// SDK 2.0 초기화
|
|
61
|
+
window.Kakao.init(this.web_key);
|
|
62
|
+
console.log('handleKakaoCallback!!');
|
|
63
|
+
try {
|
|
64
|
+
// URL 파라미터 확인
|
|
65
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
66
|
+
const code = urlParams.get('code');
|
|
67
|
+
const error = urlParams.get('error');
|
|
68
|
+
if (error) {
|
|
69
|
+
// 에러 파라미터가 있는 경우
|
|
70
|
+
window.history.replaceState({}, '', window.location.pathname);
|
|
71
|
+
reject(new Error(`Kakao Login Failed: ${error}`));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (!code) {
|
|
75
|
+
// 인가 코드가 없는 경우 (리다이렉트 후가 아님)
|
|
76
|
+
reject(new Error('No authorization code found. Please call kakaoLogin() first.'));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const accessToken = window.Kakao.Auth.getAccessToken();
|
|
80
|
+
console.log('accessToken:', accessToken);
|
|
81
|
+
if (accessToken) {
|
|
82
|
+
// URL 파라미터 정리
|
|
83
|
+
window.history.replaceState({}, '', window.location.pathname);
|
|
84
|
+
resolve({ value: accessToken });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
reject(new Error('Kakao Login Failed: Token exchange failed'));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
console.error('Error during Kakao callback handling', e);
|
|
92
|
+
reject(e);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//웹 로그아웃 (SDK 2.0 방식)
|
|
58
97
|
kakaoLogout() {
|
|
59
98
|
return new Promise((resolve, reject) => {
|
|
60
99
|
if (!this.web_key) {
|
|
61
100
|
reject('kakao_sdk_not_initialzed');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const KakaoSdk = window['Kakao'];
|
|
105
|
+
if (KakaoSdk && KakaoSdk.Auth) {
|
|
106
|
+
// SDK 2.0: logout()은 Promise를 반환할 수 있음
|
|
107
|
+
const logoutResult = KakaoSdk.Auth.logout();
|
|
108
|
+
if (logoutResult && typeof logoutResult.then === 'function') {
|
|
109
|
+
logoutResult
|
|
110
|
+
.then(() => {
|
|
111
|
+
resolve({ value: 'done' });
|
|
112
|
+
})
|
|
113
|
+
.catch((error) => {
|
|
114
|
+
console.error('Kakao Logout Failed', error);
|
|
115
|
+
reject(error);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// 동기 방식으로 처리되는 경우
|
|
120
|
+
resolve({ value: 'done' });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
console.error('Error during Kakao logout', e);
|
|
129
|
+
reject(e);
|
|
62
130
|
}
|
|
63
|
-
const KakaoSdk = window['Kakao'];
|
|
64
|
-
KakaoSdk.Auth.logout();
|
|
65
|
-
resolve({ value: 'done' });
|
|
66
131
|
});
|
|
67
132
|
}
|
|
68
|
-
//unlink
|
|
133
|
+
//unlink (SDK 2.0 방식)
|
|
69
134
|
kakaoUnlink() {
|
|
70
135
|
return new Promise((resolve, reject) => {
|
|
71
136
|
if (!this.web_key) {
|
|
72
137
|
reject('kakao_sdk_not_initialzed');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
const KakaoSdk = window['Kakao'];
|
|
142
|
+
if (KakaoSdk && KakaoSdk.API) {
|
|
143
|
+
// SDK 2.0: request()는 Promise를 반환
|
|
144
|
+
KakaoSdk.API.request({
|
|
145
|
+
url: '/v1/user/unlink',
|
|
146
|
+
})
|
|
147
|
+
.then((response) => {
|
|
148
|
+
console.log(response);
|
|
149
|
+
resolve({ value: 'done' });
|
|
150
|
+
})
|
|
151
|
+
.catch((error) => {
|
|
152
|
+
console.error('Kakao Unlink Failed', error);
|
|
153
|
+
reject(error);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
console.error('Error during Kakao unlink', e);
|
|
162
|
+
reject(e);
|
|
73
163
|
}
|
|
74
|
-
const KakaoSdk = window['Kakao'];
|
|
75
|
-
KakaoSdk.API.request({
|
|
76
|
-
url: '/v1/user/unlink',
|
|
77
|
-
success: function (response) {
|
|
78
|
-
console.log(response);
|
|
79
|
-
resolve({ value: 'done' });
|
|
80
|
-
},
|
|
81
|
-
fail: function (error) {
|
|
82
|
-
console.log(error);
|
|
83
|
-
reject(error);
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
164
|
});
|
|
87
165
|
}
|
|
88
|
-
//message
|
|
166
|
+
//message (SDK 2.0 방식)
|
|
89
167
|
sendLinkFeed(options) {
|
|
90
168
|
return new Promise((resolve, reject) => {
|
|
91
169
|
if (!this.web_key) {
|
|
92
170
|
reject('kakao_sdk_not_initialzed');
|
|
171
|
+
return;
|
|
93
172
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
title: options.button_title,
|
|
108
|
-
link: {
|
|
109
|
-
mobileWebUrl: options.image_link_url,
|
|
173
|
+
try {
|
|
174
|
+
const KakaoSdk = window['Kakao'];
|
|
175
|
+
if (KakaoSdk && KakaoSdk.Link) {
|
|
176
|
+
// SDK 2.0: sendDefault()는 Promise를 반환할 수 있음
|
|
177
|
+
const sendResult = KakaoSdk.Link.sendDefault({
|
|
178
|
+
objectType: 'feed',
|
|
179
|
+
content: {
|
|
180
|
+
title: options.title,
|
|
181
|
+
description: options.description,
|
|
182
|
+
imageUrl: options.image_url,
|
|
183
|
+
link: {
|
|
184
|
+
mobileWebUrl: options.image_link_url,
|
|
185
|
+
},
|
|
110
186
|
},
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
187
|
+
buttons: [
|
|
188
|
+
{
|
|
189
|
+
title: options.button_title,
|
|
190
|
+
link: {
|
|
191
|
+
mobileWebUrl: options.image_link_url,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
});
|
|
196
|
+
if (sendResult && typeof sendResult.then === 'function') {
|
|
197
|
+
// Promise 기반 API
|
|
198
|
+
sendResult
|
|
199
|
+
.then(() => {
|
|
200
|
+
resolve({ value: 'done' });
|
|
201
|
+
})
|
|
202
|
+
.catch((error) => {
|
|
203
|
+
console.error('Kakao Link Send Failed', error);
|
|
204
|
+
reject(error);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// 콜백 방식 (하위 호환성)
|
|
209
|
+
if (typeof sendResult === 'object' && sendResult.callback) {
|
|
210
|
+
sendResult.callback = function () {
|
|
211
|
+
resolve({ value: 'done' });
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
// 콜백이 없는 경우 직접 resolve
|
|
216
|
+
resolve({ value: 'done' });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
console.error('Error during Kakao link send', e);
|
|
226
|
+
reject(e);
|
|
227
|
+
}
|
|
117
228
|
});
|
|
118
229
|
}
|
|
119
230
|
removeKakaoSdk() {
|
|
@@ -132,7 +243,10 @@ export class Capacitor3KakaoLoginWeb extends WebPlugin {
|
|
|
132
243
|
}
|
|
133
244
|
const script = document.createElement('script');
|
|
134
245
|
script.id = this.kakaoScriptId; // Set an ID to reference this script
|
|
135
|
-
|
|
246
|
+
// SDK 2.x - Kakao.Auth.authorize() 리다이렉트 방식 사용
|
|
247
|
+
script.src = 'https://t1.kakaocdn.net/kakao_js_sdk/2.7.7/kakao.min.js';
|
|
248
|
+
// script.integrity = 'sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka';
|
|
249
|
+
// script.crossOrigin = 'anonymous';
|
|
136
250
|
script.onload = () => {
|
|
137
251
|
console.log('Kakao SDK loaded');
|
|
138
252
|
resolve();
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\n// declare var Kakao: any;\ndeclare global {\n interface Window {\n Kakao: any; // You can replace 'any' with a more specific type if available\n }\n}\n\nexport class Capacitor3KakaoLoginWeb\n extends WebPlugin\n implements Capacitor3KakaoLoginWeb\n{\n private kakaoScriptId = 'kakao-js-sdk'; // Unique ID for the Kakao SDK script\n web_key: any;\n\n initializeKakao(options: { app_key: string; web_key: string }) {\n return new Promise<{ value: string }>(async (resolve, reject) => {\n try {\n if (!this.web_key) {\n this.web_key = options.web_key;\n }\n resolve({ value: 'done' });\n } catch (error) {\n console.error(error);\n reject(error);\n }\n });\n }\n\n //웹 카카오 로그인\n kakaoLogin() {\n return new Promise<{ value: string }>(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n\n this.removeKakaoSdk();\n await this.loadKakaoSdk();\n if (typeof window['Kakao'] !== 'undefined') {\n window['Kakao'].init(this.web_key); // Initialize Kakao with your JavaScript key\n } else {\n reject(new Error('Kakao undefined'));\n }\n\n try {\n window.Kakao!.Auth.login({\n throughTalk: true,\n persistAccessToken: true,\n success: (response: any) => {\n console.log(response);\n\n resolve({\n value: response.access_token,\n });\n },\n fail: (error: any) => {\n console.error('Kakao Login Failed', error);\n reject(new Error('Kakao Login Failed'));\n },\n });\n } catch (e) {\n console.error('Error during Kakao login', e);\n reject(e);\n }\n });\n }\n\n //웹 로그아웃\n kakaoLogout() {\n return new Promise<{ value: string }>((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n\n const KakaoSdk: any = window['Kakao'];\n KakaoSdk.Auth.logout();\n resolve({ value: 'done' });\n });\n }\n\n //unlink\n kakaoUnlink() {\n return new Promise<{ value: string }>((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n\n const KakaoSdk: any = window['Kakao'];\n KakaoSdk.API.request({\n url: '/v1/user/unlink',\n success: function (response: any) {\n console.log(response);\n resolve({ value: 'done' });\n },\n fail: function (error: any) {\n console.log(error);\n reject(error);\n },\n });\n });\n }\n\n //message\n sendLinkFeed(options: {\n title: string;\n description: string;\n image_url: string;\n image_link_url: string;\n button_title: string;\n }) {\n return new Promise<{ value: string }>((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n const KakaoSdk: any = window['Kakao'];\n KakaoSdk.Link.sendDefault({\n objectType: 'feed',\n content: {\n title: options.title,\n description: options.description,\n imageUrl: options.image_url,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n buttons: [\n {\n title: options.button_title,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n ],\n callback: function () {\n resolve({ value: 'done' });\n },\n });\n });\n }\n\n private removeKakaoSdk(): void {\n const script = document.getElementById(this.kakaoScriptId);\n if (script) {\n document.head.removeChild(script); // Remove the script from the DOM\n console.log('Kakao SDK removed');\n }\n }\n\n private loadKakaoSdk(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n if (document.getElementById(this.kakaoScriptId)) {\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.id = this.kakaoScriptId; // Set an ID to reference this script\n script.src = 'https://developers.kakao.com/sdk/js/kakao.min.js';\n script.onload = () => {\n console.log('Kakao SDK loaded');\n resolve();\n };\n script.onerror = () => reject(new Error('Failed to load Kakao SDK'));\n document.head.appendChild(script);\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C,MAAM,OAAO,uBACX,SAAQ,SAAS;IADnB;;QAIU,kBAAa,GAAG,cAAc,CAAC,CAAC,qCAAqC;IAmR/E,CAAC;IAhRC,eAAe,CAAC,OAA6C;QAC3D,OAAO,IAAI,OAAO,CAAoB,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;iBAChC;gBACD,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;aAC5B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,CAAC;aACf;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,UAAU;QACR,OAAO,IAAI,OAAO,CAAoB,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBACnC,OAAO;aACR;YAED,IAAI;gBACF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAE1B,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,EAAE;oBAC1C,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBACrC,OAAO;iBACR;gBAED,cAAc;gBACd,MAAM,CAAC,KAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEjC,yCAAyC;gBACzC,MAAM,CAAC,KAAM,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC3B,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,uBAAuB;oBAC7D,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;iBACnC,CAAC,CAAC;gBAEH,mCAAmC;gBACnC,oCAAoC;gBACpC,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;aAClC;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;gBAC7C,MAAM,CAAC,CAAC,CAAC,CAAC;aACX;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAA4B;IAC5B,mBAAmB;QACjB,OAAO,IAAI,OAAO,CAAoB,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBACnC,OAAO;aACR;YAGD,cAAc;YACd,MAAM,CAAC,KAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAGjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,IAAI;gBACF,cAAc;gBACd,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAErC,IAAI,KAAK,EAAE;oBACT,iBAAiB;oBACjB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC9D,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC,CAAC;oBAClD,OAAO;iBACR;gBAED,IAAI,CAAC,IAAI,EAAE;oBACT,6BAA6B;oBAC7B,MAAM,CACJ,IAAI,KAAK,CACP,8DAA8D,CAC/D,CACF,CAAC;oBACF,OAAO;iBACR;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,KAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gBACzC,IAAI,WAAW,EAAE;oBACf,cAAc;oBACd,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC9D,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;iBACjC;qBAAM;oBACL,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;iBAChE;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;gBACzD,MAAM,CAAC,CAAC,CAAC,CAAC;aACX;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,WAAW;QACT,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBACnC,OAAO;aACR;YAED,IAAI;gBACF,MAAM,QAAQ,GAAQ,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;oBAC7B,uCAAuC;oBACvC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC5C,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,UAAU,EAAE;wBAC3D,YAAY;6BACT,IAAI,CAAC,GAAG,EAAE;4BACT,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;wBAC7B,CAAC,CAAC;6BACD,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;4BACpB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;4BAC5C,MAAM,CAAC,KAAK,CAAC,CAAC;wBAChB,CAAC,CAAC,CAAC;qBACN;yBAAM;wBACL,kBAAkB;wBAClB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;qBAC5B;iBACF;qBAAM;oBACL,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;iBAChD;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,CAAC,CAAC,CAAC;aACX;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,WAAW;QACT,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBACnC,OAAO;aACR;YAED,IAAI;gBACF,MAAM,QAAQ,GAAQ,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE;oBAC5B,kCAAkC;oBAClC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;wBACnB,GAAG,EAAE,iBAAiB;qBACvB,CAAC;yBACC,IAAI,CAAC,CAAC,QAAa,EAAE,EAAE;wBACtB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACtB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC7B,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;wBACpB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;wBAC5C,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC,CAAC,CAAC;iBACN;qBAAM;oBACL,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;iBAChD;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,CAAC,CAAC,CAAC;aACX;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,YAAY,CAAC,OAMZ;QACC,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBACnC,OAAO;aACR;YAED,IAAI;gBACF,MAAM,QAAQ,GAAQ,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;oBAC7B,4CAA4C;oBAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;wBAC3C,UAAU,EAAE,MAAM;wBAClB,OAAO,EAAE;4BACP,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,QAAQ,EAAE,OAAO,CAAC,SAAS;4BAC3B,IAAI,EAAE;gCACJ,YAAY,EAAE,OAAO,CAAC,cAAc;6BACrC;yBACF;wBACD,OAAO,EAAE;4BACP;gCACE,KAAK,EAAE,OAAO,CAAC,YAAY;gCAC3B,IAAI,EAAE;oCACJ,YAAY,EAAE,OAAO,CAAC,cAAc;iCACrC;6BACF;yBACF;qBACF,CAAC,CAAC;oBAEH,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;wBACvD,iBAAiB;wBACjB,UAAU;6BACP,IAAI,CAAC,GAAG,EAAE;4BACT,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;wBAC7B,CAAC,CAAC;6BACD,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;4BACpB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;4BAC/C,MAAM,CAAC,KAAK,CAAC,CAAC;wBAChB,CAAC,CAAC,CAAC;qBACN;yBAAM;wBACL,iBAAiB;wBACjB,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE;4BACzD,UAAU,CAAC,QAAQ,GAAG;gCACpB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;4BAC7B,CAAC,CAAC;yBACH;6BAAM;4BACL,uBAAuB;4BACvB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;yBAC5B;qBACF;iBACF;qBAAM;oBACL,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;iBAChD;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;gBACjD,MAAM,CAAC,CAAC,CAAC,CAAC;aACX;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,MAAM,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,iCAAiC;YACpE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;SAClC;IACH,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,wCAAwC;YACxC,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBAC/C,OAAO,EAAE,CAAC;gBACV,OAAO;aACR;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,qCAAqC;YACrE,+CAA+C;YAC/C,MAAM,CAAC,GAAG,GAAG,yDAAyD,CAAC;YACvE,gGAAgG;YAChG,oCAAoC;YACpC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;gBACnB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACrE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\n// declare var Kakao: any;\ndeclare global {\n interface Window {\n Kakao: any; // You can replace 'any' with a more specific type if available\n }\n}\n\nexport class Capacitor3KakaoLoginWeb\n extends WebPlugin\n implements Capacitor3KakaoLoginWeb\n{\n private kakaoScriptId = 'kakao-js-sdk'; // Unique ID for the Kakao SDK script\n web_key: any;\n\n initializeKakao(options: { app_key: string; web_key: string }) {\n return new Promise<{ value: string }>(async (resolve, reject) => {\n try {\n if (!this.web_key) {\n this.web_key = options.web_key;\n }\n resolve({ value: 'done' });\n } catch (error) {\n console.error(error);\n reject(error);\n }\n });\n }\n\n //웹 카카오 로그인 (SDK 2.0 방식)\n kakaoLogin() {\n return new Promise<{ value: string }>(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n\n try {\n this.removeKakaoSdk();\n await this.loadKakaoSdk();\n\n if (typeof window['Kakao'] === 'undefined') {\n reject(new Error('Kakao undefined'));\n return;\n }\n\n // SDK 2.0 초기화\n window.Kakao!.init(this.web_key);\n\n // SDK 2.0: authorize() 메서드 사용 (리다이렉트 방식)\n window.Kakao!.Auth.authorize({\n redirectUri: window.location.origin + '/kakao-login-callback',\n throughTalk: true,\n state: 'kakao_login_' + Date.now(),\n });\n\n // 리다이렉트가 발생하므로 Promise는 즉시 resolve\n // 실제 토큰은 handleKakaoCallback()에서 처리\n resolve({ value: 'redirected' });\n } catch (e) {\n console.error('Error during Kakao login', e);\n reject(e);\n }\n });\n }\n\n //리다이렉트 후 콜백 처리 (SDK 2.0 방식)\n handleKakaoCallback() {\n return new Promise<{ value: string }>(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n\n\n // SDK 2.0 초기화\n window.Kakao!.init(this.web_key);\n\n\n console.log('handleKakaoCallback!!');\n try {\n // URL 파라미터 확인\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get('code');\n const error = urlParams.get('error');\n \n if (error) {\n // 에러 파라미터가 있는 경우\n window.history.replaceState({}, '', window.location.pathname);\n reject(new Error(`Kakao Login Failed: ${error}`));\n return;\n }\n\n if (!code) {\n // 인가 코드가 없는 경우 (리다이렉트 후가 아님)\n reject(\n new Error(\n 'No authorization code found. Please call kakaoLogin() first.',\n ),\n );\n return;\n }\n \n const accessToken = window.Kakao!.Auth.getAccessToken();\n console.log('accessToken:', accessToken);\n if (accessToken) {\n // URL 파라미터 정리\n window.history.replaceState({}, '', window.location.pathname);\n resolve({ value: accessToken });\n } else {\n reject(new Error('Kakao Login Failed: Token exchange failed'));\n }\n } catch (e) {\n console.error('Error during Kakao callback handling', e);\n reject(e);\n }\n });\n }\n\n //웹 로그아웃 (SDK 2.0 방식)\n kakaoLogout() {\n return new Promise<{ value: string }>((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n\n try {\n const KakaoSdk: any = window['Kakao'];\n if (KakaoSdk && KakaoSdk.Auth) {\n // SDK 2.0: logout()은 Promise를 반환할 수 있음\n const logoutResult = KakaoSdk.Auth.logout();\n if (logoutResult && typeof logoutResult.then === 'function') {\n logoutResult\n .then(() => {\n resolve({ value: 'done' });\n })\n .catch((error: any) => {\n console.error('Kakao Logout Failed', error);\n reject(error);\n });\n } else {\n // 동기 방식으로 처리되는 경우\n resolve({ value: 'done' });\n }\n } else {\n reject(new Error('Kakao SDK not initialized'));\n }\n } catch (e) {\n console.error('Error during Kakao logout', e);\n reject(e);\n }\n });\n }\n\n //unlink (SDK 2.0 방식)\n kakaoUnlink() {\n return new Promise<{ value: string }>((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n\n try {\n const KakaoSdk: any = window['Kakao'];\n if (KakaoSdk && KakaoSdk.API) {\n // SDK 2.0: request()는 Promise를 반환\n KakaoSdk.API.request({\n url: '/v1/user/unlink',\n })\n .then((response: any) => {\n console.log(response);\n resolve({ value: 'done' });\n })\n .catch((error: any) => {\n console.error('Kakao Unlink Failed', error);\n reject(error);\n });\n } else {\n reject(new Error('Kakao SDK not initialized'));\n }\n } catch (e) {\n console.error('Error during Kakao unlink', e);\n reject(e);\n }\n });\n }\n\n //message (SDK 2.0 방식)\n sendLinkFeed(options: {\n title: string;\n description: string;\n image_url: string;\n image_link_url: string;\n button_title: string;\n }) {\n return new Promise<{ value: string }>((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n\n try {\n const KakaoSdk: any = window['Kakao'];\n if (KakaoSdk && KakaoSdk.Link) {\n // SDK 2.0: sendDefault()는 Promise를 반환할 수 있음\n const sendResult = KakaoSdk.Link.sendDefault({\n objectType: 'feed',\n content: {\n title: options.title,\n description: options.description,\n imageUrl: options.image_url,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n buttons: [\n {\n title: options.button_title,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n ],\n });\n\n if (sendResult && typeof sendResult.then === 'function') {\n // Promise 기반 API\n sendResult\n .then(() => {\n resolve({ value: 'done' });\n })\n .catch((error: any) => {\n console.error('Kakao Link Send Failed', error);\n reject(error);\n });\n } else {\n // 콜백 방식 (하위 호환성)\n if (typeof sendResult === 'object' && sendResult.callback) {\n sendResult.callback = function () {\n resolve({ value: 'done' });\n };\n } else {\n // 콜백이 없는 경우 직접 resolve\n resolve({ value: 'done' });\n }\n }\n } else {\n reject(new Error('Kakao SDK not initialized'));\n }\n } catch (e) {\n console.error('Error during Kakao link send', e);\n reject(e);\n }\n });\n }\n\n private removeKakaoSdk(): void {\n const script = document.getElementById(this.kakaoScriptId);\n if (script) {\n document.head.removeChild(script); // Remove the script from the DOM\n console.log('Kakao SDK removed');\n }\n }\n\n private loadKakaoSdk(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n if (document.getElementById(this.kakaoScriptId)) {\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.id = this.kakaoScriptId; // Set an ID to reference this script\n // SDK 2.x - Kakao.Auth.authorize() 리다이렉트 방식 사용\n script.src = 'https://t1.kakaocdn.net/kakao_js_sdk/2.7.7/kakao.min.js';\n // script.integrity = 'sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka';\n // script.crossOrigin = 'anonymous';\n script.onload = () => {\n console.log('Kakao SDK loaded');\n resolve();\n };\n script.onerror = () => reject(new Error('Failed to load Kakao SDK'));\n document.head.appendChild(script);\n });\n }\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -27,35 +27,31 @@ class Capacitor3KakaoLoginWeb extends core.WebPlugin {
|
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
|
-
//웹 카카오 로그인
|
|
30
|
+
//웹 카카오 로그인 (SDK 2.0 방식)
|
|
31
31
|
kakaoLogin() {
|
|
32
32
|
return new Promise(async (resolve, reject) => {
|
|
33
33
|
if (!this.web_key) {
|
|
34
34
|
reject('kakao_sdk_not_initialzed');
|
|
35
|
-
|
|
36
|
-
this.removeKakaoSdk();
|
|
37
|
-
await this.loadKakaoSdk();
|
|
38
|
-
if (typeof window['Kakao'] !== 'undefined') {
|
|
39
|
-
window['Kakao'].init(this.web_key); // Initialize Kakao with your JavaScript key
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
reject(new Error('Kakao undefined'));
|
|
35
|
+
return;
|
|
43
36
|
}
|
|
44
37
|
try {
|
|
45
|
-
|
|
38
|
+
this.removeKakaoSdk();
|
|
39
|
+
await this.loadKakaoSdk();
|
|
40
|
+
if (typeof window['Kakao'] === 'undefined') {
|
|
41
|
+
reject(new Error('Kakao undefined'));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// SDK 2.0 초기화
|
|
45
|
+
window.Kakao.init(this.web_key);
|
|
46
|
+
// SDK 2.0: authorize() 메서드 사용 (리다이렉트 방식)
|
|
47
|
+
window.Kakao.Auth.authorize({
|
|
48
|
+
redirectUri: window.location.origin + '/kakao-login-callback',
|
|
46
49
|
throughTalk: true,
|
|
47
|
-
|
|
48
|
-
success: (response) => {
|
|
49
|
-
console.log(response);
|
|
50
|
-
resolve({
|
|
51
|
-
value: response.access_token,
|
|
52
|
-
});
|
|
53
|
-
},
|
|
54
|
-
fail: (error) => {
|
|
55
|
-
console.error('Kakao Login Failed', error);
|
|
56
|
-
reject(new Error('Kakao Login Failed'));
|
|
57
|
-
},
|
|
50
|
+
state: 'kakao_login_' + Date.now(),
|
|
58
51
|
});
|
|
52
|
+
// 리다이렉트가 발생하므로 Promise는 즉시 resolve
|
|
53
|
+
// 실제 토큰은 handleKakaoCallback()에서 처리
|
|
54
|
+
resolve({ value: 'redirected' });
|
|
59
55
|
}
|
|
60
56
|
catch (e) {
|
|
61
57
|
console.error('Error during Kakao login', e);
|
|
@@ -63,66 +59,181 @@ class Capacitor3KakaoLoginWeb extends core.WebPlugin {
|
|
|
63
59
|
}
|
|
64
60
|
});
|
|
65
61
|
}
|
|
66
|
-
|
|
62
|
+
//리다이렉트 후 콜백 처리 (SDK 2.0 방식)
|
|
63
|
+
handleKakaoCallback() {
|
|
64
|
+
return new Promise(async (resolve, reject) => {
|
|
65
|
+
if (!this.web_key) {
|
|
66
|
+
reject('kakao_sdk_not_initialzed');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// SDK 2.0 초기화
|
|
70
|
+
window.Kakao.init(this.web_key);
|
|
71
|
+
console.log('handleKakaoCallback!!');
|
|
72
|
+
try {
|
|
73
|
+
// URL 파라미터 확인
|
|
74
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
75
|
+
const code = urlParams.get('code');
|
|
76
|
+
const error = urlParams.get('error');
|
|
77
|
+
if (error) {
|
|
78
|
+
// 에러 파라미터가 있는 경우
|
|
79
|
+
window.history.replaceState({}, '', window.location.pathname);
|
|
80
|
+
reject(new Error(`Kakao Login Failed: ${error}`));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (!code) {
|
|
84
|
+
// 인가 코드가 없는 경우 (리다이렉트 후가 아님)
|
|
85
|
+
reject(new Error('No authorization code found. Please call kakaoLogin() first.'));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const accessToken = window.Kakao.Auth.getAccessToken();
|
|
89
|
+
console.log('accessToken:', accessToken);
|
|
90
|
+
if (accessToken) {
|
|
91
|
+
// URL 파라미터 정리
|
|
92
|
+
window.history.replaceState({}, '', window.location.pathname);
|
|
93
|
+
resolve({ value: accessToken });
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
reject(new Error('Kakao Login Failed: Token exchange failed'));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
console.error('Error during Kakao callback handling', e);
|
|
101
|
+
reject(e);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//웹 로그아웃 (SDK 2.0 방식)
|
|
67
106
|
kakaoLogout() {
|
|
68
107
|
return new Promise((resolve, reject) => {
|
|
69
108
|
if (!this.web_key) {
|
|
70
109
|
reject('kakao_sdk_not_initialzed');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const KakaoSdk = window['Kakao'];
|
|
114
|
+
if (KakaoSdk && KakaoSdk.Auth) {
|
|
115
|
+
// SDK 2.0: logout()은 Promise를 반환할 수 있음
|
|
116
|
+
const logoutResult = KakaoSdk.Auth.logout();
|
|
117
|
+
if (logoutResult && typeof logoutResult.then === 'function') {
|
|
118
|
+
logoutResult
|
|
119
|
+
.then(() => {
|
|
120
|
+
resolve({ value: 'done' });
|
|
121
|
+
})
|
|
122
|
+
.catch((error) => {
|
|
123
|
+
console.error('Kakao Logout Failed', error);
|
|
124
|
+
reject(error);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// 동기 방식으로 처리되는 경우
|
|
129
|
+
resolve({ value: 'done' });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
console.error('Error during Kakao logout', e);
|
|
138
|
+
reject(e);
|
|
71
139
|
}
|
|
72
|
-
const KakaoSdk = window['Kakao'];
|
|
73
|
-
KakaoSdk.Auth.logout();
|
|
74
|
-
resolve({ value: 'done' });
|
|
75
140
|
});
|
|
76
141
|
}
|
|
77
|
-
//unlink
|
|
142
|
+
//unlink (SDK 2.0 방식)
|
|
78
143
|
kakaoUnlink() {
|
|
79
144
|
return new Promise((resolve, reject) => {
|
|
80
145
|
if (!this.web_key) {
|
|
81
146
|
reject('kakao_sdk_not_initialzed');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const KakaoSdk = window['Kakao'];
|
|
151
|
+
if (KakaoSdk && KakaoSdk.API) {
|
|
152
|
+
// SDK 2.0: request()는 Promise를 반환
|
|
153
|
+
KakaoSdk.API.request({
|
|
154
|
+
url: '/v1/user/unlink',
|
|
155
|
+
})
|
|
156
|
+
.then((response) => {
|
|
157
|
+
console.log(response);
|
|
158
|
+
resolve({ value: 'done' });
|
|
159
|
+
})
|
|
160
|
+
.catch((error) => {
|
|
161
|
+
console.error('Kakao Unlink Failed', error);
|
|
162
|
+
reject(error);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
console.error('Error during Kakao unlink', e);
|
|
171
|
+
reject(e);
|
|
82
172
|
}
|
|
83
|
-
const KakaoSdk = window['Kakao'];
|
|
84
|
-
KakaoSdk.API.request({
|
|
85
|
-
url: '/v1/user/unlink',
|
|
86
|
-
success: function (response) {
|
|
87
|
-
console.log(response);
|
|
88
|
-
resolve({ value: 'done' });
|
|
89
|
-
},
|
|
90
|
-
fail: function (error) {
|
|
91
|
-
console.log(error);
|
|
92
|
-
reject(error);
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
173
|
});
|
|
96
174
|
}
|
|
97
|
-
//message
|
|
175
|
+
//message (SDK 2.0 방식)
|
|
98
176
|
sendLinkFeed(options) {
|
|
99
177
|
return new Promise((resolve, reject) => {
|
|
100
178
|
if (!this.web_key) {
|
|
101
179
|
reject('kakao_sdk_not_initialzed');
|
|
180
|
+
return;
|
|
102
181
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
title: options.button_title,
|
|
117
|
-
link: {
|
|
118
|
-
mobileWebUrl: options.image_link_url,
|
|
182
|
+
try {
|
|
183
|
+
const KakaoSdk = window['Kakao'];
|
|
184
|
+
if (KakaoSdk && KakaoSdk.Link) {
|
|
185
|
+
// SDK 2.0: sendDefault()는 Promise를 반환할 수 있음
|
|
186
|
+
const sendResult = KakaoSdk.Link.sendDefault({
|
|
187
|
+
objectType: 'feed',
|
|
188
|
+
content: {
|
|
189
|
+
title: options.title,
|
|
190
|
+
description: options.description,
|
|
191
|
+
imageUrl: options.image_url,
|
|
192
|
+
link: {
|
|
193
|
+
mobileWebUrl: options.image_link_url,
|
|
194
|
+
},
|
|
119
195
|
},
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
196
|
+
buttons: [
|
|
197
|
+
{
|
|
198
|
+
title: options.button_title,
|
|
199
|
+
link: {
|
|
200
|
+
mobileWebUrl: options.image_link_url,
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
});
|
|
205
|
+
if (sendResult && typeof sendResult.then === 'function') {
|
|
206
|
+
// Promise 기반 API
|
|
207
|
+
sendResult
|
|
208
|
+
.then(() => {
|
|
209
|
+
resolve({ value: 'done' });
|
|
210
|
+
})
|
|
211
|
+
.catch((error) => {
|
|
212
|
+
console.error('Kakao Link Send Failed', error);
|
|
213
|
+
reject(error);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// 콜백 방식 (하위 호환성)
|
|
218
|
+
if (typeof sendResult === 'object' && sendResult.callback) {
|
|
219
|
+
sendResult.callback = function () {
|
|
220
|
+
resolve({ value: 'done' });
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// 콜백이 없는 경우 직접 resolve
|
|
225
|
+
resolve({ value: 'done' });
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch (e) {
|
|
234
|
+
console.error('Error during Kakao link send', e);
|
|
235
|
+
reject(e);
|
|
236
|
+
}
|
|
126
237
|
});
|
|
127
238
|
}
|
|
128
239
|
removeKakaoSdk() {
|
|
@@ -141,7 +252,10 @@ class Capacitor3KakaoLoginWeb extends core.WebPlugin {
|
|
|
141
252
|
}
|
|
142
253
|
const script = document.createElement('script');
|
|
143
254
|
script.id = this.kakaoScriptId; // Set an ID to reference this script
|
|
144
|
-
|
|
255
|
+
// SDK 2.x - Kakao.Auth.authorize() 리다이렉트 방식 사용
|
|
256
|
+
script.src = 'https://t1.kakaocdn.net/kakao_js_sdk/2.7.7/kakao.min.js';
|
|
257
|
+
// script.integrity = 'sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka';
|
|
258
|
+
// script.crossOrigin = 'anonymous';
|
|
145
259
|
script.onload = () => {
|
|
146
260
|
console.log('Kakao SDK loaded');
|
|
147
261
|
resolve();
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst Capacitor3KakaoLogin = registerPlugin('Capacitor3KakaoLogin', {\n web: () => import('./web').then(m => new m.Capacitor3KakaoLoginWeb()),\n});\nexport * from './definitions';\nexport { Capacitor3KakaoLogin };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class Capacitor3KakaoLoginWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.kakaoScriptId = 'kakao-js-sdk'; // Unique ID for the Kakao SDK script\n }\n initializeKakao(options) {\n return new Promise(async (resolve, reject) => {\n try {\n if (!this.web_key) {\n this.web_key = options.web_key;\n }\n resolve({ value: 'done' });\n }\n catch (error) {\n console.error(error);\n reject(error);\n }\n });\n }\n //웹 카카오 로그인\n kakaoLogin() {\n return new Promise(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n this.removeKakaoSdk();\n await this.loadKakaoSdk();\n if (typeof window['Kakao'] !== 'undefined') {\n window['Kakao'].init(this.web_key); // Initialize Kakao with your JavaScript key\n }\n else {\n reject(new Error('Kakao undefined'));\n }\n try {\n window.Kakao.Auth.login({\n throughTalk: true,\n persistAccessToken: true,\n success: (response) => {\n console.log(response);\n resolve({\n value: response.access_token,\n });\n },\n fail: (error) => {\n console.error('Kakao Login Failed', error);\n reject(new Error('Kakao Login Failed'));\n },\n });\n }\n catch (e) {\n console.error('Error during Kakao login', e);\n reject(e);\n }\n });\n }\n //웹 로그아웃\n kakaoLogout() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n const KakaoSdk = window['Kakao'];\n KakaoSdk.Auth.logout();\n resolve({ value: 'done' });\n });\n }\n //unlink\n kakaoUnlink() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n const KakaoSdk = window['Kakao'];\n KakaoSdk.API.request({\n url: '/v1/user/unlink',\n success: function (response) {\n console.log(response);\n resolve({ value: 'done' });\n },\n fail: function (error) {\n console.log(error);\n reject(error);\n },\n });\n });\n }\n //message\n sendLinkFeed(options) {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n const KakaoSdk = window['Kakao'];\n KakaoSdk.Link.sendDefault({\n objectType: 'feed',\n content: {\n title: options.title,\n description: options.description,\n imageUrl: options.image_url,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n buttons: [\n {\n title: options.button_title,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n ],\n callback: function () {\n resolve({ value: 'done' });\n },\n });\n });\n }\n removeKakaoSdk() {\n const script = document.getElementById(this.kakaoScriptId);\n if (script) {\n document.head.removeChild(script); // Remove the script from the DOM\n console.log('Kakao SDK removed');\n }\n }\n loadKakaoSdk() {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n if (document.getElementById(this.kakaoScriptId)) {\n resolve();\n return;\n }\n const script = document.createElement('script');\n script.id = this.kakaoScriptId; // Set an ID to reference this script\n script.src = 'https://developers.kakao.com/sdk/js/kakao.min.js';\n script.onload = () => {\n console.log('Kakao SDK loaded');\n resolve();\n };\n script.onerror = () => reject(new Error('Failed to load Kakao SDK'));\n document.head.appendChild(script);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst Capacitor3KakaoLogin = registerPlugin('Capacitor3KakaoLogin', {\n web: () => import('./web').then(m => new m.Capacitor3KakaoLoginWeb()),\n});\nexport * from './definitions';\nexport { Capacitor3KakaoLogin };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class Capacitor3KakaoLoginWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.kakaoScriptId = 'kakao-js-sdk'; // Unique ID for the Kakao SDK script\n }\n initializeKakao(options) {\n return new Promise(async (resolve, reject) => {\n try {\n if (!this.web_key) {\n this.web_key = options.web_key;\n }\n resolve({ value: 'done' });\n }\n catch (error) {\n console.error(error);\n reject(error);\n }\n });\n }\n //웹 카카오 로그인 (SDK 2.0 방식)\n kakaoLogin() {\n return new Promise(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n this.removeKakaoSdk();\n await this.loadKakaoSdk();\n if (typeof window['Kakao'] === 'undefined') {\n reject(new Error('Kakao undefined'));\n return;\n }\n // SDK 2.0 초기화\n window.Kakao.init(this.web_key);\n // SDK 2.0: authorize() 메서드 사용 (리다이렉트 방식)\n window.Kakao.Auth.authorize({\n redirectUri: window.location.origin + '/kakao-login-callback',\n throughTalk: true,\n state: 'kakao_login_' + Date.now(),\n });\n // 리다이렉트가 발생하므로 Promise는 즉시 resolve\n // 실제 토큰은 handleKakaoCallback()에서 처리\n resolve({ value: 'redirected' });\n }\n catch (e) {\n console.error('Error during Kakao login', e);\n reject(e);\n }\n });\n }\n //리다이렉트 후 콜백 처리 (SDK 2.0 방식)\n handleKakaoCallback() {\n return new Promise(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n // SDK 2.0 초기화\n window.Kakao.init(this.web_key);\n console.log('handleKakaoCallback!!');\n try {\n // URL 파라미터 확인\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get('code');\n const error = urlParams.get('error');\n if (error) {\n // 에러 파라미터가 있는 경우\n window.history.replaceState({}, '', window.location.pathname);\n reject(new Error(`Kakao Login Failed: ${error}`));\n return;\n }\n if (!code) {\n // 인가 코드가 없는 경우 (리다이렉트 후가 아님)\n reject(new Error('No authorization code found. Please call kakaoLogin() first.'));\n return;\n }\n const accessToken = window.Kakao.Auth.getAccessToken();\n console.log('accessToken:', accessToken);\n if (accessToken) {\n // URL 파라미터 정리\n window.history.replaceState({}, '', window.location.pathname);\n resolve({ value: accessToken });\n }\n else {\n reject(new Error('Kakao Login Failed: Token exchange failed'));\n }\n }\n catch (e) {\n console.error('Error during Kakao callback handling', e);\n reject(e);\n }\n });\n }\n //웹 로그아웃 (SDK 2.0 방식)\n kakaoLogout() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n const KakaoSdk = window['Kakao'];\n if (KakaoSdk && KakaoSdk.Auth) {\n // SDK 2.0: logout()은 Promise를 반환할 수 있음\n const logoutResult = KakaoSdk.Auth.logout();\n if (logoutResult && typeof logoutResult.then === 'function') {\n logoutResult\n .then(() => {\n resolve({ value: 'done' });\n })\n .catch((error) => {\n console.error('Kakao Logout Failed', error);\n reject(error);\n });\n }\n else {\n // 동기 방식으로 처리되는 경우\n resolve({ value: 'done' });\n }\n }\n else {\n reject(new Error('Kakao SDK not initialized'));\n }\n }\n catch (e) {\n console.error('Error during Kakao logout', e);\n reject(e);\n }\n });\n }\n //unlink (SDK 2.0 방식)\n kakaoUnlink() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n const KakaoSdk = window['Kakao'];\n if (KakaoSdk && KakaoSdk.API) {\n // SDK 2.0: request()는 Promise를 반환\n KakaoSdk.API.request({\n url: '/v1/user/unlink',\n })\n .then((response) => {\n console.log(response);\n resolve({ value: 'done' });\n })\n .catch((error) => {\n console.error('Kakao Unlink Failed', error);\n reject(error);\n });\n }\n else {\n reject(new Error('Kakao SDK not initialized'));\n }\n }\n catch (e) {\n console.error('Error during Kakao unlink', e);\n reject(e);\n }\n });\n }\n //message (SDK 2.0 방식)\n sendLinkFeed(options) {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n const KakaoSdk = window['Kakao'];\n if (KakaoSdk && KakaoSdk.Link) {\n // SDK 2.0: sendDefault()는 Promise를 반환할 수 있음\n const sendResult = KakaoSdk.Link.sendDefault({\n objectType: 'feed',\n content: {\n title: options.title,\n description: options.description,\n imageUrl: options.image_url,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n buttons: [\n {\n title: options.button_title,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n ],\n });\n if (sendResult && typeof sendResult.then === 'function') {\n // Promise 기반 API\n sendResult\n .then(() => {\n resolve({ value: 'done' });\n })\n .catch((error) => {\n console.error('Kakao Link Send Failed', error);\n reject(error);\n });\n }\n else {\n // 콜백 방식 (하위 호환성)\n if (typeof sendResult === 'object' && sendResult.callback) {\n sendResult.callback = function () {\n resolve({ value: 'done' });\n };\n }\n else {\n // 콜백이 없는 경우 직접 resolve\n resolve({ value: 'done' });\n }\n }\n }\n else {\n reject(new Error('Kakao SDK not initialized'));\n }\n }\n catch (e) {\n console.error('Error during Kakao link send', e);\n reject(e);\n }\n });\n }\n removeKakaoSdk() {\n const script = document.getElementById(this.kakaoScriptId);\n if (script) {\n document.head.removeChild(script); // Remove the script from the DOM\n console.log('Kakao SDK removed');\n }\n }\n loadKakaoSdk() {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n if (document.getElementById(this.kakaoScriptId)) {\n resolve();\n return;\n }\n const script = document.createElement('script');\n script.id = this.kakaoScriptId; // Set an ID to reference this script\n // SDK 2.x - Kakao.Auth.authorize() 리다이렉트 방식 사용\n script.src = 'https://t1.kakaocdn.net/kakao_js_sdk/2.7.7/kakao.min.js';\n // script.integrity = 'sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka';\n // script.crossOrigin = 'anonymous';\n script.onload = () => {\n console.log('Kakao SDK loaded');\n resolve();\n };\n script.onerror = () => reject(new Error('Failed to load Kakao SDK'));\n document.head.appendChild(script);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -24,35 +24,31 @@ var Capacitor3KakaoLogin = (function (exports, core) {
|
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
//웹 카카오 로그인
|
|
27
|
+
//웹 카카오 로그인 (SDK 2.0 방식)
|
|
28
28
|
kakaoLogin() {
|
|
29
29
|
return new Promise(async (resolve, reject) => {
|
|
30
30
|
if (!this.web_key) {
|
|
31
31
|
reject('kakao_sdk_not_initialzed');
|
|
32
|
-
|
|
33
|
-
this.removeKakaoSdk();
|
|
34
|
-
await this.loadKakaoSdk();
|
|
35
|
-
if (typeof window['Kakao'] !== 'undefined') {
|
|
36
|
-
window['Kakao'].init(this.web_key); // Initialize Kakao with your JavaScript key
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
reject(new Error('Kakao undefined'));
|
|
32
|
+
return;
|
|
40
33
|
}
|
|
41
34
|
try {
|
|
42
|
-
|
|
35
|
+
this.removeKakaoSdk();
|
|
36
|
+
await this.loadKakaoSdk();
|
|
37
|
+
if (typeof window['Kakao'] === 'undefined') {
|
|
38
|
+
reject(new Error('Kakao undefined'));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// SDK 2.0 초기화
|
|
42
|
+
window.Kakao.init(this.web_key);
|
|
43
|
+
// SDK 2.0: authorize() 메서드 사용 (리다이렉트 방식)
|
|
44
|
+
window.Kakao.Auth.authorize({
|
|
45
|
+
redirectUri: window.location.origin + '/kakao-login-callback',
|
|
43
46
|
throughTalk: true,
|
|
44
|
-
|
|
45
|
-
success: (response) => {
|
|
46
|
-
console.log(response);
|
|
47
|
-
resolve({
|
|
48
|
-
value: response.access_token,
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
fail: (error) => {
|
|
52
|
-
console.error('Kakao Login Failed', error);
|
|
53
|
-
reject(new Error('Kakao Login Failed'));
|
|
54
|
-
},
|
|
47
|
+
state: 'kakao_login_' + Date.now(),
|
|
55
48
|
});
|
|
49
|
+
// 리다이렉트가 발생하므로 Promise는 즉시 resolve
|
|
50
|
+
// 실제 토큰은 handleKakaoCallback()에서 처리
|
|
51
|
+
resolve({ value: 'redirected' });
|
|
56
52
|
}
|
|
57
53
|
catch (e) {
|
|
58
54
|
console.error('Error during Kakao login', e);
|
|
@@ -60,66 +56,181 @@ var Capacitor3KakaoLogin = (function (exports, core) {
|
|
|
60
56
|
}
|
|
61
57
|
});
|
|
62
58
|
}
|
|
63
|
-
|
|
59
|
+
//리다이렉트 후 콜백 처리 (SDK 2.0 방식)
|
|
60
|
+
handleKakaoCallback() {
|
|
61
|
+
return new Promise(async (resolve, reject) => {
|
|
62
|
+
if (!this.web_key) {
|
|
63
|
+
reject('kakao_sdk_not_initialzed');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// SDK 2.0 초기화
|
|
67
|
+
window.Kakao.init(this.web_key);
|
|
68
|
+
console.log('handleKakaoCallback!!');
|
|
69
|
+
try {
|
|
70
|
+
// URL 파라미터 확인
|
|
71
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
72
|
+
const code = urlParams.get('code');
|
|
73
|
+
const error = urlParams.get('error');
|
|
74
|
+
if (error) {
|
|
75
|
+
// 에러 파라미터가 있는 경우
|
|
76
|
+
window.history.replaceState({}, '', window.location.pathname);
|
|
77
|
+
reject(new Error(`Kakao Login Failed: ${error}`));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!code) {
|
|
81
|
+
// 인가 코드가 없는 경우 (리다이렉트 후가 아님)
|
|
82
|
+
reject(new Error('No authorization code found. Please call kakaoLogin() first.'));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const accessToken = window.Kakao.Auth.getAccessToken();
|
|
86
|
+
console.log('accessToken:', accessToken);
|
|
87
|
+
if (accessToken) {
|
|
88
|
+
// URL 파라미터 정리
|
|
89
|
+
window.history.replaceState({}, '', window.location.pathname);
|
|
90
|
+
resolve({ value: accessToken });
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
reject(new Error('Kakao Login Failed: Token exchange failed'));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
console.error('Error during Kakao callback handling', e);
|
|
98
|
+
reject(e);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//웹 로그아웃 (SDK 2.0 방식)
|
|
64
103
|
kakaoLogout() {
|
|
65
104
|
return new Promise((resolve, reject) => {
|
|
66
105
|
if (!this.web_key) {
|
|
67
106
|
reject('kakao_sdk_not_initialzed');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
const KakaoSdk = window['Kakao'];
|
|
111
|
+
if (KakaoSdk && KakaoSdk.Auth) {
|
|
112
|
+
// SDK 2.0: logout()은 Promise를 반환할 수 있음
|
|
113
|
+
const logoutResult = KakaoSdk.Auth.logout();
|
|
114
|
+
if (logoutResult && typeof logoutResult.then === 'function') {
|
|
115
|
+
logoutResult
|
|
116
|
+
.then(() => {
|
|
117
|
+
resolve({ value: 'done' });
|
|
118
|
+
})
|
|
119
|
+
.catch((error) => {
|
|
120
|
+
console.error('Kakao Logout Failed', error);
|
|
121
|
+
reject(error);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// 동기 방식으로 처리되는 경우
|
|
126
|
+
resolve({ value: 'done' });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
console.error('Error during Kakao logout', e);
|
|
135
|
+
reject(e);
|
|
68
136
|
}
|
|
69
|
-
const KakaoSdk = window['Kakao'];
|
|
70
|
-
KakaoSdk.Auth.logout();
|
|
71
|
-
resolve({ value: 'done' });
|
|
72
137
|
});
|
|
73
138
|
}
|
|
74
|
-
//unlink
|
|
139
|
+
//unlink (SDK 2.0 방식)
|
|
75
140
|
kakaoUnlink() {
|
|
76
141
|
return new Promise((resolve, reject) => {
|
|
77
142
|
if (!this.web_key) {
|
|
78
143
|
reject('kakao_sdk_not_initialzed');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const KakaoSdk = window['Kakao'];
|
|
148
|
+
if (KakaoSdk && KakaoSdk.API) {
|
|
149
|
+
// SDK 2.0: request()는 Promise를 반환
|
|
150
|
+
KakaoSdk.API.request({
|
|
151
|
+
url: '/v1/user/unlink',
|
|
152
|
+
})
|
|
153
|
+
.then((response) => {
|
|
154
|
+
console.log(response);
|
|
155
|
+
resolve({ value: 'done' });
|
|
156
|
+
})
|
|
157
|
+
.catch((error) => {
|
|
158
|
+
console.error('Kakao Unlink Failed', error);
|
|
159
|
+
reject(error);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
console.error('Error during Kakao unlink', e);
|
|
168
|
+
reject(e);
|
|
79
169
|
}
|
|
80
|
-
const KakaoSdk = window['Kakao'];
|
|
81
|
-
KakaoSdk.API.request({
|
|
82
|
-
url: '/v1/user/unlink',
|
|
83
|
-
success: function (response) {
|
|
84
|
-
console.log(response);
|
|
85
|
-
resolve({ value: 'done' });
|
|
86
|
-
},
|
|
87
|
-
fail: function (error) {
|
|
88
|
-
console.log(error);
|
|
89
|
-
reject(error);
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
170
|
});
|
|
93
171
|
}
|
|
94
|
-
//message
|
|
172
|
+
//message (SDK 2.0 방식)
|
|
95
173
|
sendLinkFeed(options) {
|
|
96
174
|
return new Promise((resolve, reject) => {
|
|
97
175
|
if (!this.web_key) {
|
|
98
176
|
reject('kakao_sdk_not_initialzed');
|
|
177
|
+
return;
|
|
99
178
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
title: options.button_title,
|
|
114
|
-
link: {
|
|
115
|
-
mobileWebUrl: options.image_link_url,
|
|
179
|
+
try {
|
|
180
|
+
const KakaoSdk = window['Kakao'];
|
|
181
|
+
if (KakaoSdk && KakaoSdk.Link) {
|
|
182
|
+
// SDK 2.0: sendDefault()는 Promise를 반환할 수 있음
|
|
183
|
+
const sendResult = KakaoSdk.Link.sendDefault({
|
|
184
|
+
objectType: 'feed',
|
|
185
|
+
content: {
|
|
186
|
+
title: options.title,
|
|
187
|
+
description: options.description,
|
|
188
|
+
imageUrl: options.image_url,
|
|
189
|
+
link: {
|
|
190
|
+
mobileWebUrl: options.image_link_url,
|
|
191
|
+
},
|
|
116
192
|
},
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
193
|
+
buttons: [
|
|
194
|
+
{
|
|
195
|
+
title: options.button_title,
|
|
196
|
+
link: {
|
|
197
|
+
mobileWebUrl: options.image_link_url,
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
});
|
|
202
|
+
if (sendResult && typeof sendResult.then === 'function') {
|
|
203
|
+
// Promise 기반 API
|
|
204
|
+
sendResult
|
|
205
|
+
.then(() => {
|
|
206
|
+
resolve({ value: 'done' });
|
|
207
|
+
})
|
|
208
|
+
.catch((error) => {
|
|
209
|
+
console.error('Kakao Link Send Failed', error);
|
|
210
|
+
reject(error);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// 콜백 방식 (하위 호환성)
|
|
215
|
+
if (typeof sendResult === 'object' && sendResult.callback) {
|
|
216
|
+
sendResult.callback = function () {
|
|
217
|
+
resolve({ value: 'done' });
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// 콜백이 없는 경우 직접 resolve
|
|
222
|
+
resolve({ value: 'done' });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
reject(new Error('Kakao SDK not initialized'));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
console.error('Error during Kakao link send', e);
|
|
232
|
+
reject(e);
|
|
233
|
+
}
|
|
123
234
|
});
|
|
124
235
|
}
|
|
125
236
|
removeKakaoSdk() {
|
|
@@ -138,7 +249,10 @@ var Capacitor3KakaoLogin = (function (exports, core) {
|
|
|
138
249
|
}
|
|
139
250
|
const script = document.createElement('script');
|
|
140
251
|
script.id = this.kakaoScriptId; // Set an ID to reference this script
|
|
141
|
-
|
|
252
|
+
// SDK 2.x - Kakao.Auth.authorize() 리다이렉트 방식 사용
|
|
253
|
+
script.src = 'https://t1.kakaocdn.net/kakao_js_sdk/2.7.7/kakao.min.js';
|
|
254
|
+
// script.integrity = 'sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka';
|
|
255
|
+
// script.crossOrigin = 'anonymous';
|
|
142
256
|
script.onload = () => {
|
|
143
257
|
console.log('Kakao SDK loaded');
|
|
144
258
|
resolve();
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst Capacitor3KakaoLogin = registerPlugin('Capacitor3KakaoLogin', {\n web: () => import('./web').then(m => new m.Capacitor3KakaoLoginWeb()),\n});\nexport * from './definitions';\nexport { Capacitor3KakaoLogin };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class Capacitor3KakaoLoginWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.kakaoScriptId = 'kakao-js-sdk'; // Unique ID for the Kakao SDK script\n }\n initializeKakao(options) {\n return new Promise(async (resolve, reject) => {\n try {\n if (!this.web_key) {\n this.web_key = options.web_key;\n }\n resolve({ value: 'done' });\n }\n catch (error) {\n console.error(error);\n reject(error);\n }\n });\n }\n //웹 카카오 로그인\n kakaoLogin() {\n return new Promise(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n this.removeKakaoSdk();\n await this.loadKakaoSdk();\n if (typeof window['Kakao'] !== 'undefined') {\n window['Kakao'].init(this.web_key); // Initialize Kakao with your JavaScript key\n }\n else {\n reject(new Error('Kakao undefined'));\n }\n try {\n window.Kakao.Auth.login({\n throughTalk: true,\n persistAccessToken: true,\n success: (response) => {\n console.log(response);\n resolve({\n value: response.access_token,\n });\n },\n fail: (error) => {\n console.error('Kakao Login Failed', error);\n reject(new Error('Kakao Login Failed'));\n },\n });\n }\n catch (e) {\n console.error('Error during Kakao login', e);\n reject(e);\n }\n });\n }\n //웹 로그아웃\n kakaoLogout() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n const KakaoSdk = window['Kakao'];\n KakaoSdk.Auth.logout();\n resolve({ value: 'done' });\n });\n }\n //unlink\n kakaoUnlink() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n const KakaoSdk = window['Kakao'];\n KakaoSdk.API.request({\n url: '/v1/user/unlink',\n success: function (response) {\n console.log(response);\n resolve({ value: 'done' });\n },\n fail: function (error) {\n console.log(error);\n reject(error);\n },\n });\n });\n }\n //message\n sendLinkFeed(options) {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n }\n const KakaoSdk = window['Kakao'];\n KakaoSdk.Link.sendDefault({\n objectType: 'feed',\n content: {\n title: options.title,\n description: options.description,\n imageUrl: options.image_url,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n buttons: [\n {\n title: options.button_title,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n ],\n callback: function () {\n resolve({ value: 'done' });\n },\n });\n });\n }\n removeKakaoSdk() {\n const script = document.getElementById(this.kakaoScriptId);\n if (script) {\n document.head.removeChild(script); // Remove the script from the DOM\n console.log('Kakao SDK removed');\n }\n }\n loadKakaoSdk() {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n if (document.getElementById(this.kakaoScriptId)) {\n resolve();\n return;\n }\n const script = document.createElement('script');\n script.id = this.kakaoScriptId; // Set an ID to reference this script\n script.src = 'https://developers.kakao.com/sdk/js/kakao.min.js';\n script.onload = () => {\n console.log('Kakao SDK loaded');\n resolve();\n };\n script.onerror = () => reject(new Error('Failed to load Kakao SDK'));\n document.head.appendChild(script);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst Capacitor3KakaoLogin = registerPlugin('Capacitor3KakaoLogin', {\n web: () => import('./web').then(m => new m.Capacitor3KakaoLoginWeb()),\n});\nexport * from './definitions';\nexport { Capacitor3KakaoLogin };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class Capacitor3KakaoLoginWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.kakaoScriptId = 'kakao-js-sdk'; // Unique ID for the Kakao SDK script\n }\n initializeKakao(options) {\n return new Promise(async (resolve, reject) => {\n try {\n if (!this.web_key) {\n this.web_key = options.web_key;\n }\n resolve({ value: 'done' });\n }\n catch (error) {\n console.error(error);\n reject(error);\n }\n });\n }\n //웹 카카오 로그인 (SDK 2.0 방식)\n kakaoLogin() {\n return new Promise(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n this.removeKakaoSdk();\n await this.loadKakaoSdk();\n if (typeof window['Kakao'] === 'undefined') {\n reject(new Error('Kakao undefined'));\n return;\n }\n // SDK 2.0 초기화\n window.Kakao.init(this.web_key);\n // SDK 2.0: authorize() 메서드 사용 (리다이렉트 방식)\n window.Kakao.Auth.authorize({\n redirectUri: window.location.origin + '/kakao-login-callback',\n throughTalk: true,\n state: 'kakao_login_' + Date.now(),\n });\n // 리다이렉트가 발생하므로 Promise는 즉시 resolve\n // 실제 토큰은 handleKakaoCallback()에서 처리\n resolve({ value: 'redirected' });\n }\n catch (e) {\n console.error('Error during Kakao login', e);\n reject(e);\n }\n });\n }\n //리다이렉트 후 콜백 처리 (SDK 2.0 방식)\n handleKakaoCallback() {\n return new Promise(async (resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n // SDK 2.0 초기화\n window.Kakao.init(this.web_key);\n console.log('handleKakaoCallback!!');\n try {\n // URL 파라미터 확인\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get('code');\n const error = urlParams.get('error');\n if (error) {\n // 에러 파라미터가 있는 경우\n window.history.replaceState({}, '', window.location.pathname);\n reject(new Error(`Kakao Login Failed: ${error}`));\n return;\n }\n if (!code) {\n // 인가 코드가 없는 경우 (리다이렉트 후가 아님)\n reject(new Error('No authorization code found. Please call kakaoLogin() first.'));\n return;\n }\n const accessToken = window.Kakao.Auth.getAccessToken();\n console.log('accessToken:', accessToken);\n if (accessToken) {\n // URL 파라미터 정리\n window.history.replaceState({}, '', window.location.pathname);\n resolve({ value: accessToken });\n }\n else {\n reject(new Error('Kakao Login Failed: Token exchange failed'));\n }\n }\n catch (e) {\n console.error('Error during Kakao callback handling', e);\n reject(e);\n }\n });\n }\n //웹 로그아웃 (SDK 2.0 방식)\n kakaoLogout() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n const KakaoSdk = window['Kakao'];\n if (KakaoSdk && KakaoSdk.Auth) {\n // SDK 2.0: logout()은 Promise를 반환할 수 있음\n const logoutResult = KakaoSdk.Auth.logout();\n if (logoutResult && typeof logoutResult.then === 'function') {\n logoutResult\n .then(() => {\n resolve({ value: 'done' });\n })\n .catch((error) => {\n console.error('Kakao Logout Failed', error);\n reject(error);\n });\n }\n else {\n // 동기 방식으로 처리되는 경우\n resolve({ value: 'done' });\n }\n }\n else {\n reject(new Error('Kakao SDK not initialized'));\n }\n }\n catch (e) {\n console.error('Error during Kakao logout', e);\n reject(e);\n }\n });\n }\n //unlink (SDK 2.0 방식)\n kakaoUnlink() {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n const KakaoSdk = window['Kakao'];\n if (KakaoSdk && KakaoSdk.API) {\n // SDK 2.0: request()는 Promise를 반환\n KakaoSdk.API.request({\n url: '/v1/user/unlink',\n })\n .then((response) => {\n console.log(response);\n resolve({ value: 'done' });\n })\n .catch((error) => {\n console.error('Kakao Unlink Failed', error);\n reject(error);\n });\n }\n else {\n reject(new Error('Kakao SDK not initialized'));\n }\n }\n catch (e) {\n console.error('Error during Kakao unlink', e);\n reject(e);\n }\n });\n }\n //message (SDK 2.0 방식)\n sendLinkFeed(options) {\n return new Promise((resolve, reject) => {\n if (!this.web_key) {\n reject('kakao_sdk_not_initialzed');\n return;\n }\n try {\n const KakaoSdk = window['Kakao'];\n if (KakaoSdk && KakaoSdk.Link) {\n // SDK 2.0: sendDefault()는 Promise를 반환할 수 있음\n const sendResult = KakaoSdk.Link.sendDefault({\n objectType: 'feed',\n content: {\n title: options.title,\n description: options.description,\n imageUrl: options.image_url,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n buttons: [\n {\n title: options.button_title,\n link: {\n mobileWebUrl: options.image_link_url,\n },\n },\n ],\n });\n if (sendResult && typeof sendResult.then === 'function') {\n // Promise 기반 API\n sendResult\n .then(() => {\n resolve({ value: 'done' });\n })\n .catch((error) => {\n console.error('Kakao Link Send Failed', error);\n reject(error);\n });\n }\n else {\n // 콜백 방식 (하위 호환성)\n if (typeof sendResult === 'object' && sendResult.callback) {\n sendResult.callback = function () {\n resolve({ value: 'done' });\n };\n }\n else {\n // 콜백이 없는 경우 직접 resolve\n resolve({ value: 'done' });\n }\n }\n }\n else {\n reject(new Error('Kakao SDK not initialized'));\n }\n }\n catch (e) {\n console.error('Error during Kakao link send', e);\n reject(e);\n }\n });\n }\n removeKakaoSdk() {\n const script = document.getElementById(this.kakaoScriptId);\n if (script) {\n document.head.removeChild(script); // Remove the script from the DOM\n console.log('Kakao SDK removed');\n }\n }\n loadKakaoSdk() {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n if (document.getElementById(this.kakaoScriptId)) {\n resolve();\n return;\n }\n const script = document.createElement('script');\n script.id = this.kakaoScriptId; // Set an ID to reference this script\n // SDK 2.x - Kakao.Auth.authorize() 리다이렉트 방식 사용\n script.src = 'https://t1.kakaocdn.net/kakao_js_sdk/2.7.7/kakao.min.js';\n // script.integrity = 'sha384-DKYJZ8NLiK8MN4/C5P2dtSmLQ4KwPaoqAfyA/DfmEc1VDxu4yyC7wy6K1Hs90nka';\n // script.crossOrigin = 'anonymous';\n script.onload = () => {\n console.log('Kakao SDK loaded');\n resolve();\n };\n script.onerror = () => reject(new Error('Failed to load Kakao SDK'));\n document.head.appendChild(script);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|