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.
@@ -8,6 +8,9 @@ export interface Capacitor3KakaoLoginPlugin {
8
8
  kakaoLogin(): Promise<{
9
9
  value: string;
10
10
  }>;
11
+ handleKakaoCallback(): Promise<{
12
+ value: string;
13
+ }>;
11
14
  kakaoLogout(): Promise<{
12
15
  value: string;
13
16
  }>;
@@ -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
@@ -16,6 +16,9 @@ export declare class Capacitor3KakaoLoginWeb extends WebPlugin implements Capaci
16
16
  kakaoLogin(): Promise<{
17
17
  value: string;
18
18
  }>;
19
+ handleKakaoCallback(): Promise<{
20
+ value: string;
21
+ }>;
19
22
  kakaoLogout(): Promise<{
20
23
  value: string;
21
24
  }>;
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
- window.Kakao.Auth.login({
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
- persistAccessToken: true,
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
- const KakaoSdk = window['Kakao'];
95
- KakaoSdk.Link.sendDefault({
96
- objectType: 'feed',
97
- content: {
98
- title: options.title,
99
- description: options.description,
100
- imageUrl: options.image_url,
101
- link: {
102
- mobileWebUrl: options.image_link_url,
103
- },
104
- },
105
- buttons: [
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
- callback: function () {
114
- resolve({ value: 'done' });
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
- script.src = 'https://developers.kakao.com/sdk/js/kakao.min.js';
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();
@@ -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":"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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 //웹 카카오 로그인 (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"]}
@@ -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
- window.Kakao.Auth.login({
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
- persistAccessToken: true,
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
- const KakaoSdk = window['Kakao'];
104
- KakaoSdk.Link.sendDefault({
105
- objectType: 'feed',
106
- content: {
107
- title: options.title,
108
- description: options.description,
109
- imageUrl: options.image_url,
110
- link: {
111
- mobileWebUrl: options.image_link_url,
112
- },
113
- },
114
- buttons: [
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
- callback: function () {
123
- resolve({ value: 'done' });
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
- script.src = 'https://developers.kakao.com/sdk/js/kakao.min.js';
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();
@@ -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
- window.Kakao.Auth.login({
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
- persistAccessToken: true,
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
- const KakaoSdk = window['Kakao'];
101
- KakaoSdk.Link.sendDefault({
102
- objectType: 'feed',
103
- content: {
104
- title: options.title,
105
- description: options.description,
106
- imageUrl: options.image_url,
107
- link: {
108
- mobileWebUrl: options.image_link_url,
109
- },
110
- },
111
- buttons: [
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
- callback: function () {
120
- resolve({ value: 'done' });
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
- script.src = 'https://developers.kakao.com/sdk/js/kakao.min.js';
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();
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacitor3-kakao-login",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "description": "kakao login for capacitor8",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",