ProfileManager_Mock.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //
  2. // profileManager.swift
  3. // trtcScenesDemo
  4. //
  5. // Created by xcoderliu on 12/23/19.
  6. // Copyright © 2019 xcoderliu. All rights reserved.
  7. //
  8. import UIKit
  9. import Alamofire
  10. import ImSDK_Plus
  11. import TUICore
  12. import TUIRoomKit
  13. @objc class LoginResultModel: NSObject, Codable {
  14. @objc var token: String
  15. @objc var phone: String
  16. @objc var name: String
  17. @objc var avatar: String
  18. @objc var userId: String
  19. @objc var userSig: String = ""
  20. init(userID: String) {
  21. userId = userID
  22. token = userID
  23. phone = userID
  24. name = userID
  25. userSig = GenerateTestUserSig.genTestUserSig(identifier: userID)
  26. avatar = "https://imgcache.qq.com/qcloud/public/static//avatar1_100.20191230.png"
  27. super.init()
  28. }
  29. }
  30. @objc public class ProfileManager: NSObject {
  31. @objc public static let shared = ProfileManager()
  32. private override init() {}
  33. var sessionId: String = ""
  34. @objc var curUserModel: LoginResultModel? = nil
  35. @objc public func autoLogin(success: @escaping ()->Void,
  36. failed: @escaping (_ error: String)->Void) -> Bool {
  37. let tokenKey = "com.tencent.trtcScences.demo"
  38. if let cacheData = UserDefaults.standard.object(forKey: tokenKey) as? Data {
  39. if let cacheUser = try? JSONDecoder().decode(LoginResultModel.self, from: cacheData) {
  40. curUserModel = cacheUser
  41. let fail: (_ error: String)->Void = { err in
  42. failed(err)
  43. UserDefaults.standard.set(nil, forKey: tokenKey)
  44. }
  45. login(phone: curUserModel?.userId ?? "", name: curUserModel?.name ?? "", success: success, failed: fail, auto: true)
  46. return true
  47. }
  48. }
  49. return false
  50. }
  51. @objc public func login(phone: String, name: String, success: @escaping ()->Void,
  52. failed: ((_ error: String) -> Void)? = nil , auto: Bool = false) {
  53. let phoneValue = phone
  54. if !auto {
  55. assert(phoneValue.count > 0)
  56. curUserModel = LoginResultModel(userID: phoneValue)
  57. }
  58. // cache data
  59. let tokenKey = "com.tencent.trtcScences.demo"
  60. do {
  61. let cacheData = try JSONEncoder().encode(curUserModel)
  62. UserDefaults.standard.set(cacheData, forKey: tokenKey)
  63. } catch {
  64. print("Save Failed")
  65. }
  66. success()
  67. }
  68. func localizeUserModel() {
  69. let tokenKey = "com.tencent.trtcScences.demo"
  70. do {
  71. let cacheData = try JSONEncoder().encode(curUserModel)
  72. UserDefaults.standard.set(cacheData, forKey: tokenKey)
  73. } catch {
  74. print("Save Failed")
  75. }
  76. }
  77. @objc public func setNickName(name: String, success: @escaping ()->Void,
  78. failed: @escaping (_ error: String)->Void) {
  79. let userInfo = V2TIMUserFullInfo()
  80. userInfo.nickName = name
  81. curUserModel?.name = name
  82. V2TIMManager.sharedInstance()?.setSelfInfo(info: userInfo, succ: {
  83. success()
  84. debugPrint("set profile success")
  85. }, fail: { (code, desc) in
  86. failed(desc ?? "")
  87. debugPrint("set profile failed.")
  88. })
  89. }
  90. @objc func IMLogin(userSig: String, success: @escaping ()->Void, failed: @escaping (_ error: String)->Void) {
  91. guard let userID = curUserModel?.userId else {
  92. failed("userID wrong")
  93. return
  94. }
  95. let user = String(userID)
  96. TUILogin.login(Int32(SDKAppID), userID: user, userSig: userSig) {
  97. debugPrint("login success")
  98. V2TIMManager.sharedInstance()?.getUsersInfo([userID], succ: { [weak self] (infos) in
  99. guard let `self` = self else { return }
  100. if let info = infos?.first {
  101. self.curUserModel?.avatar = info.faceURL ?? ""
  102. self.curUserModel?.name = info.nickName ?? ""
  103. success()
  104. }
  105. else {
  106. failed("")
  107. }
  108. }, fail: { (code, err) in
  109. failed(err ?? "")
  110. debugPrint("get user info failed, code:\(code), error: \(err ?? "nil")")
  111. })
  112. } fail: { (code, errorDes) in
  113. failed(errorDes ?? "")
  114. debugPrint("login failed, code:\(code), error: \(errorDes ?? "nil")")
  115. }
  116. }
  117. @objc func curUserID() -> String? {
  118. guard let userID = curUserModel?.userId else {
  119. return nil
  120. }
  121. return userID
  122. }
  123. @objc public func removeLoginCache() {
  124. let tokenKey = "com.tencent.trtcScences.demo"
  125. UserDefaults.standard.set(nil, forKey: tokenKey)
  126. }
  127. @objc public func curUserSig() -> String {
  128. return curUserModel?.userSig ?? ""
  129. }
  130. @objc func synchronizUserInfo() {
  131. guard let userModel = curUserModel else {
  132. return
  133. }
  134. let userInfo = V2TIMUserFullInfo()
  135. userInfo.nickName = userModel.name
  136. userInfo.faceURL = userModel.avatar
  137. V2TIMManager.sharedInstance()?.setSelfInfo(info: userInfo, succ: {
  138. debugPrint("set profile success")
  139. }, fail: { (code, desc) in
  140. debugPrint("set profile failed.")
  141. })
  142. }
  143. }