Skip to content

Commit

Permalink
Merge pull request #370 from OMZigak/hotfix/#363-kakaoFix
Browse files Browse the repository at this point in the history
[fix] 카카오로그인 수정 및 킹피셔 이슈 해결
  • Loading branch information
hooni0918 authored Sep 10, 2024
2 parents a0011ec + dd5ead4 commit f4876a7
Show file tree
Hide file tree
Showing 8 changed files with 181 additions and 117 deletions.
2 changes: 2 additions & 0 deletions KkuMulKum.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -2214,6 +2214,7 @@
INFOPLIST_KEY_CFBundleDisplayName = "꾸물꿈";
INFOPLIST_KEY_NSCameraUsageDescription = "카메라 사용 권한이 필요합니다.";
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "사진 라이브러리 접근 권한이 필요합니다.";
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "꾸물꿈은 카메라 권한을 필요로 합니다. 카메라를 통해 자신의 프로필을 즉시 찍어 업로드할 수 있습니다. 허용 안함 시 일부 기능이 동작하지 않을 수 있습니다.";
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
Expand Down Expand Up @@ -2255,6 +2256,7 @@
INFOPLIST_KEY_CFBundleDisplayName = "꾸물꿈";
INFOPLIST_KEY_NSCameraUsageDescription = "카메라 사용 권한이 필요합니다.";
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "사진 라이브러리 접근 권한이 필요합니다.";
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "꾸물꿈은 카메라 권한을 필요로 합니다. 카메라를 통해 자신의 프로필을 즉시 찍어 업로드할 수 있습니다. 허용 안함 시 일부 기능이 동작하지 않을 수 있습니다.";
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
Expand Down
6 changes: 3 additions & 3 deletions KkuMulKum/Resource/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPhotoLibraryUsageDescription</key>
<string>꾸물꿈은 카메라 권한을 필요로 합니다. 카메라를 통해 자신의 프로필을 즉시 찍어 업로드할 수 있습니다. 허용 안함 시 일부 기능이 동작하지 않을 수 있습니다.</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array/>
<array>
<string>kakao69aeef4a49d5b6772d62efdf1686994c</string>
</array>
</dict>
</array>
<key>FirebaseAppDelegateProxyEnabled</key>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class MyPageEditViewController: BaseViewController {
private let viewModel: MyPageEditViewModel
private let disposeBag = DisposeBag()
private let newProfileImageSubject = PublishSubject<UIImage?>()
let profileImageUpdated = PublishSubject<String?>()

init(viewModel: MyPageEditViewModel) {
self.viewModel = viewModel
Expand Down Expand Up @@ -73,6 +74,13 @@ class MyPageEditViewController: BaseViewController {
newProfileImage: newProfileImageSubject.asObservable()
)

input.newProfileImage
.compactMap { $0 }
.subscribe(onNext: { [weak self] image in
self?.viewModel.updateProfileImage(image)
})
.disposed(by: disposeBag)

let output = viewModel.transform(input: input, disposeBag: disposeBag)

output.profileImage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import UIKit
import WebKit

import SnapKit

class MyPageTermsViewController: BaseViewController {

private let viewModel: MyPageViewModel
Expand All @@ -26,21 +28,46 @@ class MyPageTermsViewController: BaseViewController {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
view = UIView()
view.addSubview(webView)
}

override func viewDidLoad() {
super.viewDidLoad()

let myURL = URL(string: "https://arrow-frog-4b9.notion.site/a66033a3ff4a40bfaa6eff0a5bee737d")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}

override func setupView() {
super.setupView()
setupNavigationBarTitle(with: "이용약관")
setupNavigationBarBackButton()

setupConstraints()

if let myURL = URL(string: "https://arrow-frog-4b9.notion.site/a66033a3ff4a40bfaa6eff0a5bee737d") {
let myRequest = URLRequest(url: myURL)
webView.load(myRequest)
}
}

private func setupConstraints() {
webView.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
make.leading.trailing.equalToSuperview()
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
}
}

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
adjustWebViewContentInset()
}

private func adjustWebViewContentInset() {
let contentInset = UIEdgeInsets(
top: 0,
left: 0,
bottom: view.safeAreaInsets.bottom + (tabBarController?.tabBar.frame.height ?? 0),
right: 0
)
webView.scrollView.contentInset = contentInset
webView.scrollView.scrollIndicatorInsets = contentInset
}
}

Expand Down
105 changes: 55 additions & 50 deletions KkuMulKum/Source/MyPage/ViewController/MyPageViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,25 @@ class MyPageViewController: BaseViewController, CustomActionSheetDelegate {
private let rootView = MyPageView()
private let viewModel = MyPageViewModel()
private let disposeBag = DisposeBag()
private var needsUserInfoRefresh = true

override func loadView() {
view = rootView
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
viewModel.fetchUserInfo()
if needsUserInfoRefresh {
viewModel.fetchUserInfo()
needsUserInfoRefresh = false
}
}

override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .green1

bindViewModel()
viewModel.fetchUserInfo()
}

