@chuseok22/capacitor-kakao-login 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +33 -0
- package/README.md +18 -0
- package/dist/esm/constants/version.js +1 -1
- package/ios/Package.swift +3 -29
- package/ios/Sources/Chuseok22CapacitorKakaoLogin/KakaoLoginPlugin.swift +58 -0
- package/ios/Sources/KakaoLoginPlugin/KakaoLoginPlugin.swift +3 -57
- package/package.json +2 -1
package/Package.swift
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// swift-tools-version: 5.9
|
|
2
|
+
import PackageDescription
|
|
3
|
+
|
|
4
|
+
// Capacitor CLI는 npm 패키지명(@chuseok22/capacitor-kakao-login)을 PascalCase로 변환해
|
|
5
|
+
// SPM product 이름을 자동 파생합니다: Chuseok22CapacitorKakaoLogin
|
|
6
|
+
// 이 package/product/target 이름은 Capacitor CLI 변환 규칙과 반드시 일치해야 합니다.
|
|
7
|
+
let package = Package(
|
|
8
|
+
name: "Chuseok22CapacitorKakaoLogin",
|
|
9
|
+
platforms: [.iOS(.v13)],
|
|
10
|
+
products: [
|
|
11
|
+
.library(
|
|
12
|
+
name: "Chuseok22CapacitorKakaoLogin",
|
|
13
|
+
targets: ["Chuseok22CapacitorKakaoLogin"]
|
|
14
|
+
)
|
|
15
|
+
],
|
|
16
|
+
dependencies: [
|
|
17
|
+
.package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", from: "8.0.0"),
|
|
18
|
+
.package(url: "https://github.com/kakao/kakao-ios-sdk", from: "2.23.0"),
|
|
19
|
+
],
|
|
20
|
+
targets: [
|
|
21
|
+
.target(
|
|
22
|
+
name: "Chuseok22CapacitorKakaoLogin",
|
|
23
|
+
dependencies: [
|
|
24
|
+
.product(name: "Capacitor", package: "capacitor-swift-pm"),
|
|
25
|
+
.product(name: "Cordova", package: "capacitor-swift-pm"),
|
|
26
|
+
.product(name: "KakaoSDKAuth", package: "kakao-ios-sdk"),
|
|
27
|
+
.product(name: "KakaoSDKUser", package: "kakao-ios-sdk"),
|
|
28
|
+
],
|
|
29
|
+
// 루트 기준 상대 경로
|
|
30
|
+
path: "ios/Sources/Chuseok22CapacitorKakaoLogin"
|
|
31
|
+
)
|
|
32
|
+
]
|
|
33
|
+
)
|
package/README.md
CHANGED
|
@@ -83,6 +83,24 @@ func application(_ app: UIApplication, open url: URL,
|
|
|
83
83
|
|
|
84
84
|
## Android 설정
|
|
85
85
|
|
|
86
|
+
### 0. Kotlin Gradle 플러그인 classpath 추가
|
|
87
|
+
|
|
88
|
+
`android/build.gradle`의 `buildscript` 블록에 Kotlin 플러그인 classpath를 추가합니다.
|
|
89
|
+
|
|
90
|
+
```groovy
|
|
91
|
+
buildscript {
|
|
92
|
+
repositories {
|
|
93
|
+
google()
|
|
94
|
+
mavenCentral()
|
|
95
|
+
}
|
|
96
|
+
dependencies {
|
|
97
|
+
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.21'
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
> 이 단계가 없으면 `cap add android` 또는 `cap sync` 후 Gradle sync 오류가 발생합니다.
|
|
103
|
+
|
|
86
104
|
### 1. KakaoSDK 초기화 (`Application` 클래스)
|
|
87
105
|
|
|
88
106
|
`Application` 서브클래스를 생성하고 KakaoSDK를 초기화합니다.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const APP_VERSION = '0.1.
|
|
1
|
+
export const APP_VERSION = '0.1.4';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/ios/Package.swift
CHANGED
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
let package = Package(
|
|
5
|
-
name: "KakaoLoginPlugin",
|
|
6
|
-
platforms: [.iOS(.v13)],
|
|
7
|
-
products: [
|
|
8
|
-
.library(
|
|
9
|
-
name: "KakaoLoginPlugin",
|
|
10
|
-
targets: ["KakaoLoginPlugin"]
|
|
11
|
-
)
|
|
12
|
-
],
|
|
13
|
-
dependencies: [
|
|
14
|
-
.package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", from: "6.0.0"),
|
|
15
|
-
.package(url: "https://github.com/kakao/kakao-ios-sdk", from: "2.23.0"),
|
|
16
|
-
],
|
|
17
|
-
targets: [
|
|
18
|
-
.target(
|
|
19
|
-
name: "KakaoLoginPlugin",
|
|
20
|
-
dependencies: [
|
|
21
|
-
.product(name: "Capacitor", package: "capacitor-swift-pm"),
|
|
22
|
-
.product(name: "Cordova", package: "capacitor-swift-pm"),
|
|
23
|
-
.product(name: "KakaoSDKAuth", package: "kakao-ios-sdk"),
|
|
24
|
-
.product(name: "KakaoSDKUser", package: "kakao-ios-sdk"),
|
|
25
|
-
],
|
|
26
|
-
path: "Sources/KakaoLoginPlugin"
|
|
27
|
-
)
|
|
28
|
-
]
|
|
29
|
-
)
|
|
1
|
+
// 이 파일은 더 이상 사용되지 않습니다.
|
|
2
|
+
// SPM 패키지 매니페스트는 프로젝트 루트의 Package.swift를 사용합니다.
|
|
3
|
+
// This file is intentionally left empty. See Package.swift at the project root.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import Capacitor
|
|
3
|
+
import KakaoSDKAuth
|
|
4
|
+
import KakaoSDKUser
|
|
5
|
+
|
|
6
|
+
/// Capacitor 플러그인 — 카카오 소셜 로그인
|
|
7
|
+
/// @objc(KakaoLoginPlugin)과 identifier는 Capacitor JS 브릿지 식별자로 변경 불가.
|
|
8
|
+
/// SPM 모듈명은 Chuseok22CapacitorKakaoLogin이나, 플러그인 등록명은 KakaoLoginPlugin을 유지한다.
|
|
9
|
+
@objc(KakaoLoginPlugin)
|
|
10
|
+
public class KakaoLoginPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
11
|
+
|
|
12
|
+
public let identifier = "KakaoLoginPlugin"
|
|
13
|
+
public let jsName = "KakaoLogin"
|
|
14
|
+
public let pluginMethods: [CAPPluginMethod] = [
|
|
15
|
+
CAPPluginMethod(name: "login", returnType: CAPPluginReturnPromise)
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
@objc func login(_ call: CAPPluginCall) {
|
|
19
|
+
DispatchQueue.main.async {
|
|
20
|
+
if UserApi.isKakaoTalkLoginAvailable() {
|
|
21
|
+
// 카카오톡 앱 로그인
|
|
22
|
+
UserApi.shared.loginWithKakaoTalk { [weak self] oauthToken, error in
|
|
23
|
+
self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
// 카카오 계정 웹뷰 로그인 (카카오톡 미설치 환경)
|
|
27
|
+
UserApi.shared.loginWithKakaoAccount { [weak self] oauthToken, error in
|
|
28
|
+
self?.handleLoginResult(call: call, oauthToken: oauthToken, error: error)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private func handleLoginResult(call: CAPPluginCall, oauthToken _: OAuthToken?, error: Error?) {
|
|
35
|
+
if let error = error {
|
|
36
|
+
DispatchQueue.main.async {
|
|
37
|
+
call.reject("카카오 로그인 실패", nil, error)
|
|
38
|
+
}
|
|
39
|
+
return
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
UserApi.shared.me { user, error in
|
|
43
|
+
DispatchQueue.main.async {
|
|
44
|
+
if let error = error {
|
|
45
|
+
call.reject("카카오 사용자 정보 조회 실패", nil, error)
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
guard let userId = user?.id else {
|
|
50
|
+
call.reject("카카오 사용자 ID를 가져올 수 없습니다")
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
call.resolve(["socialId": String(userId)])
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -1,57 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
+
"version": "0.1.4",
|
|
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",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"dist/",
|
|
18
18
|
"ios/",
|
|
19
19
|
"android/",
|
|
20
|
+
"Package.swift",
|
|
20
21
|
"CapacitorKakaoLogin.podspec"
|
|
21
22
|
],
|
|
22
23
|
"author": "Baek Jihoon",
|