구글 로그인 기능 추가
This commit is contained in:
4
Podfile
4
Podfile
@@ -8,6 +8,8 @@ target 'SodaLive' do
|
|||||||
# Pods for SodaLive
|
# Pods for SodaLive
|
||||||
pod 'BootpayUI', '4.4.10'
|
pod 'BootpayUI', '4.4.10'
|
||||||
pod 'AgoraRtm', '2.2.4'
|
pod 'AgoraRtm', '2.2.4'
|
||||||
|
pod 'GoogleSignIn'
|
||||||
|
pod 'GoogleSignInSwiftSupport'
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -18,6 +20,8 @@ target 'SodaLive-dev' do
|
|||||||
# Pods for SodaLive-dev
|
# Pods for SodaLive-dev
|
||||||
pod 'BootpayUI', '4.4.10'
|
pod 'BootpayUI', '4.4.10'
|
||||||
pod 'AgoraRtm', '2.2.4'
|
pod 'AgoraRtm', '2.2.4'
|
||||||
|
pod 'GoogleSignIn'
|
||||||
|
pod 'GoogleSignInSwiftSupport'
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
51
Podfile.lock
51
Podfile.lock
@@ -5,6 +5,16 @@ PODS:
|
|||||||
- AgoraRtm/RtmBasic (2.2.4)
|
- AgoraRtm/RtmBasic (2.2.4)
|
||||||
- AgoraRtm/RtmKit (2.2.4)
|
- AgoraRtm/RtmKit (2.2.4)
|
||||||
- Alamofire (5.10.2)
|
- Alamofire (5.10.2)
|
||||||
|
- AppAuth (2.0.0):
|
||||||
|
- AppAuth/Core (= 2.0.0)
|
||||||
|
- AppAuth/ExternalUserAgent (= 2.0.0)
|
||||||
|
- AppAuth/Core (2.0.0)
|
||||||
|
- AppAuth/ExternalUserAgent (2.0.0):
|
||||||
|
- AppAuth/Core
|
||||||
|
- AppCheckCore (11.2.0):
|
||||||
|
- GoogleUtilities/Environment (~> 8.0)
|
||||||
|
- GoogleUtilities/UserDefaults (~> 8.0)
|
||||||
|
- PromisesObjC (~> 2.4)
|
||||||
- Bootpay (4.4.6):
|
- Bootpay (4.4.6):
|
||||||
- CryptoSwift
|
- CryptoSwift
|
||||||
- NVActivityIndicatorView
|
- NVActivityIndicatorView
|
||||||
@@ -17,40 +27,79 @@ PODS:
|
|||||||
- SnapKit
|
- SnapKit
|
||||||
- SwiftyJSON
|
- SwiftyJSON
|
||||||
- CryptoSwift (1.8.4)
|
- CryptoSwift (1.8.4)
|
||||||
|
- GoogleSignIn (9.1.0):
|
||||||
|
- AppAuth (~> 2.0)
|
||||||
|
- AppCheckCore (~> 11.0)
|
||||||
|
- GTMAppAuth (~> 5.0)
|
||||||
|
- GTMSessionFetcher/Core (~> 3.3)
|
||||||
|
- GoogleSignInSwiftSupport (9.1.0):
|
||||||
|
- GoogleSignIn (~> 9.0)
|
||||||
|
- GoogleUtilities/Environment (8.1.0):
|
||||||
|
- GoogleUtilities/Privacy
|
||||||
|
- GoogleUtilities/Logger (8.1.0):
|
||||||
|
- GoogleUtilities/Environment
|
||||||
|
- GoogleUtilities/Privacy
|
||||||
|
- GoogleUtilities/Privacy (8.1.0)
|
||||||
|
- GoogleUtilities/UserDefaults (8.1.0):
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- GoogleUtilities/Privacy
|
||||||
|
- GTMAppAuth (5.0.0):
|
||||||
|
- AppAuth/Core (~> 2.0)
|
||||||
|
- GTMSessionFetcher/Core (< 4.0, >= 3.3)
|
||||||
|
- GTMSessionFetcher/Core (3.5.0)
|
||||||
- NVActivityIndicatorView (5.2.0):
|
- NVActivityIndicatorView (5.2.0):
|
||||||
- NVActivityIndicatorView/Base (= 5.2.0)
|
- NVActivityIndicatorView/Base (= 5.2.0)
|
||||||
- NVActivityIndicatorView/Base (5.2.0)
|
- NVActivityIndicatorView/Base (5.2.0)
|
||||||
- ObjectMapper (4.4.2)
|
- ObjectMapper (4.4.2)
|
||||||
|
- PromisesObjC (2.4.0)
|
||||||
- SnapKit (5.7.1)
|
- SnapKit (5.7.1)
|
||||||
- SwiftyJSON (5.0.2)
|
- SwiftyJSON (5.0.2)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- AgoraRtm (= 2.2.4)
|
- AgoraRtm (= 2.2.4)
|
||||||
- BootpayUI (= 4.4.10)
|
- BootpayUI (= 4.4.10)
|
||||||
|
- GoogleSignIn
|
||||||
|
- GoogleSignInSwiftSupport
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
- AgoraRtm
|
- AgoraRtm
|
||||||
- Alamofire
|
- Alamofire
|
||||||
|
- AppAuth
|
||||||
|
- AppCheckCore
|
||||||
- Bootpay
|
- Bootpay
|
||||||
- BootpayUI
|
- BootpayUI
|
||||||
- CryptoSwift
|
- CryptoSwift
|
||||||
|
- GoogleSignIn
|
||||||
|
- GoogleSignInSwiftSupport
|
||||||
|
- GoogleUtilities
|
||||||
|
- GTMAppAuth
|
||||||
|
- GTMSessionFetcher
|
||||||
- NVActivityIndicatorView
|
- NVActivityIndicatorView
|
||||||
- ObjectMapper
|
- ObjectMapper
|
||||||
|
- PromisesObjC
|
||||||
- SnapKit
|
- SnapKit
|
||||||
- SwiftyJSON
|
- SwiftyJSON
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
AgoraRtm: 534144434383d41b3b0ebfae2a961ef0f51b0645
|
AgoraRtm: 534144434383d41b3b0ebfae2a961ef0f51b0645
|
||||||
Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496
|
Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496
|
||||||
|
AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063
|
||||||
|
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
|
||||||
Bootpay: cd7f0542b096ab0af0b09a6e12a6b87f2cbbb531
|
Bootpay: cd7f0542b096ab0af0b09a6e12a6b87f2cbbb531
|
||||||
BootpayUI: beec5b0bba002b4dbced8c0ecace571ed6a017bc
|
BootpayUI: beec5b0bba002b4dbced8c0ecace571ed6a017bc
|
||||||
CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
|
CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
|
||||||
|
GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d
|
||||||
|
GoogleSignInSwiftSupport: aca902e4e15b234611ecac74ef5c8f61278f774e
|
||||||
|
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
|
||||||
|
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
|
||||||
|
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
|
||||||
NVActivityIndicatorView: fe52a6a68664c2df8991d7d9e3d86d8d19453c53
|
NVActivityIndicatorView: fe52a6a68664c2df8991d7d9e3d86d8d19453c53
|
||||||
ObjectMapper: e6e4d91ff7f2861df7aecc536c92d8363f4c9677
|
ObjectMapper: e6e4d91ff7f2861df7aecc536c92d8363f4c9677
|
||||||
|
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||||
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
|
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
|
||||||
SwiftyJSON: f5b1bf1cd8dd53cd25887ac0eabcfd92301c6a5a
|
SwiftyJSON: f5b1bf1cd8dd53cd25887ac0eabcfd92301c6a5a
|
||||||
|
|
||||||
PODFILE CHECKSUM: 197d8c8b434dbcc335438281fc68e94718f6a8e1
|
PODFILE CHECKSUM: 70c5639090824ff26cfad959985347579609e1e6
|
||||||
|
|
||||||
COCOAPODS: 1.16.2
|
COCOAPODS: 1.16.2
|
||||||
|
|||||||
@@ -2,12 +2,15 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>GIDClientID</key>
|
||||||
|
<string>758414412471-3cf403jb4s405eu17qrfrcbs9ofhq369.apps.googleusercontent.com</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
<array>
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleURLSchemes</key>
|
<key>CFBundleURLSchemes</key>
|
||||||
<array>
|
<array>
|
||||||
<string>fb608674328645232</string>
|
<string>fb608674328645232</string>
|
||||||
|
<string>com.googleusercontent.apps.758414412471-3cf403jb4s405eu17qrfrcbs9ofhq369</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
|
|||||||
@@ -2,12 +2,15 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>GIDClientID</key>
|
||||||
|
<string>983594297130-m6bv7lvc1lsetsvv3rk92etqc98uopqj.apps.googleusercontent.com</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
<array>
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleURLSchemes</key>
|
<key>CFBundleURLSchemes</key>
|
||||||
<array>
|
<array>
|
||||||
<string>fb612448298237287</string>
|
<string>fb612448298237287</string>
|
||||||
|
<string>com.googleusercontent.apps.983594297130-m6bv7lvc1lsetsvv3rk92etqc98uopqj</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import Kingfisher
|
|||||||
|
|
||||||
import FBSDKCoreKit
|
import FBSDKCoreKit
|
||||||
import AppsFlyerLib
|
import AppsFlyerLib
|
||||||
|
import GoogleSignIn
|
||||||
|
|
||||||
@main
|
@main
|
||||||
struct SodaLiveApp: App {
|
struct SodaLiveApp: App {
|
||||||
@@ -76,6 +77,7 @@ struct SodaLiveApp: App {
|
|||||||
} else {
|
} else {
|
||||||
ApplicationDelegate.shared.application(UIApplication.shared, open: url, options: [:])
|
ApplicationDelegate.shared.application(UIApplication.shared, open: url, options: [:])
|
||||||
AppsFlyerLib.shared().handleOpen(url)
|
AppsFlyerLib.shared().handleOpen(url)
|
||||||
|
GIDSignIn.sharedInstance.handle(url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,3 +22,6 @@ let NOTIFLY_PASSWORD = "c6c585db0aaa4189be44d0467c7d66b6@A"
|
|||||||
|
|
||||||
let APPSCHEME = "voiceon-test"
|
let APPSCHEME = "voiceon-test"
|
||||||
let PAYVERSE_HTML_RESOURCE = "payverse_starter_debug"
|
let PAYVERSE_HTML_RESOURCE = "payverse_starter_debug"
|
||||||
|
|
||||||
|
let GID_CLIENT_ID = "758414412471-3cf403jb4s405eu17qrfrcbs9ofhq369.apps.googleusercontent.com"
|
||||||
|
let GID_SERVER_CLIENT_ID = "758414412471-mosodbj2chno7l1j0iihldh6edmk0gk9.apps.googleusercontent.com"
|
||||||
|
|||||||
@@ -1101,6 +1101,42 @@ enum I18n {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum Login {
|
||||||
|
enum Google {
|
||||||
|
static var openFailed: String {
|
||||||
|
pick(
|
||||||
|
ko: "구글 로그인 화면을 열 수 없습니다.\n다시 시도해 주세요.",
|
||||||
|
en: "Unable to open Google sign-in.\nPlease try again.",
|
||||||
|
ja: "Googleログイン画面を開けません。\nもう一度お試しください。"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
static var configMissing: String {
|
||||||
|
pick(
|
||||||
|
ko: "구글 로그인 설정을 확인할 수 없습니다.\n다시 시도해 주세요.",
|
||||||
|
en: "Unable to find Google sign-in settings.\nPlease try again.",
|
||||||
|
ja: "Googleログイン設定を確認できません。\nもう一度お試しください。"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
static var signInFailed: String {
|
||||||
|
pick(
|
||||||
|
ko: "구글 로그인에 실패했습니다.\n다시 시도해 주세요.",
|
||||||
|
en: "Google sign-in failed.\nPlease try again.",
|
||||||
|
ja: "Googleログインに失敗しました。\nもう一度お試しください。"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
static var tokenMissing: String {
|
||||||
|
pick(
|
||||||
|
ko: "구글 인증 토큰을 가져오지 못했습니다.",
|
||||||
|
en: "Failed to retrieve Google token.",
|
||||||
|
ja: "Google認証トークンを取得できませんでした。"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 문자 메시지(Text Message) 관련 문자열
|
// 문자 메시지(Text Message) 관련 문자열
|
||||||
enum TextMessage {
|
enum TextMessage {
|
||||||
// 전송 버튼 라벨
|
// 전송 버튼 라벨
|
||||||
|
|||||||
@@ -132,7 +132,12 @@ struct LoginView: View {
|
|||||||
Image("ic_login_kakao")
|
Image("ic_login_kakao")
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
hideKeyboard()
|
hideKeyboard()
|
||||||
AppState.shared.setAppStep(step: .signUp)
|
}
|
||||||
|
|
||||||
|
Image("ic_login_google")
|
||||||
|
.onTapGesture {
|
||||||
|
hideKeyboard()
|
||||||
|
viewModel.loginWithGoogle()
|
||||||
}
|
}
|
||||||
|
|
||||||
Image("ic_login_apple")
|
Image("ic_login_apple")
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import AuthenticationServices
|
|||||||
import CryptoKit
|
import CryptoKit
|
||||||
import Security
|
import Security
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import GoogleSignIn
|
||||||
|
|
||||||
final class LoginViewModel: NSObject, ObservableObject {
|
final class LoginViewModel: NSObject, ObservableObject {
|
||||||
private let appViewModel = AppViewModel()
|
private let appViewModel = AppViewModel()
|
||||||
@@ -69,6 +70,35 @@ final class LoginViewModel: NSObject, ObservableObject {
|
|||||||
controller.performRequests()
|
controller.performRequests()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loginWithGoogle() {
|
||||||
|
guard let presentingViewController = presentingViewController() else {
|
||||||
|
self.errorMessage = I18n.Login.Google.openFailed
|
||||||
|
self.isShowPopup = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
GIDSignIn.sharedInstance.configuration = GIDConfiguration(clientID: GID_CLIENT_ID, serverClientID: GID_SERVER_CLIENT_ID)
|
||||||
|
|
||||||
|
GIDSignIn.sharedInstance.signIn(withPresenting: presentingViewController) { result, error in
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
if let error = error {
|
||||||
|
ERROR_LOG(error.localizedDescription)
|
||||||
|
self.errorMessage = I18n.Login.Google.signInFailed
|
||||||
|
self.isShowPopup = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let idToken = result?.user.idToken?.tokenString else {
|
||||||
|
self.errorMessage = I18n.Login.Google.tokenMissing
|
||||||
|
self.isShowPopup = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
self.loginWithGoogle(idToken: idToken)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func loginWithApple(identityToken: String, nonce: String) {
|
private func loginWithApple(identityToken: String, nonce: String) {
|
||||||
let pushToken = UserDefaults.string(forKey: .pushToken)
|
let pushToken = UserDefaults.string(forKey: .pushToken)
|
||||||
let marketingPid = UserDefaults.string(forKey: .marketingPid)
|
let marketingPid = UserDefaults.string(forKey: .marketingPid)
|
||||||
@@ -96,6 +126,41 @@ final class LoginViewModel: NSObject, ObservableObject {
|
|||||||
.store(in: &subscription)
|
.store(in: &subscription)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func loginWithGoogle(idToken: String) {
|
||||||
|
let pushToken = UserDefaults.string(forKey: .pushToken)
|
||||||
|
let marketingPid = UserDefaults.string(forKey: .marketingPid)
|
||||||
|
let request = SocialLoginRequest(
|
||||||
|
container: "ios",
|
||||||
|
pushToken: pushToken.isEmpty ? nil : pushToken,
|
||||||
|
marketingPid: marketingPid.isEmpty ? nil : marketingPid,
|
||||||
|
identityToken: nil,
|
||||||
|
nonce: nil
|
||||||
|
)
|
||||||
|
|
||||||
|
isLoading = true
|
||||||
|
repository.loginGoogle(request: request, idToken: idToken)
|
||||||
|
.sink { result in
|
||||||
|
switch result {
|
||||||
|
case .finished:
|
||||||
|
DEBUG_LOG("finish")
|
||||||
|
case .failure(let error):
|
||||||
|
self.isLoading = false
|
||||||
|
ERROR_LOG(error.localizedDescription)
|
||||||
|
}
|
||||||
|
} receiveValue: { response in
|
||||||
|
self.handleLoginResponse(response)
|
||||||
|
}
|
||||||
|
.store(in: &subscription)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func presentingViewController() -> UIViewController? {
|
||||||
|
return UIApplication.shared.connectedScenes
|
||||||
|
.compactMap { $0 as? UIWindowScene }
|
||||||
|
.flatMap { $0.windows }
|
||||||
|
.first { $0.isKeyWindow }?
|
||||||
|
.rootViewController
|
||||||
|
}
|
||||||
|
|
||||||
private func handleLoginResponse(_ response: Response) {
|
private func handleLoginResponse(_ response: Response) {
|
||||||
self.isLoading = false
|
self.isLoading = false
|
||||||
let responseData = response.data
|
let responseData = response.data
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import Moya
|
|||||||
enum UserApi {
|
enum UserApi {
|
||||||
case login(request: LoginRequest)
|
case login(request: LoginRequest)
|
||||||
case loginApple(request: SocialLoginRequest)
|
case loginApple(request: SocialLoginRequest)
|
||||||
|
case loginGoogle(request: SocialLoginRequest, idToken: String)
|
||||||
case signUp(request: SignUpRequest)
|
case signUp(request: SignUpRequest)
|
||||||
case findPassword(request: ForgotPasswordRequest)
|
case findPassword(request: ForgotPasswordRequest)
|
||||||
case searchUser(nickname: String)
|
case searchUser(nickname: String)
|
||||||
@@ -51,6 +52,9 @@ extension UserApi: TargetType {
|
|||||||
case .loginApple:
|
case .loginApple:
|
||||||
return "/member/login/apple"
|
return "/member/login/apple"
|
||||||
|
|
||||||
|
case .loginGoogle:
|
||||||
|
return "/member/login/google"
|
||||||
|
|
||||||
case .signUp:
|
case .signUp:
|
||||||
return "/member/signup/v2"
|
return "/member/signup/v2"
|
||||||
|
|
||||||
@@ -124,7 +128,7 @@ extension UserApi: TargetType {
|
|||||||
|
|
||||||
var method: Moya.Method {
|
var method: Moya.Method {
|
||||||
switch self {
|
switch self {
|
||||||
case .login, .loginApple, .signUp, .findPassword, .notification, .logout, .logoutAllDevice, .signOut, .creatorFollow, .creatorUnFollow, .memberBlock, .memberUnBlock,
|
case .login, .loginApple, .loginGoogle, .signUp, .findPassword, .notification, .logout, .logoutAllDevice, .signOut, .creatorFollow, .creatorUnFollow, .memberBlock, .memberUnBlock,
|
||||||
.profileImageUpdate:
|
.profileImageUpdate:
|
||||||
return .post
|
return .post
|
||||||
|
|
||||||
@@ -144,6 +148,9 @@ extension UserApi: TargetType {
|
|||||||
case .loginApple(let request):
|
case .loginApple(let request):
|
||||||
return .requestJSONEncodable(request)
|
return .requestJSONEncodable(request)
|
||||||
|
|
||||||
|
case .loginGoogle(let request, _):
|
||||||
|
return .requestJSONEncodable(request)
|
||||||
|
|
||||||
case .signUp(let request):
|
case .signUp(let request):
|
||||||
return .requestJSONEncodable(request)
|
return .requestJSONEncodable(request)
|
||||||
|
|
||||||
@@ -209,6 +216,9 @@ extension UserApi: TargetType {
|
|||||||
case .login, .loginApple, .signUp, .findPassword:
|
case .login, .loginApple, .signUp, .findPassword:
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
|
case .loginGoogle(_, let idToken):
|
||||||
|
return ["Authorization": "Bearer \(idToken)"]
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
|
return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ final class UserRepository {
|
|||||||
return api.requestPublisher(.loginApple(request: request))
|
return api.requestPublisher(.loginApple(request: request))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loginGoogle(request: SocialLoginRequest, idToken: String) -> AnyPublisher<Response, MoyaError> {
|
||||||
|
return api.requestPublisher(.loginGoogle(request: request, idToken: idToken))
|
||||||
|
}
|
||||||
|
|
||||||
func signUp(request: SignUpRequest) -> AnyPublisher<Response, MoyaError> {
|
func signUp(request: SignUpRequest) -> AnyPublisher<Response, MoyaError> {
|
||||||
return api.requestPublisher(.signUp(request: request))
|
return api.requestPublisher(.signUp(request: request))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,3 +22,6 @@ let NOTIFLY_PASSWORD = "c6c585db0aaa4189be44d0467c7d66b6@A"
|
|||||||
|
|
||||||
let APPSCHEME = "voiceon"
|
let APPSCHEME = "voiceon"
|
||||||
let PAYVERSE_HTML_RESOURCE = "payverse_starter"
|
let PAYVERSE_HTML_RESOURCE = "payverse_starter"
|
||||||
|
|
||||||
|
let GID_CLIENT_ID = "983594297130-m6bv7lvc1lsetsvv3rk92etqc98uopqj.apps.googleusercontent.com"
|
||||||
|
let GID_SERVER_CLIENT_ID = "983594297130-5hrmkh6vpskeq6v34350kmilf74574h2.apps.googleusercontent.com"
|
||||||
|
|||||||
Reference in New Issue
Block a user