override func setupView() {
Expand Down Expand Up @@ -105,18 +108,18 @@ class MyPageViewController: BaseViewController, CustomActionSheetDelegate {
.disposed(by: disposeBag)

viewModel.logoutResult
.observe(on: MainScheduler.instance)
.subscribe(onNext: { [weak self] result in
switch result {
case .success:
print("Logout successful")
self?.navigateToLoginScreen()
case .failure(let error):
print("Logout failed: \(error)")
}
})
.disposed(by: disposeBag)
.observe(on: MainScheduler.instance)
.subscribe(onNext: { [weak self] result in
switch result {
case .success:
print("Logout successful")
self?.navigateToLoginScreen()
case .failure(let error):
print("Logout failed: \(error)")
}
})
.disposed(by: disposeBag)


viewModel.userInfo
.observe(on: MainScheduler.instance)
Expand All @@ -137,28 +140,36 @@ class MyPageViewController: BaseViewController, CustomActionSheetDelegate {
updateProfileImage(with: userInfo.profileImageURL)
}

private func updateProfileImage(with urlString: String?) {
private func updateProfileImage(with urlString: String?, localImage: UIImage? = nil) {
print("Attempting to update profile image with URL: \(urlString ?? "nil")")
if let localImage = localImage {
rootView.contentView.profileImageView.image = localImage
}

if let urlString = urlString, let url = URL(string: urlString) {
rootView.contentView.profileImageView.kf.setImage(
with: url,
placeholder: UIImage.imgProfile,
placeholder: localImage ?? UIImage.imgProfile,
options: [
.transition(.fade(0.2)),
.forceRefresh,
.cacheOriginalImage
],
completionHandler: { result in
switch result {
case .success(_):
print("Profile image loaded successfully")
case .success(let value):
print("Profile image loaded successfully from server. Size: \(value.image.size)")
case .failure(let error):
print("Failed to load profile image: \(error.localizedDescription)")
self.rootView.contentView.profileImageView.image = UIImage.imgProfile
print("Failed to load profile image from server: \(error.localizedDescription)")
if self.rootView.contentView.profileImageView.image == nil {
self.rootView.contentView.profileImageView.image = UIImage.imgProfile
}
}
}
)
} else {
rootView.contentView.profileImageView.image = UIImage.imgProfile
print("Invalid URL or nil. Using local image or default profile image.")
rootView.contentView.profileImageView.image = localImage ?? UIImage.imgProfile
}
}

Expand Down Expand Up @@ -198,29 +209,23 @@ class MyPageViewController: BaseViewController, CustomActionSheetDelegate {
}

private func pushEditProfileViewController() {
let authService = AuthService()
let editProfileViewModel = MyPageEditViewModel(authService: authService)
let editProfileViewController = MyPageEditViewController(viewModel: editProfileViewModel)

editProfileViewModel.profileImageUpdated
.observe(on: MainScheduler.instance)
.subscribe(onNext: { [weak self] imageDataString in
if let imageDataString = imageDataString,
let imageData = Data(base64Encoded: imageDataString),
let image = UIImage(data: imageData) {
self?.rootView.contentView.profileImageView.image = image
} else {
self?.rootView.contentView.profileImageView.image = UIImage.imgProfile
}
KingfisherManager.shared.cache.clearMemoryCache()
KingfisherManager.shared.cache.clearDiskCache()
})
.disposed(by: disposeBag)

editProfileViewController.hidesBottomBarWhenPushed = true

navigationController?.pushViewController(editProfileViewController, animated: true)
}
let editViewModel = MyPageEditViewModel(authService: AuthService())
let editVC = MyPageEditViewController(viewModel: editViewModel)

editViewModel.profileImageUpdated
.observe(on: MainScheduler.instance)
.subscribe(onNext: { [weak self] imageDataString in
if let imageDataString = imageDataString,
let imageData = Data(base64Encoded: imageDataString),
let image = UIImage(data: imageData) {
self?.updateProfileImage(with: nil, localImage: image)
}
self?.needsUserInfoRefresh = true
})
.disposed(by: disposeBag)

navigationController?.pushViewController(editVC, animated: true)
}

private func pushAskViewController() {
let askViewController = MyPageAskViewController(viewModel: self.viewModel)
Expand All @@ -233,12 +238,12 @@ class MyPageViewController: BaseViewController, CustomActionSheetDelegate {
}

private func navigateToLoginScreen() {
let loginViewModel = LoginViewModel()
let loginViewController = LoginViewController(viewModel: loginViewModel)
let navigationController = UINavigationController(rootViewController: loginViewController)
navigationController.modalPresentationStyle = .fullScreen
self.view.window?.rootViewController = navigationController
self.view.window?.makeKeyAndVisible()
let loginViewModel = LoginViewModel()
let loginViewController = LoginViewController(viewModel: loginViewModel)
let navigationController = UINavigationController(rootViewController: loginViewController)
navigationController.modalPresentationStyle = .fullScreen
self.view.window?.rootViewController = navigationController
self.view.window?.makeKeyAndVisible()
}

func actionButtonDidTap(for kind: ActionSheetKind) {
Expand Down
Loading

0 comments on commit f4876a7

Please sign in to comment.