@chuseok22/capacitor-kakao-login 0.1.3 → 0.1.5

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/Package.swift CHANGED
@@ -1,13 +1,16 @@
1
1
  // swift-tools-version: 5.9
2
2
  import PackageDescription
3
3
 
4
+ // Capacitor CLI는 npm 패키지명(@chuseok22/capacitor-kakao-login)을 PascalCase로 변환해
5
+ // SPM product 이름을 자동 파생합니다: Chuseok22CapacitorKakaoLogin
6
+ // 이 package/product/target 이름은 Capacitor CLI 변환 규칙과 반드시 일치해야 합니다.
4
7
  let package = Package(
5
- name: "KakaoLoginPlugin",
8
+ name: "Chuseok22CapacitorKakaoLogin",
6
9
  platforms: [.iOS(.v13)],
7
10
  products: [
8
11
  .library(
9
- name: "KakaoLoginPlugin",
10
- targets: ["KakaoLoginPlugin"]
12
+ name: "Chuseok22CapacitorKakaoLogin",
13
+ targets: ["Chuseok22CapacitorKakaoLogin"]
11
14
  )
12
15
  ],
13
16
  dependencies: [
@@ -16,15 +19,15 @@ let package = Package(
16
19
  ],
17
20
  targets: [
18
21
  .target(
19
- name: "KakaoLoginPlugin",
22
+ name: "Chuseok22CapacitorKakaoLogin",
20
23
  dependencies: [
21
24
  .product(name: "Capacitor", package: "capacitor-swift-pm"),
22
25
  .product(name: "Cordova", package: "capacitor-swift-pm"),
23
26
  .product(name: "KakaoSDKAuth", package: "kakao-ios-sdk"),
24
27
  .product(name: "KakaoSDKUser", package: "kakao-ios-sdk"),
25
28
  ],
26
- // 루트 기준 상대 경로 — ios/ 디렉토리 내 소스 위치
27
- path: "ios/Sources/KakaoLoginPlugin"
29
+ // 루트 기준 상대 경로
30
+ path: "ios/Sources/Chuseok22CapacitorKakaoLogin"
28
31
  )
29
32
  ]
30
33
  )
package/README.md CHANGED
@@ -1,65 +1,122 @@
1
1
  # @chuseok22/capacitor-kakao-login
2
2
 
3
- Capacitor 앱에서 카카오 소셜 로그인을 `npm install` + `npx cap sync` 만으로 쉽게 사용할 수 있는 플러그인입니다. iOS와 Android 모두 지원합니다.
3
+ Capacitor 앱에서 카카오 소셜 로그인을 최소한의 설정으로 사용할 수 있는 플러그인입니다.
4
4
 
5
- ## 패키지가 필요한가
5
+ - iOS / Android 지원
6
+ - 카카오톡 앱 로그인 우선, 미설치 시 카카오 계정 웹뷰 로그인으로 자동 폴백
7
+ - Capacitor 6.x 이상
6
8
 
7
- `npx cap sync` 실행 시 Capacitor CLI는 `node_modules/` 내 npm 패키지만 플러그인으로 스캔합니다. 로컬 Swift 파일은 자동으로 `packageClassList`에 등록되지 않아 `UNIMPLEMENTED` 에러가 발생합니다. 이 패키지는 올바른 Capacitor 플러그인 구조를 갖추어 `npx cap sync`만으로 자동 등록되게 합니다.
9
+ ---
8
10
 
9
- ## 설치
11
+ ## 빠른 시작
12
+
13
+ **사용자가 해야 할 일은 총 4가지입니다.**
10
14
 
11
- ```bash
12
- npm install @chuseok22/capacitor-kakao-login
13
- npx cap sync
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
- ```typescript
19
- import { KakaoLogin } from '@chuseok22/capacitor-kakao-login';
24
+ ---
20
25
 
21
- try {
22
- const { socialId } = await KakaoLogin.login();
23
- console.log('카카오 사용자 ID:', socialId);
24
- } catch (error) {
25
- console.error('카카오 로그인 실패:', error);
26
- }
27
- ```
26
+ ## 목차
28
27
 
29
- ## iOS 설정
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
- ### 1. KakaoSDK 초기화 (`AppDelegate.swift`)
39
+ ---
32
40
 
33
- ```swift
34
- import KakaoSDKCommon
41
+ ## 1. 사전 요구사항
35
42
 
36
- func application(_ application: UIApplication,
37
- didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
38
- KakaoSDK.initSDK(appKey: "YOUR_NATIVE_APP_KEY")
39
- return true
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
- ### 2. URL 핸들러 등록 (`AppDelegate.swift`)
86
+ ---
44
87
 
45
- ```swift
46
- import KakaoSDKAuth
88
+ ## 4. 앱 키 설정 (공통)
47
89
 
48
- func application(_ app: UIApplication, open url: URL,
49
- options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
50
- if AuthApi.isKakaoTalkLoginUrl(url) {
51
- return AuthController.handleOpenUrl(url: url)
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
- return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
54
- }
104
+ }
105
+ };
106
+
107
+ export default config;
55
108
  ```
56
109
 
57
- ### 3. `Info.plist` 설정
110
+ ---
111
+
112
+ ## 5. iOS 설정
113
+
114
+ **AppDelegate 수정 없이 Info.plist만 설정하면 됩니다.**
58
115
 
59
- 카카오톡 연동 및 URL 스킴을 등록합니다.
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
- <!-- URL 스킴 등록 (kakao + 네이티브 키) -->
127
+ <!-- OAuth 콜백 수신을 위한 커스텀 URL 스킴 등록 -->
71
128
  <key>CFBundleURLTypes</key>
72
129
  <array>
73
130
  <dict>
74
131
  <key>CFBundleURLSchemes</key>
75
132
  <array>
76
- <string>kakao{NATIVE_APP_KEY}</string>
133
+ <string>kakaoYOUR_NATIVE_APP_KEY</string>
77
134
  </array>
78
135
  </dict>
79
136
  </array>
80
137
  ```
81
138
 
82
- `{NATIVE_APP_KEY}`를 [카카오 개발자 콘솔](https://developers.kakao.com)의 네이티브 앱 키로 교체하세요.
139
+ `YOUR_NATIVE_APP_KEY`를 실제 네이티브 앱 키로 교체하세요.
140
+ 예: 앱 키가 `abc1234567` 이면 → `kakaoabc1234567`
83
141
 
84
- ## Android 설정
142
+ > **왜 Info.plist는 직접 수정해야 하나요?**
143
+ > iOS는 외부 패키지가 호스트 앱의 Info.plist를 수정할 수 없습니다. 이 2가지 항목은 OS 제약상 불가피하게 수동 설정이 필요합니다.
85
144
 
86
- ### 0. Kotlin Gradle 플러그인 classpath 추가
145
+ ---
87
146
 
88
- `android/build.gradle`의 `buildscript` 블록에 Kotlin 플러그인 classpath를 추가합니다.
147
+ ## 6. Android 설정
148
+
149
+ **Application 클래스 생성, AndroidManifest 수정 없이 build.gradle 1줄만 추가하면 됩니다.**
150
+
151
+ `android/app/build.gradle`의 `defaultConfig` 블록에 아래 한 줄을 추가합니다.
89
152
 
90
153
  ```groovy
91
- buildscript {
92
- repositories {
93
- google()
94
- mavenCentral()
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
- > 이 단계가 없으면 `cap add android` 또는 `cap sync` 후 Gradle sync 오류가 발생합니다.
163
+ `YOUR_NATIVE_APP_KEY`를 실제 네이티브 키로 교체하세요.
103
164
 
104
- ### 1. KakaoSDK 초기화 (`Application` 클래스)
165
+ > **이것만으로 충분한 이유:**
166
+ > - `AuthCodeHandlerActivity`는 플러그인 AndroidManifest에 선언되어 Gradle이 자동으로 호스트 앱 Manifest에 병합합니다.
167
+ > - `KakaoSdk.init()`는 플러그인 `load()` 시 자동으로 호출됩니다.
105
168
 
106
- `Application` 서브클래스를 생성하고 KakaoSDK를 초기화합니다.
169
+ ### Kotlin Gradle 플러그인 (필요한 경우)
107
170
 
108
- ```kotlin
109
- import com.kakao.sdk.common.KakaoSdk
171
+ Gradle sync 오류가 발생하면 `android/build.gradle`의 `buildscript.dependencies`에 아래를 추가하세요.
110
172
 
111
- class MyApplication : Application() {
112
- override fun onCreate() {
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
- `AndroidManifest.xml`에 Application 클래스를 등록합니다:
120
-
121
- ```xml
122
- <application
123
- android:name=".MyApplication"
124
- ...>
125
- ```
177
+ ---
126
178
 
127
- ### 2. `AndroidManifest.xml` — 카카오 로그인 Activity 등록
179
+ ## 7. 사용법
128
180
 
129
- 카카오 계정 웹뷰 로그인 후 앱으로 돌아오기 위한 Activity를 등록합니다.
181
+ ```typescript
182
+ import { KakaoLogin } from '@chuseok22/capacitor-kakao-login';
130
183
 
131
- ```xml
132
- <activity
133
- android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
134
- android:exported="true">
135
- <intent-filter>
136
- <action android:name="android.intent.action.VIEW" />
137
- <category android:name="android.intent.category.DEFAULT" />
138
- <category android:name="android.intent.category.BROWSABLE" />
139
- <data
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
- `{NATIVE_APP_KEY}`를 [카카오 개발자 콘솔](https://developers.kakao.com)의 네이티브 앱 키로 교체하세요.
195
+ ---
147
196
 
148
- ## API
197
+ ## 8. API
149
198
 
150
- ### `login() → Promise<KakaoLoginResult>`
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.3';
1
+ export const APP_VERSION = '0.1.5';
2
2
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,90 @@
1
+ import Foundation
2
+ import Capacitor
3
+ import KakaoSDKCommon
4
+ import KakaoSDKAuth
5
+ import KakaoSDKUser
6
+
7
+ /// Capacitor 플러그인 — 카카오 소셜 로그인
8
+ ///
9
+ /// capacitor.config.ts에 appKey를 설정하면 load() 시점에 KakaoSDK를 자동 초기화하고,
10
+ /// ApplicationDelegateProxy에 등록해 URL 처리도 자동으로 수행한다.
11
+ /// AppDelegate를 수정할 필요가 없다.
12
+ @objc(KakaoLoginPlugin)
13
+ public class KakaoLoginPlugin: CAPPlugin, CAPBridgedPlugin {
14
+
15
+ public let identifier = "KakaoLoginPlugin"
16
+ public let jsName = "KakaoLogin"
17
+ public let pluginMethods: [CAPPluginMethod] = [
18
+ CAPPluginMethod(name: "login", returnType: CAPPluginReturnPromise)
19
+ ]
20
+
21
+ /// 플러그인 로드 시 KakaoSDK를 자동 초기화한다.
22
+ /// capacitor.config.ts의 plugins.KakaoLogin.appKey 값을 읽는다.
23
+ public override func load() {
24
+ guard let appKey = getConfigValue("appKey") as? String, !appKey.isEmpty else {
25
+ print("[KakaoLoginPlugin] ⚠️ appKey가 capacitor.config.ts에 설정되지 않았습니다.")
26
+ print("[KakaoLoginPlugin] plugins: { KakaoLogin: { appKey: 'YOUR_NATIVE_APP_KEY' } }")
27
+ return
28
+ }
29
+
30
+ KakaoSDK.initSDK(appKey: appKey)
31
+
32
+ // Capacitor AppDelegate는 이미 ApplicationDelegateProxy.shared를 통해 URL을 라우팅한다.
33
+ // 여기에 self를 등록해두면 AppDelegate 수정 없이 URL 콜백을 처리할 수 있다.
34
+ ApplicationDelegateProxy.shared.add(self)
35
+ }
36
+
37
+ /// ApplicationDelegateProxy가 호출하는 URL 핸들러.
38
+ /// 카카오톡 앱 로그인 후 앱으로 돌아오는 URL을 처리한다.
39
+ @objc public func application(
40
+ _ app: UIApplication,
41
+ open url: URL,
42
+ options: [UIApplication.OpenURLOptionsKey: Any]
43
+ ) -> Bool {
44
+ if AuthApi.isKakaoTalkLoginUrl(url) {
45
+ return AuthController.handleOpenUrl(url: url)
46
+ }
47
+ return false
48
+ }
49
+
50
+ @objc func login(_ call: CAPPluginCall) {
51
+ DispatchQueue.main.async {
52
+ if UserApi.isKakaoTalkLoginAvailable() {
53
+ // 카카오톡 앱 로그인
54
+ UserApi.shared.loginWithKakaoTalk { [weak self] oauthToken, error in
55
+ self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
56
+ }
57
+ } else {
58
+ // 카카오 계정 웹뷰 로그인 (카카오톡 미설치 환경)
59
+ UserApi.shared.loginWithKakaoAccount { [weak self] oauthToken, error in
60
+ self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ private func handleLoginResult(call: CAPPluginCall, oauthToken _: OAuthToken?, error: Error?) {
67
+ if let error = error {
68
+ DispatchQueue.main.async {
69
+ call.reject("카카오 로그인 실패", nil, error)
70
+ }
71
+ return
72
+ }
73
+
74
+ UserApi.shared.me { user, error in
75
+ DispatchQueue.main.async {
76
+ if let error = error {
77
+ call.reject("카카오 사용자 정보 조회 실패", nil, error)
78
+ return
79
+ }
80
+
81
+ guard let userId = user?.id else {
82
+ call.reject("카카오 사용자 ID를 가져올 수 없습니다")
83
+ return
84
+ }
85
+
86
+ call.resolve(["socialId": String(userId)])
87
+ }
88
+ }
89
+ }
90
+ }
@@ -1,57 +1,3 @@
1
- import Foundation
2
- import Capacitor
3
- import KakaoSDKAuth
4
- import KakaoSDKUser
5
-
6
- /// Capacitor 플러그인 — 카카오 소셜 로그인
7
- /// npx cap sync 시 @objc(KakaoLoginPlugin) 패턴으로 자동 탐색된다.
8
- @objc(KakaoLoginPlugin)
9
- public class KakaoLoginPlugin: CAPPlugin, CAPBridgedPlugin {
10
-
11
- public let identifier = "KakaoLoginPlugin"
12
- public let jsName = "KakaoLogin"
13
- public let pluginMethods: [CAPPluginMethod] = [
14
- CAPPluginMethod(name: "login", returnType: CAPPluginReturnPromise)
15
- ]
16
-
17
- @objc func login(_ call: CAPPluginCall) {
18
- DispatchQueue.main.async {
19
- if UserApi.isKakaoTalkLoginAvailable() {
20
- // 카카오톡 앱 로그인
21
- UserApi.shared.loginWithKakaoTalk { [weak self] oauthToken, error in
22
- self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
23
- }
24
- } else {
25
- // 카카오 계정 웹뷰 로그인 (카카오톡 미설치 환경)
26
- UserApi.shared.loginWithKakaoAccount { [weak self] oauthToken, error in
27
- self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
28
- }
29
- }
30
- }
31
- }
32
-
33
- private func handleLoginResult(call: CAPPluginCall, oauthToken _: OAuthToken?, error: Error?) {
34
- if let error = error {
35
- DispatchQueue.main.async {
36
- call.reject("카카오 로그인 실패", nil, error)
37
- }
38
- return
39
- }
40
-
41
- UserApi.shared.me { user, error in
42
- DispatchQueue.main.async {
43
- if let error = error {
44
- call.reject("카카오 사용자 정보 조회 실패", nil, error)
45
- return
46
- }
47
-
48
- guard let userId = user?.id else {
49
- call.reject("카카오 사용자 ID를 가져올 수 없습니다")
50
- return
51
- }
52
-
53
- call.resolve(["socialId": String(userId)])
54
- }
55
- }
56
- }
57
- }
1
+ // 이 파일은 더 이상 사용되지 않습니다.
2
+ // 소스는 ios/Sources/Chuseok22CapacitorKakaoLogin/KakaoLoginPlugin.swift 로 이동되었습니다.
3
+ // This file is intentionally left empty to prevent duplicate symbol compilation errors.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chuseok22/capacitor-kakao-login",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Capacitor plugin for Kakao social login (iOS & Android)",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/plugin.esm.mjs",