Skip to content

Commit

Permalink
Merge branch 'release/v1.1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
Hyunsik-Yoo committed Jul 5, 2020
2 parents af9c5da + bf48a3f commit 4e39d27
Show file tree
Hide file tree
Showing 17 changed files with 124 additions and 24 deletions.
3 changes: 2 additions & 1 deletion thereto-ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ target 'thereto-ios' do
pod 'Firebase/Auth'
pod 'Firebase/Firestore'
pod 'Firebase/Storage'

pod 'Firebase/Messaging'

# Crashlytics
pod 'Fabric', '~> 1.10.2'
pod 'Crashlytics', '~> 3.14.0'
Expand Down
25 changes: 23 additions & 2 deletions thereto-ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,9 @@ PODS:
- Firebase/Firestore (6.16.0):
- Firebase/CoreOnly
- FirebaseFirestore (~> 1.10.0)
- Firebase/Messaging (6.16.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 4.2.0)
- Firebase/Storage (6.16.0):
- Firebase/CoreOnly
- FirebaseStorage (~> 3.5.0)
Expand All @@ -206,6 +209,7 @@ PODS:
- GoogleUtilities/Network (~> 6.0)
- "GoogleUtilities/NSData+zlib (~> 6.0)"
- nanopb (= 0.3.9011)
- FirebaseAnalyticsInterop (1.5.0)
- FirebaseAuth (6.4.3):
- FirebaseAuthInterop (~> 1.0)
- FirebaseCore (~> 6.6)
Expand Down Expand Up @@ -247,6 +251,15 @@ PODS:
- FirebaseInstallations (~> 1.0)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/UserDefaults (~> 6.5)
- FirebaseMessaging (4.2.1):
- FirebaseAnalyticsInterop (~> 1.5)
- FirebaseCore (~> 6.6)
- FirebaseInstanceID (~> 4.3)
- GoogleUtilities/AppDelegateSwizzler (~> 6.5)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/Reachability (~> 6.5)
- GoogleUtilities/UserDefaults (~> 6.5)
- Protobuf (>= 3.9.2, ~> 3.9)
- FirebaseStorage (3.5.0):
- FirebaseAuthInterop (~> 1.0)
- FirebaseCore (~> 6.0)
Expand Down Expand Up @@ -307,6 +320,7 @@ PODS:
- nanopb/encode (0.3.9011)
- NMapsMap (3.7.0)
- PromisesObjC (1.2.8)
- Protobuf (3.12.0)
- RxCocoa (5.1.1):
- RxRelay (~> 5)
- RxSwift (~> 5)
Expand All @@ -327,6 +341,7 @@ DEPENDENCIES:
- Firebase/Analytics
- Firebase/Auth
- Firebase/Firestore
- Firebase/Messaging
- Firebase/Storage
- Kingfisher (~> 5.0)
- NMapsMap
Expand All @@ -349,6 +364,7 @@ SPEC REPOS:
- FBSDKLoginKit
- Firebase
- FirebaseAnalytics
- FirebaseAnalyticsInterop
- FirebaseAuth
- FirebaseAuthInterop
- FirebaseCore
Expand All @@ -357,6 +373,7 @@ SPEC REPOS:
- FirebaseFirestore
- FirebaseInstallations
- FirebaseInstanceID
- FirebaseMessaging
- FirebaseStorage
- GoogleAppMeasurement
- GoogleDataTransport
Expand All @@ -370,6 +387,7 @@ SPEC REPOS:
- nanopb
- NMapsMap
- PromisesObjC
- Protobuf
- RxCocoa
- RxRelay
- RxSwift
Expand All @@ -389,6 +407,7 @@ SPEC CHECKSUMS:
FBSDKLoginKit: f1ea8026a58b52d30c9f2e6a58ca7d813619fb83
Firebase: 497158b816d0a86fc31babbd05546fcd7e6083ff
FirebaseAnalytics: cf95d3aab897612783020fbd98401d5366f135ee
FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae
FirebaseAuth: 5ce2b03a3d7fe56b7a6e4c5ec7ff1522890b1d6f
FirebaseAuthInterop: 0ffa57668be100582bb7643d4fcb7615496c41fc
FirebaseCore: 85064903ed6c28e47fec9c7bd149d94ba1b6b6e7
Expand All @@ -397,6 +416,7 @@ SPEC CHECKSUMS:
FirebaseFirestore: cee8f861d68dadce998876b78a4b75701bc94302
FirebaseInstallations: 575cd32f2aec0feeb0e44f5d0110a09e5e60b47b
FirebaseInstanceID: 6668efc1655a4052c083f287a7141f1ead12f9c2
FirebaseMessaging: 9e23f9d603b1fb71ccbeb48d79bf0d4ba0272c84
FirebaseStorage: 6c5263796af3b1be82ed173598aade47535fe125
GoogleAppMeasurement: d0560d915abf15e692e8538ba1d58442217b6aff
GoogleDataTransport: 0048df6388dab1c254799f2a30365b1dffe20422
Expand All @@ -410,13 +430,14 @@ SPEC CHECKSUMS:
nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd
NMapsMap: 46ce3d48d7976dd10c6ec63cd7eecf655a7dd955
PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6
Protobuf: 2793fcd0622a00b546c60e7cbbcc493e043e9bb9
RxCocoa: 32065309a38d29b5b0db858819b5bf9ef038b601
RxRelay: d77f7d771495f43c556cbc43eebd1bb54d01e8e9
RxSwift: 81470a2074fa8780320ea5fe4102807cb7118178
SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb
SwiftyBeaver: a1f5691458561414bcfab51874b2b7445451602b
Then: 90cd104fd951cec1980a03f57704ad8f784d4d79

