@chuseok22/capacitor-kakao-login 0.1.4 → 0.1.6
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 +183 -97
- package/android/src/main/AndroidManifest.xml +21 -0
- package/android/src/main/java/com/capacitorkakaologin/KakaoLoginPlugin.kt +18 -1
- package/dist/esm/constants/version.js +1 -1
- package/ios/Sources/Chuseok22CapacitorKakaoLogin/KakaoLoginPlugin.swift +20 -7
- package/package.json +1 -1
- package/ios/Sources/KakaoLoginPlugin/KakaoLoginPlugin.swift +0 -3
package/README.md
CHANGED
|
@@ -1,65 +1,122 @@
|
|
|
1
1
|
# @chuseok22/capacitor-kakao-login
|
|
2
2
|
|
|
3
|
-
Capacitor 앱에서 카카오 소셜 로그인을
|
|
3
|
+
Capacitor 앱에서 카카오 소셜 로그인을 최소한의 설정으로 사용할 수 있는 플러그인입니다.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- iOS / Android 지원
|
|
6
|
+
- 카카오톡 앱 로그인 우선, 미설치 시 카카오 계정 웹뷰 로그인으로 자동 폴백
|
|
7
|
+
- Capacitor 6.x 이상
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
---
|
|
8
10
|
|
|
9
|
-
##
|
|
11
|
+
## 빠른 시작
|
|
12
|
+
|
|
13
|
+
**사용자가 해야 할 일은 총 4가지입니다.**
|
|
10
14
|
|
|
11
|
-
```
|
|
12
|
-
npm install
|
|
13
|
-
|
|
15
|
+
```
|
|
16
|
+
1. npm install + cap sync
|
|
17
|
+
2. capacitor.config.ts에 appKey 설정
|
|
18
|
+
3. iOS Info.plist에 URL 스킴 등록
|
|
19
|
+
4. Android build.gradle에 manifestPlaceholders 1줄 추가
|
|
14
20
|
```
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
SDK 초기화, URL 핸들러 등록, AuthCodeHandlerActivity는 플러그인이 자동으로 처리합니다.
|
|
17
23
|
|
|
18
|
-
|
|
19
|
-
import { KakaoLogin } from '@chuseok22/capacitor-kakao-login';
|
|
24
|
+
---
|
|
20
25
|
|
|
21
|
-
|
|
22
|
-
const { socialId } = await KakaoLogin.login();
|
|
23
|
-
console.log('카카오 사용자 ID:', socialId);
|
|
24
|
-
} catch (error) {
|
|
25
|
-
console.error('카카오 로그인 실패:', error);
|
|
26
|
-
}
|
|
27
|
-
```
|
|
26
|
+
## 목차
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
1. [사전 요구사항](#1-사전-요구사항)
|
|
29
|
+
2. [카카오 개발자 콘솔 설정](#2-카카오-개발자-콘솔-설정)
|
|
30
|
+
3. [설치](#3-설치)
|
|
31
|
+
4. [앱 키 설정 (공통)](#4-앱-키-설정-공통)
|
|
32
|
+
5. [iOS 설정](#5-ios-설정)
|
|
33
|
+
6. [Android 설정](#6-android-설정)
|
|
34
|
+
7. [사용법](#7-사용법)
|
|
35
|
+
8. [API](#8-api)
|
|
36
|
+
9. [지원 플랫폼](#9-지원-플랫폼)
|
|
37
|
+
10. [트러블슈팅](#10-트러블슈팅)
|
|
30
38
|
|
|
31
|
-
|
|
39
|
+
---
|
|
32
40
|
|
|
33
|
-
|
|
34
|
-
import KakaoSDKCommon
|
|
41
|
+
## 1. 사전 요구사항
|
|
35
42
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
| 항목 | 최소 버전 |
|
|
44
|
+
|------|-----------|
|
|
45
|
+
| Capacitor | 6.x 이상 |
|
|
46
|
+
| iOS | 13.0 이상 |
|
|
47
|
+
| Android | API 22 (Android 5.1) 이상 |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 2. 카카오 개발자 콘솔 설정
|
|
52
|
+
|
|
53
|
+
### 2-1. 앱 등록 및 네이티브 앱 키 발급
|
|
54
|
+
|
|
55
|
+
1. [카카오 개발자 콘솔](https://developers.kakao.com) → **내 애플리케이션 → 애플리케이션 추가하기**
|
|
56
|
+
2. 앱 이름, 회사명 입력 후 저장
|
|
57
|
+
3. **앱 키** 탭에서 **네이티브 앱 키** 복사
|
|
58
|
+
|
|
59
|
+
### 2-2. 플랫폼 등록
|
|
60
|
+
|
|
61
|
+
**iOS:** 앱 설정 → 플랫폼 → iOS 플랫폼 등록 → **번들 ID** 입력 (Xcode 프로젝트의 Bundle Identifier)
|
|
62
|
+
|
|
63
|
+
**Android:** 앱 설정 → 플랫폼 → Android 플랫폼 등록 → **패키지명** 입력 + **키 해시** 등록
|
|
64
|
+
|
|
65
|
+
> **키 해시 추출 (개발용):**
|
|
66
|
+
> ```bash
|
|
67
|
+
> keytool -exportcert -alias androiddebugkey \
|
|
68
|
+
> -keystore ~/.android/debug.keystore \
|
|
69
|
+
> -storepass android -keypass android \
|
|
70
|
+
> | openssl sha1 -binary | openssl base64
|
|
71
|
+
> ```
|
|
72
|
+
|
|
73
|
+
### 2-3. 카카오 로그인 활성화
|
|
74
|
+
|
|
75
|
+
앱 설정 → **카카오 로그인 → 활성화 설정 → ON**
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 3. 설치
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm install @chuseok22/capacitor-kakao-login
|
|
83
|
+
npx cap sync
|
|
41
84
|
```
|
|
42
85
|
|
|
43
|
-
|
|
86
|
+
---
|
|
44
87
|
|
|
45
|
-
|
|
46
|
-
import KakaoSDKAuth
|
|
88
|
+
## 4. 앱 키 설정 (공통)
|
|
47
89
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
90
|
+
`capacitor.config.ts`에 카카오 네이티브 앱 키를 설정합니다.
|
|
91
|
+
플러그인이 이 값을 읽어 iOS/Android 모두 SDK를 자동 초기화합니다.
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { CapacitorConfig } from '@capacitor/cli';
|
|
95
|
+
|
|
96
|
+
const config: CapacitorConfig = {
|
|
97
|
+
appId: 'com.example.myapp',
|
|
98
|
+
appName: 'My App',
|
|
99
|
+
webDir: 'dist',
|
|
100
|
+
plugins: {
|
|
101
|
+
KakaoLogin: {
|
|
102
|
+
appKey: 'YOUR_NATIVE_APP_KEY' // ← 여기에 네이티브 앱 키 입력
|
|
52
103
|
}
|
|
53
|
-
|
|
54
|
-
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export default config;
|
|
55
108
|
```
|
|
56
109
|
|
|
57
|
-
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 5. iOS 설정
|
|
113
|
+
|
|
114
|
+
**AppDelegate 수정 없이 Info.plist만 설정하면 됩니다.**
|
|
58
115
|
|
|
59
|
-
|
|
116
|
+
`ios/App/App/Info.plist`에 아래 항목을 추가합니다.
|
|
60
117
|
|
|
61
118
|
```xml
|
|
62
|
-
<!-- 카카오톡
|
|
119
|
+
<!-- 카카오톡 설치 여부 확인을 위한 URL 스킴 허용 -->
|
|
63
120
|
<key>LSApplicationQueriesSchemes</key>
|
|
64
121
|
<array>
|
|
65
122
|
<string>kakaokompassauth</string>
|
|
@@ -67,98 +124,93 @@ func application(_ app: UIApplication, open url: URL,
|
|
|
67
124
|
<string>kakaolink</string>
|
|
68
125
|
</array>
|
|
69
126
|
|
|
70
|
-
<!--
|
|
127
|
+
<!-- OAuth 콜백 수신을 위한 커스텀 URL 스킴 등록 -->
|
|
71
128
|
<key>CFBundleURLTypes</key>
|
|
72
129
|
<array>
|
|
73
130
|
<dict>
|
|
74
131
|
<key>CFBundleURLSchemes</key>
|
|
75
132
|
<array>
|
|
76
|
-
<string>
|
|
133
|
+
<string>kakaoYOUR_NATIVE_APP_KEY</string>
|
|
77
134
|
</array>
|
|
78
135
|
</dict>
|
|
79
136
|
</array>
|
|
80
137
|
```
|
|
81
138
|
|
|
82
|
-
`
|
|
139
|
+
`YOUR_NATIVE_APP_KEY`를 실제 네이티브 앱 키로 교체하세요.
|
|
140
|
+
예: 앱 키가 `abc1234567` 이면 → `kakaoabc1234567`
|
|
83
141
|
|
|
84
|
-
|
|
142
|
+
> **왜 Info.plist는 직접 수정해야 하나요?**
|
|
143
|
+
> iOS는 외부 패키지가 호스트 앱의 Info.plist를 수정할 수 없습니다. 이 2가지 항목은 OS 제약상 불가피하게 수동 설정이 필요합니다.
|
|
85
144
|
|
|
86
|
-
|
|
145
|
+
---
|
|
87
146
|
|
|
88
|
-
|
|
147
|
+
## 6. Android 설정
|
|
148
|
+
|
|
149
|
+
**Application 클래스 생성, AndroidManifest 수정 없이 build.gradle 1줄만 추가하면 됩니다.**
|
|
150
|
+
|
|
151
|
+
`android/app/build.gradle`의 `defaultConfig` 블록에 아래 한 줄을 추가합니다.
|
|
89
152
|
|
|
90
153
|
```groovy
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
dependencies {
|
|
97
|
-
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.21'
|
|
154
|
+
android {
|
|
155
|
+
defaultConfig {
|
|
156
|
+
// 기존 항목들 유지...
|
|
157
|
+
|
|
158
|
+
manifestPlaceholders = [kakaoNativeAppKey: "YOUR_NATIVE_APP_KEY"] // ← 이 줄만 추가
|
|
98
159
|
}
|
|
99
160
|
}
|
|
100
161
|
```
|
|
101
162
|
|
|
102
|
-
|
|
163
|
+
`YOUR_NATIVE_APP_KEY`를 실제 네이티브 앱 키로 교체하세요.
|
|
103
164
|
|
|
104
|
-
|
|
165
|
+
> **이것만으로 충분한 이유:**
|
|
166
|
+
> - `AuthCodeHandlerActivity`는 플러그인 AndroidManifest에 선언되어 Gradle이 자동으로 호스트 앱 Manifest에 병합합니다.
|
|
167
|
+
> - `KakaoSdk.init()`는 플러그인 `load()` 시 자동으로 호출됩니다.
|
|
105
168
|
|
|
106
|
-
|
|
169
|
+
### Kotlin Gradle 플러그인 (필요한 경우)
|
|
107
170
|
|
|
108
|
-
|
|
109
|
-
import com.kakao.sdk.common.KakaoSdk
|
|
171
|
+
Gradle sync 오류가 발생하면 `android/build.gradle`의 `buildscript.dependencies`에 아래를 추가하세요.
|
|
110
172
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
super.onCreate()
|
|
114
|
-
KakaoSdk.init(this, "YOUR_NATIVE_APP_KEY")
|
|
115
|
-
}
|
|
116
|
-
}
|
|
173
|
+
```groovy
|
|
174
|
+
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.21'
|
|
117
175
|
```
|
|
118
176
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
```xml
|
|
122
|
-
<application
|
|
123
|
-
android:name=".MyApplication"
|
|
124
|
-
...>
|
|
125
|
-
```
|
|
177
|
+
---
|
|
126
178
|
|
|
127
|
-
|
|
179
|
+
## 7. 사용법
|
|
128
180
|
|
|
129
|
-
|
|
181
|
+
```typescript
|
|
182
|
+
import { KakaoLogin } from '@chuseok22/capacitor-kakao-login';
|
|
130
183
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
android:host="oauth"
|
|
141
|
-
android:scheme="kakao{NATIVE_APP_KEY}" />
|
|
142
|
-
</intent-filter>
|
|
143
|
-
</activity>
|
|
184
|
+
async function loginWithKakao() {
|
|
185
|
+
try {
|
|
186
|
+
const { socialId } = await KakaoLogin.login();
|
|
187
|
+
// socialId를 서버에 전달해 사용자 인증 처리
|
|
188
|
+
await authenticateWithServer(socialId);
|
|
189
|
+
} catch (error) {
|
|
190
|
+
console.error('카카오 로그인 실패:', error);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
144
193
|
```
|
|
145
194
|
|
|
146
|
-
|
|
195
|
+
---
|
|
147
196
|
|
|
148
|
-
## API
|
|
197
|
+
## 8. API
|
|
149
198
|
|
|
150
|
-
### `login()
|
|
199
|
+
### `KakaoLogin.login()`
|
|
151
200
|
|
|
152
|
-
|
|
201
|
+
```typescript
|
|
202
|
+
login(): Promise<KakaoLoginResult>
|
|
203
|
+
```
|
|
153
204
|
|
|
154
|
-
|
|
155
|
-
-
|
|
205
|
+
**동작:**
|
|
206
|
+
- 카카오톡 설치 → 카카오톡 앱 로그인
|
|
207
|
+
- 카카오톡 미설치 → 카카오 계정 웹뷰 로그인 (자동 폴백)
|
|
156
208
|
|
|
157
209
|
**반환값:**
|
|
158
210
|
|
|
159
211
|
```typescript
|
|
160
212
|
interface KakaoLoginResult {
|
|
161
|
-
/** 카카오 회원 고유 ID.
|
|
213
|
+
/** 카카오 회원 고유 ID. 서버에서 사용자를 식별하는 데 사용합니다. */
|
|
162
214
|
socialId: string;
|
|
163
215
|
}
|
|
164
216
|
```
|
|
@@ -171,13 +223,47 @@ interface KakaoLoginResult {
|
|
|
171
223
|
| `사용자 정보 조회 실패: ...` | 카카오 API 호출 오류 |
|
|
172
224
|
| `카카오 사용자 ID를 가져올 수 없습니다` | 예상치 못한 응답 형식 |
|
|
173
225
|
|
|
174
|
-
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 9. 지원 플랫폼
|
|
229
|
+
|
|
230
|
+
| 플랫폼 | 지원 | 최소 버전 |
|
|
231
|
+
|--------|------|-----------|
|
|
232
|
+
| iOS | ✅ | iOS 13.0+ |
|
|
233
|
+
| Android | ✅ | API 22+ |
|
|
234
|
+
| Web | ❌ | — |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 10. 트러블슈팅
|
|
239
|
+
|
|
240
|
+
### `appKey is not set` 경고가 콘솔에 출력되는 경우
|
|
241
|
+
|
|
242
|
+
`capacitor.config.ts`의 `plugins.KakaoLogin.appKey`가 설정되어 있는지 확인하세요.
|
|
243
|
+
설정 후 `npx cap sync`를 다시 실행해야 반영됩니다.
|
|
244
|
+
|
|
245
|
+
### iOS — 카카오톡 앱 로그인 후 앱으로 돌아오지 않는 경우
|
|
246
|
+
|
|
247
|
+
`Info.plist`의 `CFBundleURLSchemes`에 `kakao{네이티브앱키}` 형식으로 등록되어 있는지 확인하세요.
|
|
248
|
+
|
|
249
|
+
### iOS — `UNIMPLEMENTED` 에러
|
|
250
|
+
|
|
251
|
+
`npx cap sync`를 다시 실행하고, Xcode에서 **Product → Clean Build Folder** 후 재빌드하세요.
|
|
252
|
+
|
|
253
|
+
### Android — Gradle sync 오류 (`Unresolved reference: kotlin`)
|
|
254
|
+
|
|
255
|
+
`android/build.gradle`의 `buildscript.dependencies`에 Kotlin 플러그인 classpath를 추가하세요. ([6번 참고](#6-android-설정))
|
|
256
|
+
|
|
257
|
+
### Android — 로그인 후 앱으로 돌아오지 않는 경우
|
|
258
|
+
|
|
259
|
+
`android/app/build.gradle`의 `manifestPlaceholders`에 앱 키가 올바르게 입력되어 있는지 확인하세요.
|
|
260
|
+
값을 변경하면 `npx cap sync` 후 앱을 다시 빌드해야 합니다.
|
|
261
|
+
|
|
262
|
+
### 카카오 개발자 콘솔 — 키 해시 불일치 오류 (Android)
|
|
263
|
+
|
|
264
|
+
디버그 키해시와 릴리즈 키해시를 각각 콘솔에 등록해야 합니다.
|
|
175
265
|
|
|
176
|
-
|
|
177
|
-
|--------|------|
|
|
178
|
-
| iOS | ✅ iOS 13+ |
|
|
179
|
-
| Android | ✅ API 22+ |
|
|
180
|
-
| Web | ❌ 미지원 (네이티브 전용) |
|
|
266
|
+
---
|
|
181
267
|
|
|
182
268
|
## License
|
|
183
269
|
|
|
@@ -1,3 +1,24 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8"?>
|
|
2
2
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
3
|
+
|
|
4
|
+
<!--
|
|
5
|
+
Gradle manifest merging으로 호스트 앱의 AndroidManifest.xml에 자동 주입된다.
|
|
6
|
+
사용자는 android/app/build.gradle에 다음 한 줄만 추가하면 된다:
|
|
7
|
+
manifestPlaceholders = [kakaoNativeAppKey: "YOUR_NATIVE_APP_KEY"]
|
|
8
|
+
-->
|
|
9
|
+
<application>
|
|
10
|
+
<activity
|
|
11
|
+
android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
|
|
12
|
+
android:exported="true">
|
|
13
|
+
<intent-filter>
|
|
14
|
+
<action android:name="android.intent.action.VIEW" />
|
|
15
|
+
<category android:name="android.intent.category.DEFAULT" />
|
|
16
|
+
<category android:name="android.intent.category.BROWSABLE" />
|
|
17
|
+
<data
|
|
18
|
+
android:host="oauth"
|
|
19
|
+
android:scheme="kakao${kakaoNativeAppKey}" />
|
|
20
|
+
</intent-filter>
|
|
21
|
+
</activity>
|
|
22
|
+
</application>
|
|
23
|
+
|
|
3
24
|
</manifest>
|
|
@@ -6,15 +6,32 @@ import com.getcapacitor.PluginCall
|
|
|
6
6
|
import com.getcapacitor.PluginMethod
|
|
7
7
|
import com.getcapacitor.annotation.CapacitorPlugin
|
|
8
8
|
import com.kakao.sdk.auth.model.OAuthToken
|
|
9
|
+
import com.kakao.sdk.common.KakaoSdk
|
|
9
10
|
import com.kakao.sdk.user.UserApiClient
|
|
10
11
|
|
|
11
12
|
// name 값은 TypeScript registerPlugin('KakaoLogin', ...) 과 반드시 일치해야 한다
|
|
12
13
|
@CapacitorPlugin(name = "KakaoLogin")
|
|
13
14
|
class KakaoLoginPlugin : Plugin() {
|
|
14
15
|
|
|
16
|
+
/**
|
|
17
|
+
* 플러그인 로드 시 KakaoSDK를 자동 초기화한다.
|
|
18
|
+
* capacitor.config.ts의 plugins.KakaoLogin.appKey 값을 읽는다.
|
|
19
|
+
* Application 서브클래스를 별도로 만들 필요가 없다.
|
|
20
|
+
*/
|
|
21
|
+
override fun load() {
|
|
22
|
+
val appKey = config.getString("appKey")
|
|
23
|
+
if (appKey.isNullOrBlank()) {
|
|
24
|
+
println("[KakaoLoginPlugin] ⚠️ appKey가 capacitor.config.ts에 설정되지 않았습니다.")
|
|
25
|
+
println("[KakaoLoginPlugin] plugins: { KakaoLogin: { appKey: 'YOUR_NATIVE_APP_KEY' } }")
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Application context 사용 — KakaoSdk.init은 앱 수명 동안 유지되어야 하므로
|
|
30
|
+
KakaoSdk.init(context, appKey)
|
|
31
|
+
}
|
|
32
|
+
|
|
15
33
|
@PluginMethod
|
|
16
34
|
fun login(call: PluginCall) {
|
|
17
|
-
// ApplicationContext 대신 Activity 사용 — startActivity() 호출이 내부적으로 필요하기 때문
|
|
18
35
|
val activity = activity ?: run {
|
|
19
36
|
call.reject("Activity를 사용할 수 없습니다")
|
|
20
37
|
return
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const APP_VERSION = '0.1.
|
|
1
|
+
export const APP_VERSION = '0.1.6';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import Foundation
|
|
2
2
|
import Capacitor
|
|
3
|
+
import KakaoSDKCommon
|
|
3
4
|
import KakaoSDKAuth
|
|
4
5
|
import KakaoSDKUser
|
|
5
6
|
|
|
6
|
-
/// Capacitor 플러그인 — 카카오 소셜 로그인
|
|
7
|
-
/// @objc(KakaoLoginPlugin)과 identifier는 Capacitor JS 브릿지 식별자로 변경 불가.
|
|
8
|
-
/// SPM 모듈명은 Chuseok22CapacitorKakaoLogin이나, 플러그인 등록명은 KakaoLoginPlugin을 유지한다.
|
|
9
7
|
@objc(KakaoLoginPlugin)
|
|
10
8
|
public class KakaoLoginPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
11
9
|
|
|
@@ -15,15 +13,32 @@ public class KakaoLoginPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
15
13
|
CAPPluginMethod(name: "login", returnType: CAPPluginReturnPromise)
|
|
16
14
|
]
|
|
17
15
|
|
|
16
|
+
public override func load() {
|
|
17
|
+
guard let appKey = getConfigValue("appKey") as? String, !appKey.isEmpty else {
|
|
18
|
+
print("[KakaoLoginPlugin] ⚠️ appKey가 capacitor.config.ts에 설정되지 않았습니다.")
|
|
19
|
+
print("[KakaoLoginPlugin] plugins: { KakaoLogin: { appKey: 'YOUR_NATIVE_APP_KEY' } }")
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
KakaoSDK.initSDK(appKey: appKey)
|
|
23
|
+
// handleOpenUrl 오버라이드로 URL 처리 — ApplicationDelegateProxy.add() 불필요
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Capacitor가 AppDelegate.application(_:open:options:)를 플러그인으로 라우팅
|
|
27
|
+
@objc public override func handleOpenUrl(_ url: URL, _ options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
|
|
28
|
+
guard AuthApi.isKakaoTalkLoginUrl(url) else { return false }
|
|
29
|
+
// AuthController.handleOpenUrl은 @MainActor — URL 콜백은 메인 스레드 보장
|
|
30
|
+
return MainActor.assumeIsolated {
|
|
31
|
+
AuthController.handleOpenUrl(url: url)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
18
35
|
@objc func login(_ call: CAPPluginCall) {
|
|
19
36
|
DispatchQueue.main.async {
|
|
20
37
|
if UserApi.isKakaoTalkLoginAvailable() {
|
|
21
|
-
// 카카오톡 앱 로그인
|
|
22
38
|
UserApi.shared.loginWithKakaoTalk { [weak self] oauthToken, error in
|
|
23
39
|
self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
|
|
24
40
|
}
|
|
25
41
|
} else {
|
|
26
|
-
// 카카오 계정 웹뷰 로그인 (카카오톡 미설치 환경)
|
|
27
42
|
UserApi.shared.loginWithKakaoAccount { [weak self] oauthToken, error in
|
|
28
43
|
self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
|
|
29
44
|
}
|
|
@@ -45,12 +60,10 @@ public class KakaoLoginPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
45
60
|
call.reject("카카오 사용자 정보 조회 실패", nil, error)
|
|
46
61
|
return
|
|
47
62
|
}
|
|
48
|
-
|
|
49
63
|
guard let userId = user?.id else {
|
|
50
64
|
call.reject("카카오 사용자 ID를 가져올 수 없습니다")
|
|
51
65
|
return
|
|
52
66
|
}
|
|
53
|
-
|
|
54
67
|
call.resolve(["socialId": String(userId)])
|
|
55
68
|
}
|
|
56
69
|
}
|
package/package.json
CHANGED