diff --git a/SodaLive.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SodaLive.xcworkspace/xcshareddata/swiftpm/Package.resolved
index 7baeae5..f8297a9 100644
--- a/SodaLive.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/SodaLive.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -1,5 +1,5 @@
{
- "originHash" : "1f28da3687662a2a9efe60ffc2ca2499be411b5b0a1e07f72559059c40728121",
+ "originHash" : "23fbb8fc47a95510f46840139efb1770d536256f32ac2ba9f74cf03ee90a3979",
"pins" : [
{
"identity" : "abseil-cpp-binary",
@@ -127,6 +127,15 @@
"version" : "100.0.0"
}
},
+ {
+ "identity" : "kakao-ios-sdk",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/kakao/kakao-ios-sdk",
+ "state" : {
+ "revision" : "5978979157a5a0521c9c56fd0156aec794caa21c",
+ "version" : "2.27.2"
+ }
+ },
{
"identity" : "kingfisher",
"kind" : "remoteSourceControl",
diff --git a/SodaLive/Resources/Debug/SodaLive-dev-Info.plist b/SodaLive/Resources/Debug/SodaLive-dev-Info.plist
index e5ffe0e..cf91aa8 100644
--- a/SodaLive/Resources/Debug/SodaLive-dev-Info.plist
+++ b/SodaLive/Resources/Debug/SodaLive-dev-Info.plist
@@ -1,269 +1,278 @@
-
- GIDClientID
- 758414412471-3cf403jb4s405eu17qrfrcbs9ofhq369.apps.googleusercontent.com
- CFBundleURLTypes
-
-
- CFBundleURLSchemes
-
- fb608674328645232
- com.googleusercontent.apps.758414412471-3cf403jb4s405eu17qrfrcbs9ofhq369
-
-
-
- CFBundleTypeRole
- Editor
- CFBundleURLSchemes
-
- voiceon-test
-
-
-
- FacebookAppID
- 608674328645232
- FacebookAutoLogAppEventsEnabled
-
- FacebookClientToken
- 3775e6ea83236a685d264b6c5a1bbb4d
- FacebookDisplayName
- 보이스온 - Test1
- FirebaseAppDelegateProxyEnabled
-
- GADApplicationIdentifier
- ca-app-pub-1299501215847962~3447556960
- NSAdvertisingAttributionReportEndpoint
- https://appsflyer-skadnetwork.com/
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
-
- NSMicrophoneUsageDescription
- 마이크 접근이 필요합니다.
- NSCameraUsageDescription
- 사진을 촬영하려면 카메라 접근이 필요합니다.
- NSPhotoLibraryUsageDescription
- 사진을 선택하려면 사진 라이브러리 접근이 필요합니다.
- NSUserTrackingUsageDescription
- 맞춤형 광고 제공을 위해 추적을 허용해 주세요.
- SKAdNetworkItems
-
-
- SKAdNetworkIdentifier
- cstr6suwn9.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4fzdc2evr5.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4pfyvq9l8r.skadnetwork
-
-
- SKAdNetworkIdentifier
- 2fnua5tdw4.skadnetwork
-
-
- SKAdNetworkIdentifier
- ydx93a7ass.skadnetwork
-
-
- SKAdNetworkIdentifier
- 5a6flpkh64.skadnetwork
-
-
- SKAdNetworkIdentifier
- p78axxw29g.skadnetwork
-
-
- SKAdNetworkIdentifier
- v72qych5uu.skadnetwork
-
-
- SKAdNetworkIdentifier
- ludvb6z3bs.skadnetwork
-
-
- SKAdNetworkIdentifier
- cp8zw746q7.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3sh42y64q3.skadnetwork
-
-
- SKAdNetworkIdentifier
- c6k4g5qg8m.skadnetwork
-
-
- SKAdNetworkIdentifier
- s39g8k73mm.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3qy4746246.skadnetwork
-
-
- SKAdNetworkIdentifier
- f38h382jlk.skadnetwork
-
-
- SKAdNetworkIdentifier
- hs6bdukanm.skadnetwork
-
-
- SKAdNetworkIdentifier
- v4nxqhlyqp.skadnetwork
-
-
- SKAdNetworkIdentifier
- wzmmz9fp6w.skadnetwork
-
-
- SKAdNetworkIdentifier
- yclnxrl5pm.skadnetwork
-
-
- SKAdNetworkIdentifier
- t38b2kh725.skadnetwork
-
-
- SKAdNetworkIdentifier
- 7ug5zh24hu.skadnetwork
-
-
- SKAdNetworkIdentifier
- gta9lk7p23.skadnetwork
-
-
- SKAdNetworkIdentifier
- vutu7akeur.skadnetwork
-
-
- SKAdNetworkIdentifier
- y5ghdn5j9k.skadnetwork
-
-
- SKAdNetworkIdentifier
- n6fk4nfna4.skadnetwork
-
-
- SKAdNetworkIdentifier
- v9wttpbfk9.skadnetwork
-
-
- SKAdNetworkIdentifier
- n38lu8286q.skadnetwork
-
-
- SKAdNetworkIdentifier
- 47vhws6wlr.skadnetwork
-
-
- SKAdNetworkIdentifier
- kbd757ywx3.skadnetwork
-
-
- SKAdNetworkIdentifier
- 9t245vhmpl.skadnetwork
-
-
- SKAdNetworkIdentifier
- eh6m2bh4zr.skadnetwork
-
-
- SKAdNetworkIdentifier
- a2p9lx4jpn.skadnetwork
-
-
- SKAdNetworkIdentifier
- 22mmun2rn5.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4468km3ulz.skadnetwork
-
-
- SKAdNetworkIdentifier
- 2u9pt9hc89.skadnetwork
-
-
- SKAdNetworkIdentifier
- 8s468mfl3y.skadnetwork
-
-
- SKAdNetworkIdentifier
- klf5c3l5u5.skadnetwork
-
-
- SKAdNetworkIdentifier
- ppxm28t8ap.skadnetwork
-
-
- SKAdNetworkIdentifier
- ecpz2srf59.skadnetwork
-
-
- SKAdNetworkIdentifier
- uw77j35x4d.skadnetwork
-
-
- SKAdNetworkIdentifier
- pwa73g5rt2.skadnetwork
-
-
- SKAdNetworkIdentifier
- mlmmfzh3r3.skadnetwork
-
-
- SKAdNetworkIdentifier
- 578prtvx9j.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4dzt52r2t5.skadnetwork
-
-
- SKAdNetworkIdentifier
- e5fvkxwrpn.skadnetwork
-
-
- SKAdNetworkIdentifier
- 8c4e2ghe7u.skadnetwork
-
-
- SKAdNetworkIdentifier
- zq492l623r.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3rd42ekr43.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3qcr597p9d.skadnetwork
-
-
- UIAppFonts
-
- Pretendard-Bold.otf
- Pretendard-Medium.otf
- Pretendard-Light.otf
- Pretendard-Regular.otf
- NotoSansJP-Bold.ttf
- NotoSansJP-Medium.ttf
- NotoSansJP-Light.ttf
- NotoSansJP-Regular.ttf
-
- UIBackgroundModes
-
- audio
- fetch
- remote-notification
-
-
+
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ fb608674328645232
+ com.googleusercontent.apps.758414412471-3cf403jb4s405eu17qrfrcbs9ofhq369
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ voiceon-test
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ kakao20cf19413d63bfdfd30e8e6dff933d33
+
+
+
+ FacebookAppID
+ 608674328645232
+ FacebookAutoLogAppEventsEnabled
+
+ FacebookClientToken
+ 3775e6ea83236a685d264b6c5a1bbb4d
+ FacebookDisplayName
+ 보이스온 - Test1
+ FirebaseAppDelegateProxyEnabled
+
+ GADApplicationIdentifier
+ ca-app-pub-1299501215847962~3447556960
+ GIDClientID
+ 758414412471-3cf403jb4s405eu17qrfrcbs9ofhq369.apps.googleusercontent.com
+ NSAdvertisingAttributionReportEndpoint
+ https://appsflyer-skadnetwork.com/
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ SKAdNetworkItems
+
+
+ SKAdNetworkIdentifier
+ cstr6suwn9.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4fzdc2evr5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4pfyvq9l8r.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 2fnua5tdw4.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ydx93a7ass.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 5a6flpkh64.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ p78axxw29g.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ v72qych5uu.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ludvb6z3bs.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ cp8zw746q7.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3sh42y64q3.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ c6k4g5qg8m.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ s39g8k73mm.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3qy4746246.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ f38h382jlk.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ hs6bdukanm.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ v4nxqhlyqp.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ wzmmz9fp6w.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ yclnxrl5pm.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ t38b2kh725.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 7ug5zh24hu.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ gta9lk7p23.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ vutu7akeur.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ y5ghdn5j9k.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ n6fk4nfna4.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ v9wttpbfk9.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ n38lu8286q.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 47vhws6wlr.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ kbd757ywx3.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 9t245vhmpl.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ eh6m2bh4zr.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ a2p9lx4jpn.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 22mmun2rn5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4468km3ulz.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 2u9pt9hc89.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 8s468mfl3y.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ klf5c3l5u5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ppxm28t8ap.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ecpz2srf59.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ uw77j35x4d.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ pwa73g5rt2.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ mlmmfzh3r3.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 578prtvx9j.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4dzt52r2t5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ e5fvkxwrpn.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 8c4e2ghe7u.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ zq492l623r.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3rd42ekr43.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3qcr597p9d.skadnetwork
+
+
+ UIAppFonts
+
+ Pretendard-Bold.otf
+ Pretendard-Medium.otf
+ Pretendard-Light.otf
+ Pretendard-Regular.otf
+ NotoSansJP-Bold.ttf
+ NotoSansJP-Medium.ttf
+ NotoSansJP-Light.ttf
+ NotoSansJP-Regular.ttf
+
+ UIBackgroundModes
+
+ audio
+ fetch
+ remote-notification
+
+ LSApplicationQueriesSchemes
+
+
+ kakaokompassauth
+
+ kakaolink
+
+ kakaoplus
+
+
diff --git a/SodaLive/Resources/Info.plist b/SodaLive/Resources/Info.plist
index f45e800..d6510f8 100644
--- a/SodaLive/Resources/Info.plist
+++ b/SodaLive/Resources/Info.plist
@@ -1,269 +1,278 @@
-
- GIDClientID
- 983594297130-m6bv7lvc1lsetsvv3rk92etqc98uopqj.apps.googleusercontent.com
- CFBundleURLTypes
-
-
- CFBundleURLSchemes
-
- fb612448298237287
- com.googleusercontent.apps.983594297130-m6bv7lvc1lsetsvv3rk92etqc98uopqj
-
-
-
- CFBundleTypeRole
- Editor
- CFBundleURLSchemes
-
- voiceon
-
-
-
- FacebookAppID
- 612448298237287
- FacebookAutoLogAppEventsEnabled
-
- FacebookClientToken
- 32af760f4a7b7cb7e3b1e7ffd0b0da70
- FacebookDisplayName
- 보이스온
- FirebaseAppDelegateProxyEnabled
-
- GADApplicationIdentifier
- ca-app-pub-1299501215847962~8852459715
- NSAdvertisingAttributionReportEndpoint
- https://appsflyer-skadnetwork.com/
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
-
- NSMicrophoneUsageDescription
- 마이크 접근이 필요합니다.
- NSCameraUsageDescription
- 사진을 촬영하려면 카메라 접근이 필요합니다.
- NSPhotoLibraryUsageDescription
- 사진을 선택하려면 사진 라이브러리 접근이 필요합니다.
- NSUserTrackingUsageDescription
- 맞춤형 광고 제공을 위해 추적을 허용해 주세요.
- SKAdNetworkItems
-
-
- SKAdNetworkIdentifier
- cstr6suwn9.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4fzdc2evr5.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4pfyvq9l8r.skadnetwork
-
-
- SKAdNetworkIdentifier
- 2fnua5tdw4.skadnetwork
-
-
- SKAdNetworkIdentifier
- ydx93a7ass.skadnetwork
-
-
- SKAdNetworkIdentifier
- 5a6flpkh64.skadnetwork
-
-
- SKAdNetworkIdentifier
- p78axxw29g.skadnetwork
-
-
- SKAdNetworkIdentifier
- v72qych5uu.skadnetwork
-
-
- SKAdNetworkIdentifier
- ludvb6z3bs.skadnetwork
-
-
- SKAdNetworkIdentifier
- cp8zw746q7.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3sh42y64q3.skadnetwork
-
-
- SKAdNetworkIdentifier
- c6k4g5qg8m.skadnetwork
-
-
- SKAdNetworkIdentifier
- s39g8k73mm.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3qy4746246.skadnetwork
-
-
- SKAdNetworkIdentifier
- f38h382jlk.skadnetwork
-
-
- SKAdNetworkIdentifier
- hs6bdukanm.skadnetwork
-
-
- SKAdNetworkIdentifier
- v4nxqhlyqp.skadnetwork
-
-
- SKAdNetworkIdentifier
- wzmmz9fp6w.skadnetwork
-
-
- SKAdNetworkIdentifier
- yclnxrl5pm.skadnetwork
-
-
- SKAdNetworkIdentifier
- t38b2kh725.skadnetwork
-
-
- SKAdNetworkIdentifier
- 7ug5zh24hu.skadnetwork
-
-
- SKAdNetworkIdentifier
- gta9lk7p23.skadnetwork
-
-
- SKAdNetworkIdentifier
- vutu7akeur.skadnetwork
-
-
- SKAdNetworkIdentifier
- y5ghdn5j9k.skadnetwork
-
-
- SKAdNetworkIdentifier
- n6fk4nfna4.skadnetwork
-
-
- SKAdNetworkIdentifier
- v9wttpbfk9.skadnetwork
-
-
- SKAdNetworkIdentifier
- n38lu8286q.skadnetwork
-
-
- SKAdNetworkIdentifier
- 47vhws6wlr.skadnetwork
-
-
- SKAdNetworkIdentifier
- kbd757ywx3.skadnetwork
-
-
- SKAdNetworkIdentifier
- 9t245vhmpl.skadnetwork
-
-
- SKAdNetworkIdentifier
- eh6m2bh4zr.skadnetwork
-
-
- SKAdNetworkIdentifier
- a2p9lx4jpn.skadnetwork
-
-
- SKAdNetworkIdentifier
- 22mmun2rn5.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4468km3ulz.skadnetwork
-
-
- SKAdNetworkIdentifier
- 2u9pt9hc89.skadnetwork
-
-
- SKAdNetworkIdentifier
- 8s468mfl3y.skadnetwork
-
-
- SKAdNetworkIdentifier
- klf5c3l5u5.skadnetwork
-
-
- SKAdNetworkIdentifier
- ppxm28t8ap.skadnetwork
-
-
- SKAdNetworkIdentifier
- ecpz2srf59.skadnetwork
-
-
- SKAdNetworkIdentifier
- uw77j35x4d.skadnetwork
-
-
- SKAdNetworkIdentifier
- pwa73g5rt2.skadnetwork
-
-
- SKAdNetworkIdentifier
- mlmmfzh3r3.skadnetwork
-
-
- SKAdNetworkIdentifier
- 578prtvx9j.skadnetwork
-
-
- SKAdNetworkIdentifier
- 4dzt52r2t5.skadnetwork
-
-
- SKAdNetworkIdentifier
- e5fvkxwrpn.skadnetwork
-
-
- SKAdNetworkIdentifier
- 8c4e2ghe7u.skadnetwork
-
-
- SKAdNetworkIdentifier
- zq492l623r.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3rd42ekr43.skadnetwork
-
-
- SKAdNetworkIdentifier
- 3qcr597p9d.skadnetwork
-
-
- UIAppFonts
-
- Pretendard-Bold.otf
- Pretendard-Medium.otf
- Pretendard-Light.otf
- Pretendard-Regular.otf
- NotoSansJP-Bold.ttf
- NotoSansJP-Medium.ttf
- NotoSansJP-Light.ttf
- NotoSansJP-Regular.ttf
-
- UIBackgroundModes
-
- audio
- fetch
- remote-notification
-
-
+
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ fb612448298237287
+ com.googleusercontent.apps.983594297130-m6bv7lvc1lsetsvv3rk92etqc98uopqj
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ voiceon
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ kakao231cf78acfa8252fca38b9eedf87c5cb
+
+
+
+ FacebookAppID
+ 612448298237287
+ FacebookAutoLogAppEventsEnabled
+
+ FacebookClientToken
+ 32af760f4a7b7cb7e3b1e7ffd0b0da70
+ FacebookDisplayName
+ 보이스온
+ FirebaseAppDelegateProxyEnabled
+
+ GADApplicationIdentifier
+ ca-app-pub-1299501215847962~8852459715
+ GIDClientID
+ 983594297130-m6bv7lvc1lsetsvv3rk92etqc98uopqj.apps.googleusercontent.com
+ NSAdvertisingAttributionReportEndpoint
+ https://appsflyer-skadnetwork.com/
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ SKAdNetworkItems
+
+
+ SKAdNetworkIdentifier
+ cstr6suwn9.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4fzdc2evr5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4pfyvq9l8r.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 2fnua5tdw4.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ydx93a7ass.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 5a6flpkh64.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ p78axxw29g.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ v72qych5uu.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ludvb6z3bs.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ cp8zw746q7.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3sh42y64q3.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ c6k4g5qg8m.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ s39g8k73mm.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3qy4746246.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ f38h382jlk.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ hs6bdukanm.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ v4nxqhlyqp.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ wzmmz9fp6w.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ yclnxrl5pm.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ t38b2kh725.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 7ug5zh24hu.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ gta9lk7p23.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ vutu7akeur.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ y5ghdn5j9k.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ n6fk4nfna4.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ v9wttpbfk9.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ n38lu8286q.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 47vhws6wlr.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ kbd757ywx3.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 9t245vhmpl.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ eh6m2bh4zr.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ a2p9lx4jpn.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 22mmun2rn5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4468km3ulz.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 2u9pt9hc89.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 8s468mfl3y.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ klf5c3l5u5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ppxm28t8ap.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ ecpz2srf59.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ uw77j35x4d.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ pwa73g5rt2.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ mlmmfzh3r3.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 578prtvx9j.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 4dzt52r2t5.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ e5fvkxwrpn.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 8c4e2ghe7u.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ zq492l623r.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3rd42ekr43.skadnetwork
+
+
+ SKAdNetworkIdentifier
+ 3qcr597p9d.skadnetwork
+
+
+ UIAppFonts
+
+ Pretendard-Bold.otf
+ Pretendard-Medium.otf
+ Pretendard-Light.otf
+ Pretendard-Regular.otf
+ NotoSansJP-Bold.ttf
+ NotoSansJP-Medium.ttf
+ NotoSansJP-Light.ttf
+ NotoSansJP-Regular.ttf
+
+ UIBackgroundModes
+
+ audio
+ fetch
+ remote-notification
+
+ LSApplicationQueriesSchemes
+
+
+ kakaokompassauth
+
+ kakaolink
+
+ kakaoplus
+
+
diff --git a/SodaLive/Sources/App/SodaLiveApp.swift b/SodaLive/Sources/App/SodaLiveApp.swift
index f8a986c..ac80a6f 100644
--- a/SodaLive/Sources/App/SodaLiveApp.swift
+++ b/SodaLive/Sources/App/SodaLiveApp.swift
@@ -11,6 +11,8 @@ import Kingfisher
import FBSDKCoreKit
import AppsFlyerLib
import GoogleSignIn
+import KakaoSDKCommon
+import KakaoSDKAuth
@main
struct SodaLiveApp: App {
@@ -26,6 +28,7 @@ struct SodaLiveApp: App {
configureImageCache()
// 앱 시작 직후, 초기 네트워크 요청도 올바른 언어 헤더를 갖도록 동기 초기화
LanguageHeaderProvider.initialize()
+ KakaoSDK.initSDK(appKey: KAKAO_APP_KEY)
}
private func configureImageCache() {
@@ -68,6 +71,11 @@ struct SodaLiveApp: App {
}
.onOpenURL { url in
DEBUG_LOG("I have received a URL through a custom scheme! \(url.absoluteString)")
+
+ if KakaoSDKAuth.AuthApi.isKakaoTalkLoginUrl(url) {
+ _ = AuthController.handleOpenUrl(url: url)
+ return
+ }
if let comps = URLComponents(url: url, resolvingAgainstBaseURL: false),
url.scheme?.lowercased() == APPSCHEME.lowercased(),
diff --git a/SodaLive/Sources/Debug/Utils/Constants.swift b/SodaLive/Sources/Debug/Utils/Constants.swift
index f4d47dd..6b2db86 100644
--- a/SodaLive/Sources/Debug/Utils/Constants.swift
+++ b/SodaLive/Sources/Debug/Utils/Constants.swift
@@ -25,3 +25,5 @@ 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"
+
+let KAKAO_APP_KEY = "20cf19413d63bfdfd30e8e6dff933d33"
diff --git a/SodaLive/Sources/I18n/I18n.swift b/SodaLive/Sources/I18n/I18n.swift
index e3aa15e..3e586a2 100644
--- a/SodaLive/Sources/I18n/I18n.swift
+++ b/SodaLive/Sources/I18n/I18n.swift
@@ -1135,6 +1135,24 @@ enum I18n {
)
}
}
+
+ enum Kakao {
+ static var signInFailed: String {
+ pick(
+ ko: "카카오 로그인에 실패했습니다.\n다시 시도해 주세요.",
+ en: "Kakao sign-in failed.\nPlease try again.",
+ ja: "Kakaoログインに失敗しました。\nもう一度お試しください。"
+ )
+ }
+
+ static var tokenMissing: String {
+ pick(
+ ko: "카카오 인증 토큰을 가져오지 못했습니다.",
+ en: "Failed to retrieve Kakao token.",
+ ja: "Kakao認証トークンを取得できませんでした。"
+ )
+ }
+ }
}
// 문자 메시지(Text Message) 관련 문자열
diff --git a/SodaLive/Sources/User/Login/LoginView.swift b/SodaLive/Sources/User/Login/LoginView.swift
index 6461dfc..d118d42 100644
--- a/SodaLive/Sources/User/Login/LoginView.swift
+++ b/SodaLive/Sources/User/Login/LoginView.swift
@@ -132,6 +132,7 @@ struct LoginView: View {
Image("ic_login_kakao")
.onTapGesture {
hideKeyboard()
+ viewModel.loginWithKakao()
}
Image("ic_login_google")
diff --git a/SodaLive/Sources/User/Login/LoginViewModel.swift b/SodaLive/Sources/User/Login/LoginViewModel.swift
index 903d542..aba09b5 100644
--- a/SodaLive/Sources/User/Login/LoginViewModel.swift
+++ b/SodaLive/Sources/User/Login/LoginViewModel.swift
@@ -13,6 +13,8 @@ import CryptoKit
import Security
import UIKit
import GoogleSignIn
+import KakaoSDKUser
+import KakaoSDKAuth
final class LoginViewModel: NSObject, ObservableObject {
private let appViewModel = AppViewModel()
@@ -98,6 +100,33 @@ final class LoginViewModel: NSObject, ObservableObject {
}
}
}
+
+ func loginWithKakao() {
+ let loginHandler: (OAuthToken?, Error?) -> Void = { token, error in
+ DispatchQueue.main.async {
+ if let error = error {
+ ERROR_LOG(error.localizedDescription)
+ self.errorMessage = I18n.Login.Kakao.signInFailed
+ self.isShowPopup = true
+ return
+ }
+
+ guard let accessToken = token?.accessToken, !accessToken.isEmpty else {
+ self.errorMessage = I18n.Login.Kakao.tokenMissing
+ self.isShowPopup = true
+ return
+ }
+
+ self.loginWithKakao(accessToken: accessToken)
+ }
+ }
+
+ if KakaoSDKUser.UserApi.isKakaoTalkLoginAvailable() {
+ KakaoSDKUser.UserApi.shared.loginWithKakaoTalk(completion: loginHandler)
+ } else {
+ KakaoSDKUser.UserApi.shared.loginWithKakaoAccount(completion: loginHandler)
+ }
+ }
private func loginWithApple(identityToken: String, nonce: String) {
let pushToken = UserDefaults.string(forKey: .pushToken)
@@ -153,6 +182,33 @@ final class LoginViewModel: NSObject, ObservableObject {
.store(in: &subscription)
}
+ private func loginWithKakao(accessToken: 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.loginKakao(request: request, accessToken: accessToken)
+ .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 }
diff --git a/SodaLive/Sources/User/UserApi.swift b/SodaLive/Sources/User/UserApi.swift
index dbd8487..96577c9 100644
--- a/SodaLive/Sources/User/UserApi.swift
+++ b/SodaLive/Sources/User/UserApi.swift
@@ -12,6 +12,7 @@ enum UserApi {
case login(request: LoginRequest)
case loginApple(request: SocialLoginRequest)
case loginGoogle(request: SocialLoginRequest, idToken: String)
+ case loginKakao(request: SocialLoginRequest, accessToken: String)
case signUp(request: SignUpRequest)
case findPassword(request: ForgotPasswordRequest)
case searchUser(nickname: String)
@@ -54,6 +55,9 @@ extension UserApi: TargetType {
case .loginGoogle:
return "/member/login/google"
+
+ case .loginKakao:
+ return "/member/login/kakao"
case .signUp:
return "/member/signup/v2"
@@ -128,7 +132,7 @@ extension UserApi: TargetType {
var method: Moya.Method {
switch self {
- case .login, .loginApple, .loginGoogle, .signUp, .findPassword, .notification, .logout, .logoutAllDevice, .signOut, .creatorFollow, .creatorUnFollow, .memberBlock, .memberUnBlock,
+ case .login, .loginApple, .loginGoogle, .loginKakao, .signUp, .findPassword, .notification, .logout, .logoutAllDevice, .signOut, .creatorFollow, .creatorUnFollow, .memberBlock, .memberUnBlock,
.profileImageUpdate:
return .post
@@ -150,6 +154,9 @@ extension UserApi: TargetType {
case .loginGoogle(let request, _):
return .requestJSONEncodable(request)
+
+ case .loginKakao(let request, _):
+ return .requestJSONEncodable(request)
case .signUp(let request):
return .requestJSONEncodable(request)
@@ -218,6 +225,9 @@ extension UserApi: TargetType {
case .loginGoogle(_, let idToken):
return ["Authorization": "Bearer \(idToken)"]
+
+ case .loginKakao(_, let accessToken):
+ return ["Authorization": "Bearer \(accessToken)"]
default:
return ["Authorization": "Bearer \(UserDefaults.string(forKey: UserDefaultsKey.token))"]
diff --git a/SodaLive/Sources/User/UserRepository.swift b/SodaLive/Sources/User/UserRepository.swift
index 93cd542..15c14aa 100644
--- a/SodaLive/Sources/User/UserRepository.swift
+++ b/SodaLive/Sources/User/UserRepository.swift
@@ -24,6 +24,10 @@ final class UserRepository {
func loginGoogle(request: SocialLoginRequest, idToken: String) -> AnyPublisher {
return api.requestPublisher(.loginGoogle(request: request, idToken: idToken))
}
+
+ func loginKakao(request: SocialLoginRequest, accessToken: String) -> AnyPublisher {
+ return api.requestPublisher(.loginKakao(request: request, accessToken: accessToken))
+ }
func signUp(request: SignUpRequest) -> AnyPublisher {
return api.requestPublisher(.signUp(request: request))
diff --git a/SodaLive/Sources/Utils/Constants.swift b/SodaLive/Sources/Utils/Constants.swift
index 2c63aaf..b5d76cd 100644
--- a/SodaLive/Sources/Utils/Constants.swift
+++ b/SodaLive/Sources/Utils/Constants.swift
@@ -25,3 +25,5 @@ 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"
+
+let KAKAO_APP_KEY = "231cf78acfa8252fca38b9eedf87c5cb"