PODFILE CHECKSUM: 663c20d2032ae7b20783252253f89842c5bf0b88
PODFILE CHECKSUM: 4981dbb8515f62dbabbccf46f746c9abc4ace50f

COCOAPODS: 1.8.4
COCOAPODS: 1.9.3
4 changes: 2 additions & 2 deletions thereto-ios/thereto-ios.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1013,7 +1013,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.1;
MARKETING_VERSION = 1.1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
Expand Down Expand Up @@ -1143,7 +1143,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.1;
MARKETING_VERSION = 1.1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<key>thereto-ios.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>41</integer>
<integer>44</integer>
</dict>
</dict>
</dict>
Expand Down
31 changes: 31 additions & 0 deletions thereto-ios/thereto-ios/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Firebase
import FBSDKCoreKit
import AlamofireNetworkActivityLogger
import SwiftyBeaver
import FirebaseMessaging

typealias Log = SwiftyBeaver

Expand All @@ -25,6 +26,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
NetworkActivityLogger.shared.level = .debug

initilizeSwiftyBeaver()
initilizeFCM(application: application)

window = UIWindow(frame: UIScreen.main.bounds)
window?.backgroundColor = UIColor.themeColor
Expand Down Expand Up @@ -64,6 +66,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
window?.makeKeyAndVisible()
}


private func initilizeSwiftyBeaver() {
// add log destinations. at least one is needed!
let console = ConsoleDestination() // log to Xcode Console
Expand All @@ -79,5 +82,33 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
Log.addDestination(console)
Log.addDestination(cloud)
}

private func initilizeFCM(application: UIApplication) {
UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]

UNUserNotificationCenter.current().requestAuthorization(options: authOptions,
completionHandler: {_, _ in })
application.registerForRemoteNotifications()
Messaging.messaging().delegate = self
}
}

extension AppDelegate: UNUserNotificationCenterDelegate, MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
UserDefaultsUtil().setFCMToken(token: fcmToken)
UserDefaultsUtil().enableLetterNoti(isEnable: false)
if let userID = UserDefaultsUtil().getUserToken() {
UserService().updateFCMToken(userId: userID, fcmToken: fcmToken)
}
Log.debug("fcmToken: \(fcmToken)")
}

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo

Log.debug(userInfo)
completionHandler([[.alert, .sound]])
}
}
2 changes: 1 addition & 1 deletion thereto-ios/thereto-ios/features/MainVC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class MainVC: UITabBarController {
}

