@chuseok22/capacitor-kakao-login 0.1.8 → 0.3.0
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/README.md
CHANGED
|
@@ -5,6 +5,7 @@ Capacitor 앱에서 카카오 소셜 로그인을 최소한의 설정으로 사
|
|
|
5
5
|
- iOS / Android 지원
|
|
6
6
|
- 카카오톡 앱 로그인 우선, 미설치 시 카카오 계정 웹뷰 로그인으로 자동 폴백
|
|
7
7
|
- Capacitor 6.x 이상
|
|
8
|
+
- 닉네임, 이메일, 성별 등 카카오 사용자 정보 추가 반환 지원
|
|
8
9
|
|
|
9
10
|
---
|
|
10
11
|
|
|
@@ -74,6 +75,26 @@ SDK 초기화, URL 핸들러 등록, AuthCodeHandlerActivity는 플러그인이
|
|
|
74
75
|
|
|
75
76
|
앱 설정 → **카카오 로그인 → 활성화 설정 → ON**
|
|
76
77
|
|
|
78
|
+
### 2-4. 동의 항목 설정 (추가 사용자 정보가 필요한 경우)
|
|
79
|
+
|
|
80
|
+
`socialId` 외에 닉네임, 이메일 등 추가 정보를 받으려면 카카오 개발자 콘솔에서 동의 항목을 활성화해야 합니다.
|
|
81
|
+
|
|
82
|
+
**앱 설정 → 카카오 로그인 → 동의 항목** 에서 필요한 항목을 선택합니다.
|
|
83
|
+
|
|
84
|
+
| 동의 항목 | 반환 필드 | 필수/선택 |
|
|
85
|
+
|-----------|-----------|-----------|
|
|
86
|
+
| 프로필 정보 (닉네임/프로필 사진) | `nickname`, `profileImageUrl`, `thumbnailImageUrl` | 선택 |
|
|
87
|
+
| 카카오계정 (이메일) | `email` | 선택 |
|
|
88
|
+
| 이름 | `name` | 선택 |
|
|
89
|
+
| 전화번호 | `phoneNumber` | 선택 |
|
|
90
|
+
| 성별 | `gender` | 선택 |
|
|
91
|
+
| 생일 | `birthday`, `birthyear` | 선택 |
|
|
92
|
+
|
|
93
|
+
> **주의사항:**
|
|
94
|
+
> - 동의 항목을 활성화하지 않으면 해당 필드는 `undefined`로 반환됩니다.
|
|
95
|
+
> - 사용자가 동의를 거부한 경우에도 해당 필드는 `undefined`입니다.
|
|
96
|
+
> - 카카오 비즈앱 심사를 통과해야 일부 항목(이름, 전화번호 등)을 실제 서비스에서 사용할 수 있습니다.
|
|
97
|
+
|
|
77
98
|
---
|
|
78
99
|
|
|
79
100
|
## 3. 설치
|
|
@@ -178,6 +199,11 @@ classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.21'
|
|
|
178
199
|
|
|
179
200
|
## 7. 사용법
|
|
180
201
|
|
|
202
|
+
### 기본 사용 (socialId만 필요한 경우)
|
|
203
|
+
|
|
204
|
+
대부분의 서비스는 서버 인증에 `socialId`만 사용합니다.
|
|
205
|
+
카카오 개발자 콘솔에서 별도 동의 항목 설정 없이 바로 사용할 수 있습니다.
|
|
206
|
+
|
|
181
207
|
```typescript
|
|
182
208
|
import { KakaoLogin } from '@chuseok22/capacitor-kakao-login';
|
|
183
209
|
|
|
@@ -192,6 +218,52 @@ async function loginWithKakao() {
|
|
|
192
218
|
}
|
|
193
219
|
```
|
|
194
220
|
|
|
221
|
+
### 추가 사용자 정보 활용 (동의 항목 활성화 후)
|
|
222
|
+
|
|
223
|
+
카카오 개발자 콘솔에서 동의 항목을 활성화한 경우, 로그인 결과에서 바로 추가 정보를 꺼낼 수 있습니다.
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
import { KakaoLogin } from '@chuseok22/capacitor-kakao-login';
|
|
227
|
+
|
|
228
|
+
async function loginWithKakao() {
|
|
229
|
+
try {
|
|
230
|
+
const result = await KakaoLogin.login();
|
|
231
|
+
|
|
232
|
+
// socialId는 항상 반환됩니다
|
|
233
|
+
console.log('카카오 ID:', result.socialId);
|
|
234
|
+
|
|
235
|
+
// 아래 필드는 카카오 개발자 콘솔에서 동의 항목을 활성화한 경우에만 값이 있습니다
|
|
236
|
+
if (result.nickname) {
|
|
237
|
+
console.log('닉네임:', result.nickname);
|
|
238
|
+
}
|
|
239
|
+
if (result.profileImageUrl) {
|
|
240
|
+
console.log('프로필 이미지:', result.profileImageUrl);
|
|
241
|
+
}
|
|
242
|
+
if (result.email) {
|
|
243
|
+
console.log('이메일:', result.email);
|
|
244
|
+
}
|
|
245
|
+
if (result.gender) {
|
|
246
|
+
console.log('성별:', result.gender); // 'male' | 'female' | 'other'
|
|
247
|
+
}
|
|
248
|
+
if (result.birthday) {
|
|
249
|
+
console.log('생일:', result.birthday); // 'MMDD' 형식, 예: '0101'
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// 서버에 전달
|
|
253
|
+
await registerUser({
|
|
254
|
+
socialId: result.socialId,
|
|
255
|
+
nickname: result.nickname,
|
|
256
|
+
email: result.email,
|
|
257
|
+
});
|
|
258
|
+
} catch (error) {
|
|
259
|
+
console.error('카카오 로그인 실패:', error);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
> **동의하지 않은 항목은 `undefined`입니다.**
|
|
265
|
+
> 사용 전 반드시 값이 존재하는지 확인하세요. (`result.nickname ?? '익명'` 패턴 권장)
|
|
266
|
+
|
|
195
267
|
---
|
|
196
268
|
|
|
197
269
|
## 8. API
|
|
@@ -206,12 +278,35 @@ login(): Promise<KakaoLoginResult>
|
|
|
206
278
|
- 카카오톡 설치 → 카카오톡 앱 로그인
|
|
207
279
|
- 카카오톡 미설치 → 카카오 계정 웹뷰 로그인 (자동 폴백)
|
|
208
280
|
|
|
209
|
-
|
|
281
|
+
**반환값 `KakaoLoginResult`:**
|
|
282
|
+
|
|
283
|
+
| 필드 | 타입 | 필수 여부 | 설명 | 필요한 동의 항목 |
|
|
284
|
+
|------|------|-----------|------|-----------------|
|
|
285
|
+
| `socialId` | `string` | 필수 | 카카오 회원 고유 ID. 서버 사용자 식별에 사용 | 없음 (기본 제공) |
|
|
286
|
+
| `nickname` | `string` | 선택 | 카카오 프로필 닉네임 | 프로필 정보 (닉네임/프로필 사진) |
|
|
287
|
+
| `profileImageUrl` | `string` | 선택 | 프로필 이미지 원본 URL | 프로필 정보 (닉네임/프로필 사진) |
|
|
288
|
+
| `thumbnailImageUrl` | `string` | 선택 | 프로필 이미지 썸네일 URL | 프로필 정보 (닉네임/프로필 사진) |
|
|
289
|
+
| `email` | `string` | 선택 | 카카오계정 이메일 | 카카오계정 (이메일) |
|
|
290
|
+
| `name` | `string` | 선택 | 카카오계정 실명 | 이름 |
|
|
291
|
+
| `phoneNumber` | `string` | 선택 | 카카오계정 전화번호. `+82 10-1234-5678` 형식 | 전화번호 |
|
|
292
|
+
| `gender` | `string` | 선택 | 성별. `'male'` \| `'female'` \| `'other'` | 성별 |
|
|
293
|
+
| `birthyear` | `string` | 선택 | 출생연도 4자리. 예: `'1990'` | 생일 |
|
|
294
|
+
| `birthday` | `string` | 선택 | 생일 MMDD 형식. 예: `'0101'` | 생일 |
|
|
295
|
+
|
|
296
|
+
**타입 정의:**
|
|
210
297
|
|
|
211
298
|
```typescript
|
|
212
299
|
interface KakaoLoginResult {
|
|
213
|
-
/** 카카오 회원 고유 ID. 서버에서 사용자를 식별하는 데 사용합니다. */
|
|
214
300
|
socialId: string;
|
|
301
|
+
nickname?: string;
|
|
302
|
+
profileImageUrl?: string;
|
|
303
|
+
thumbnailImageUrl?: string;
|
|
304
|
+
email?: string;
|
|
305
|
+
name?: string;
|
|
306
|
+
phoneNumber?: string;
|
|
307
|
+
gender?: string;
|
|
308
|
+
birthyear?: string;
|
|
309
|
+
birthday?: string;
|
|
215
310
|
}
|
|
216
311
|
```
|
|
217
312
|
|
|
@@ -220,7 +315,7 @@ interface KakaoLoginResult {
|
|
|
220
315
|
| 에러 메시지 | 원인 |
|
|
221
316
|
|------------|------|
|
|
222
317
|
| `카카오 로그인 실패: ...` | 사용자 취소 또는 카카오 인증 오류 |
|
|
223
|
-
|
|
|
318
|
+
| `카카오 사용자 정보 조회 실패: ...` | 카카오 API 호출 오류 |
|
|
224
319
|
| `카카오 사용자 ID를 가져올 수 없습니다` | 예상치 못한 응답 형식 |
|
|
225
320
|
|
|
226
321
|
---
|
|
@@ -263,6 +358,14 @@ interface KakaoLoginResult {
|
|
|
263
358
|
|
|
264
359
|
디버그 키해시와 릴리즈 키해시를 각각 콘솔에 등록해야 합니다.
|
|
265
360
|
|
|
361
|
+
### 동의 항목을 활성화했는데 필드가 `undefined`인 경우
|
|
362
|
+
|
|
363
|
+
아래 순서로 확인하세요.
|
|
364
|
+
|
|
365
|
+
1. 카카오 개발자 콘솔 → 앱 설정 → **카카오 로그인 → 동의 항목**에서 해당 항목이 **ON** 상태인지 확인
|
|
366
|
+
2. 이미 로그인한 사용자는 동의 화면이 다시 뜨지 않을 수 있습니다. 카카오 연결을 해제 후 재로그인하여 새 동의를 받아야 합니다.
|
|
367
|
+
3. 카카오 비즈앱 심사가 필요한 항목(이름, 전화번호 등)은 심사 전에는 테스트 계정에서만 동작합니다.
|
|
368
|
+
|
|
266
369
|
---
|
|
267
370
|
|
|
268
371
|
## License
|
|
@@ -56,8 +56,20 @@ class KakaoLoginPlugin : Plugin() {
|
|
|
56
56
|
return@me
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
val account = user.kakaoAccount
|
|
60
|
+
val profile = account?.profile
|
|
61
|
+
|
|
59
62
|
val result = JSObject()
|
|
60
63
|
result.put("socialId", userId.toString())
|
|
64
|
+
profile?.nickname?.let { result.put("nickname", it) }
|
|
65
|
+
profile?.profileImageUrl?.let { result.put("profileImageUrl", it) }
|
|
66
|
+
profile?.thumbnailImageUrl?.let { result.put("thumbnailImageUrl", it) }
|
|
67
|
+
account?.email?.let { result.put("email", it) }
|
|
68
|
+
account?.name?.let { result.put("name", it) }
|
|
69
|
+
account?.phoneNumber?.let { result.put("phoneNumber", it) }
|
|
70
|
+
account?.gender?.let { result.put("gender", it.name.lowercase()) }
|
|
71
|
+
account?.birthyear?.let { result.put("birthyear", it) }
|
|
72
|
+
account?.birthday?.let { result.put("birthday", it) }
|
|
61
73
|
call.resolve(result)
|
|
62
74
|
}
|
|
63
75
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const APP_VERSION = '0.
|
|
1
|
+
export const APP_VERSION = '0.3.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -3,11 +3,29 @@ export interface KakaoLoginPlugin {
|
|
|
3
3
|
* 카카오 로그인을 실행한다.
|
|
4
4
|
* - 카카오톡 앱이 설치된 경우: 앱을 통한 로그인
|
|
5
5
|
* - 미설치 시: 카카오 계정 웹뷰 로그인
|
|
6
|
-
* @returns 카카오 사용자
|
|
6
|
+
* @returns 카카오 사용자 정보. 동의한 스코프의 필드만 값이 채워진다.
|
|
7
7
|
*/
|
|
8
8
|
login(): Promise<KakaoLoginResult>;
|
|
9
9
|
}
|
|
10
10
|
export interface KakaoLoginResult {
|
|
11
11
|
/** 카카오 회원 고유 ID. 서버에 전달하여 사용자 식별에 사용한다. */
|
|
12
12
|
socialId: string;
|
|
13
|
+
/** 닉네임. 카카오 개발자 콘솔에서 profile 동의 항목 활성화 필요. */
|
|
14
|
+
nickname?: string;
|
|
15
|
+
/** 프로필 이미지 URL. profile 동의 항목 활성화 필요. */
|
|
16
|
+
profileImageUrl?: string;
|
|
17
|
+
/** 썸네일 이미지 URL. profile 동의 항목 활성화 필요. */
|
|
18
|
+
thumbnailImageUrl?: string;
|
|
19
|
+
/** 이메일. account_email 동의 항목 활성화 필요. */
|
|
20
|
+
email?: string;
|
|
21
|
+
/** 실명. name 동의 항목 활성화 필요. */
|
|
22
|
+
name?: string;
|
|
23
|
+
/** 전화번호. phone_number 동의 항목 활성화 필요. */
|
|
24
|
+
phoneNumber?: string;
|
|
25
|
+
/** 성별. 'male' | 'female' | 'other'. gender 동의 항목 활성화 필요. */
|
|
26
|
+
gender?: string;
|
|
27
|
+
/** 출생연도 4자리 (예: '1990'). birthdate 동의 항목 활성화 필요. */
|
|
28
|
+
birthyear?: string;
|
|
29
|
+
/** 생일 MMDD 형식 (예: '0101'). birthdate 동의 항목 활성화 필요. */
|
|
30
|
+
birthday?: string;
|
|
13
31
|
}
|
|
@@ -77,7 +77,22 @@ public class KakaoLoginPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
77
77
|
call.reject("카카오 사용자 ID를 가져올 수 없습니다")
|
|
78
78
|
return
|
|
79
79
|
}
|
|
80
|
-
|
|
80
|
+
|
|
81
|
+
let account = user?.kakaoAccount
|
|
82
|
+
let profile = account?.profile
|
|
83
|
+
|
|
84
|
+
var result: [String: Any] = ["socialId": String(userId)]
|
|
85
|
+
if let v = profile?.nickname { result["nickname"] = v }
|
|
86
|
+
if let v = profile?.profileImageUrl { result["profileImageUrl"] = v.absoluteString }
|
|
87
|
+
if let v = profile?.thumbnailImageUrl { result["thumbnailImageUrl"] = v.absoluteString }
|
|
88
|
+
if let v = account?.email { result["email"] = v }
|
|
89
|
+
if let v = account?.name { result["name"] = v }
|
|
90
|
+
if let v = account?.phoneNumber { result["phoneNumber"] = v }
|
|
91
|
+
if let v = account?.gender { result["gender"] = v.rawValue }
|
|
92
|
+
if let v = account?.birthyear { result["birthyear"] = v }
|
|
93
|
+
if let v = account?.birthday { result["birthday"] = v }
|
|
94
|
+
|
|
95
|
+
call.resolve(result)
|
|
81
96
|
}
|
|
82
97
|
}
|
|
83
98
|
}
|