private func fetchAlarm() {
UserService().fetchAlarm(userId: UserDefaultsUtil().getUserToken()) { [weak self] (alarmObservable) in
UserService().fetchAlarm(userId: UserDefaultsUtil().getUserToken()!) { [weak self] (alarmObservable) in
guard let self = self else { return }
alarmObservable.subscribe(onNext: { (alarm) in
switch alarm.type {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ class FriendListViewModel: BaseViewModel {

func fetchFriends() {
self.showLoadingPublisher.onNext(true)
userService.getUserInfo(token: userDefaults.getUserToken()) { [weak self] (userObservable) in
userService.getUserInfo(token: userDefaults.getUserToken()!) { [weak self] (userObservable) in
guard let self = self else { return }
userObservable.subscribe(onNext: { (user) in
self.userService.getFriends(id: self.userDefaults.getUserToken()) { (friendsObservable) in
self.userService.getFriends(id: self.userDefaults.getUserToken()!) { (friendsObservable) in
friendsObservable.subscribe(onNext: { (friends) in
let filterFriends = friends.filter { $0.requestState == .FRIEND }.sorted { (friend1, friend2) -> Bool in
friend1.favorite && !friend2.favorite
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class AddFriendViewModel: BaseViewModel {
friend.sentCount = 0

self.showLoadingPublisher.onNext(true)
userService.requestFriend(id: self.userDefaults.getUserToken(), friend: friend, withAlarm: false) { (observable) in
userService.requestFriend(id: self.userDefaults.getUserToken()!, friend: friend, withAlarm: false) { (observable) in
observable.subscribe(onNext: { (_) in
// 내 친구가 추가되었을때, 친구 필드에도 나를 WAIT 상태로 추가해야합니다.
// 친구 요청 완료한 뒤, 앱 화면 초기화 시켜야합니다.
Expand All @@ -121,7 +121,7 @@ class AddFriendViewModel: BaseViewModel {

func fetchFriend() {
self.showLoadingPublisher.onNext(true)
userService.getFriends(id: userDefaults.getUserToken()) { [weak self] (friendsObservable) in
userService.getFriends(id: userDefaults.getUserToken()!) { [weak self] (friendsObservable) in
guard let self = self else { return }
friendsObservable.subscribe(onNext: { (friendList) in
self.friendListPublisher.onNext(friendList)
Expand All @@ -139,7 +139,7 @@ class AddFriendViewModel: BaseViewModel {

func fetchMyInfo() {
self.showLoadingPublisher.onNext(true)
userService.getUserInfo(token: userDefaults.getUserToken()) { [weak self] (userObservable) in
userService.getUserInfo(token: userDefaults.getUserToken()!) { [weak self] (userObservable) in
guard let self = self else { return }
userObservable.subscribe(onNext: { (user) in
var my2Friend = Friend(user: user)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class FriendControlVC: BaseVC {
}

private func fetchRedDot() {
UserService.fetchRedDot(token: UserDefaultsUtil().getUserToken())
UserService.fetchRedDot(token: UserDefaultsUtil().getUserToken()!)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ class FriendDetailViewModel: BaseViewModel {

input.tapFavorite.withLatestFrom(Observable.combineLatest(output.friend, output.enableFavorite)).bind {[weak self] (friend, isFavorite) in
guard let self = self else { return }
self.userService.favoriteFriend(userId: self.userDefaults.getUserToken(), friendId: friend.id, isFavorite: !isFavorite)
self.userService.favoriteFriend(userId: self.userDefaults.getUserToken()!, friendId: friend.id, isFavorite: !isFavorite)
self.output.enableFavorite.accept((!isFavorite))
}.disposed(by: disposeBag)

input.tapDelete.withLatestFrom(output.friend).bind { [weak self] (friend) in
guard let self = self else { return }
self.output.showLoading.accept(true)
self.userService.deleteFriend(userId: self.userDefaults.getUserToken(), friendId: friend.id) { (observable) in
self.userService.deleteFriend(userId: self.userDefaults.getUserToken()!, friendId: friend.id) { (observable) in
observable.subscribe(onNext: { (_) in
self.output.showLoading.accept(false)
self.output.popup.accept(())
Expand All @@ -58,7 +58,7 @@ class FriendDetailViewModel: BaseViewModel {

func fetchFriend(friendId: String) {
self.output.showLoading.accept(true)
userService.findFriend(userId: self.userDefaults.getUserToken(), friendId: friendId) { [weak self] (friendObservable) in
userService.findFriend(userId: self.userDefaults.getUserToken()!, friendId: friendId) { [weak self] (friendObservable) in
guard let self = self else { return }
friendObservable.subscribe(onNext: { (friend) in
self.output.friend.accept(friend)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,14 @@ class LetterBoxViewModel: BaseViewModel {

getLettersPublisher.bind { [weak self] (_) in
guard let self = self else { return }
let token = self.userDefaults.getUserToken()
let token = self.userDefaults.getUserToken()!

self.showLoadingPublisher.onNext(true)
letterService.getLetters(receiverId: token) { (lettersObservable) in
lettersObservable.subscribe(onNext: { (letters) in
// 튜토리얼카드 삭제하지 않았을 경우에는 튜토리얼 카드 추가
if !userDefaults.isTutorialFinished() {
userService.getUserInfo(token: userDefaults.getUserToken()) { [weak self] (userObservable) in
userService.getUserInfo(token: userDefaults.getUserToken()!) { [weak self] (userObservable) in
guard let self = self else { return }
userObservable.subscribe(onNext: { (user) in
var letters = letters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ class ProfileViewModel: BaseViewModel {
// 메인 화면으로 이동
self.userDefaults.setUserToken(token: user.id)
self.userDefaults.setNormalLaunch(isNormal: true) // 다시 로그인할때는 메인으로 돌아가도록
if let fcmToken = self.userDefaults.getFCMToken() {
self.userService.updateFCMToken(userId: user.id, fcmToken: fcmToken)
}
self.goToMainPublisher.onNext(())
self.showLoadingPublisher.onNext(false)
}, onError: { (error) in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ class SignInViewModel: BaseViewModel {
if isValidated {
self.userDefaults.setUserToken(token: userToken)
self.userDefaults.setNormalLaunch(isNormal: true)
if let fcmToken = self.userDefaults.getFCMToken() {
self.service.updateFCMToken(userId: userToken, fcmToken: fcmToken)
}
self.goToMainPublisher.onNext(())
} else {
self.goToProfilePublisher.onNext((userToken, social))
Expand Down
7 changes: 4 additions & 3 deletions thereto-ios/thereto-ios/features/setup/SetupViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class SetupViewModel: BaseViewModel {
profileImagePublisher.bind { [weak self] (profileImage) in
guard let self = self else { return }
self.showLoadingPublisher.onNext(true)
self.userService.updateProfileURL(userId: userDefaults.getUserToken(), image: profileImage) { (urlObservable) in
self.userService.updateProfileURL(userId: userDefaults.getUserToken()!, image: profileImage) { (urlObservable) in
urlObservable.subscribe(onNext: { (profileURL) in
self.profilePublisher.onNext(profileURL)
self.showLoadingPublisher.onNext(false)
Expand All @@ -64,7 +64,8 @@ class SetupViewModel: BaseViewModel {

logoutPublisher.withLatestFrom(userInfoPublisher).bind { [weak self] (user) in
guard let self = self else { return }
userDefaults.clearUserToken()
self.userService.deleteFCMToken(userId: user.id)
self.userDefaults.clearUserToken()
FirebaseUtil.signOut()

if user.social == .FACEBOOK {
Expand All @@ -76,7 +77,7 @@ class SetupViewModel: BaseViewModel {

func fetchMyInfo() {
showLoadingPublisher.onNext(true)
userService.getUserInfo(token: userDefaults.getUserToken()) { [weak self] (userObservable) in
userService.getUserInfo(token: userDefaults.getUserToken()!) { [weak self] (userObservable) in
guard let self = self else { return }
userObservable.subscribe(onNext: { (user) in
self.userInfoPublisher.onNext(user)
Expand Down
15 changes: 15 additions & 0 deletions thereto-ios/thereto-ios/services/UserService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ protocol UserServiceProtocol {
func fetchAlarm(userId: String, completion: @escaping ((Observable<Alarm>) -> Void))
func insertAlarm(userId: String, type: AlarmType)
func updateProfileURL(userId: String, image: UIImage, completion: @escaping ((Observable<String>) -> Void))
func updateFCMToken(userId: String, fcmToken: String)
func deleteFCMToken(userId: String)
}

struct UserService: UserServiceProtocol{

func updateProfileURL(userId: String, image: UIImage, completion: @escaping ((Observable<String>) -> Void)) {
let storageRef = Storage.storage().reference()
let imagesRef = storageRef.child("profile/\(userId).jpg")
Expand Down Expand Up @@ -251,7 +254,19 @@ struct UserService: UserServiceProtocol{
db.collection("user").document(userId).collection("alarms").addDocument(data: alarm.toDict())
}

func updateFCMToken(userId: String, fcmToken: String) {
Firestore.firestore()
.collection("user")
.document(userId)
.updateData(["fcmToken": fcmToken])
}

func deleteFCMToken(userId: String) {
Firestore.firestore()
.collection("user")
.document(userId)
.updateData(["fcmToken": ""])
}

static func saveUser(user: User, completion: @escaping () -> Void) {
Firestore.firestore().collection("user").document("\(user.id)").setData(user.toDict()) { (error) in
Expand Down
2 changes: 2 additions & 0 deletions thereto-ios/thereto-ios/thereto-ios.entitlements
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
Expand Down
Loading

0 comments on commit 4e39d27

Please sign in to comment.