ProfileManager_Mock.swift 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. @objc class LoginResultModel: NSObject, Codable {
  13. @objc var token: String
  14. @objc var phone: String
  15. @objc var name: String
  16. @objc var avatar: String
  17. @objc var userId: String
  18. @objc var userSig: String = ""
  19. public init(userID: String) {
  20. userId = userID
  21. token = userID
  22. phone = userID
  23. name = userID
  24. userSig = GenerateTestUserSig.genTestUserSig(identifier: userID)
  25. avatar = "https://imgcache.qq.com/qcloud/public/static//avatar1_100.20191230.png"
  26. super.init()
  27. }
  28. }
  29. @objc public class ProfileManager: NSObject {
  30. @objc public static let shared = ProfileManager()
  31. private override init() {}
  32. var sessionId: String = ""
  33. @objc var curUserModel: LoginResultModel? = nil
  34. /// 自动登录
  35. /// - Parameters:
  36. /// - success: 成功回调
  37. /// - failed: 失败回调
  38. /// - error: 错误信息
  39. /// - Returns:是否可以自动登录
  40. @objc public func autoLogin(success: @escaping ()->Void,
  41. failed: @escaping (_ error: String)->Void) -> Bool {
  42. let tokenKey = "com.lancoo.wiseCampusApp"
  43. if let cacheData = UserDefaults.standard.object(forKey: tokenKey) as? Data {
  44. if let cacheUser = try? JSONDecoder().decode(LoginResultModel.self, from: cacheData) {
  45. curUserModel = cacheUser
  46. let fail: (_ error: String)->Void = { err in
  47. failed(err)
  48. UserDefaults.standard.set(nil, forKey: tokenKey)
  49. }
  50. login(phone: curUserModel?.userId ?? "", code: "", success: success, failed: fail, auto: true)
  51. return true
  52. }
  53. }
  54. return false
  55. }
  56. /// 登录
  57. /// - Parameters:
  58. /// - success: 登录成功
  59. /// - failed: 登录失败
  60. /// - error: 错误信息
  61. @objc public func login(phone: String, code: String, success: @escaping ()->Void,
  62. failed: ((_ error: String) -> Void)? = nil , auto: Bool = false) {
  63. let userInfo = phone.toDictionary()
  64. if !auto {
  65. let userId = userInfo["userId"] as! String
  66. assert(userId.count > 0)
  67. let userName = userInfo["userName"] as! String
  68. let avatar = userInfo["avatar"] as! String
  69. curUserModel = LoginResultModel(userID: userId)
  70. curUserModel?.name = userName
  71. curUserModel?.avatar = avatar
  72. }
  73. // cache data
  74. let tokenKey = "com.lancoo.wiseCampusApp"
  75. do {
  76. let cacheData = try JSONEncoder().encode(curUserModel)
  77. UserDefaults.standard.set(cacheData, forKey: tokenKey)
  78. } catch {
  79. print("Save Failed")
  80. }
  81. success()
  82. }
  83. /// 设置昵称
  84. /// - Parameters:
  85. /// - name: 昵称
  86. /// - success: 成功回调
  87. /// - failed: 失败回调
  88. /// - error: 错误信息
  89. @objc public func setNickName(name: String, success: @escaping ()->Void,
  90. failed: @escaping (_ error: String)->Void) {
  91. let userInfo = V2TIMUserFullInfo()
  92. let tokenKey = "com.lancoo.wiseCampusApp"
  93. if let cacheData = UserDefaults.standard.object(forKey: tokenKey) as? Data {
  94. if let cacheUser = try? JSONDecoder().decode(LoginResultModel.self, from: cacheData) {
  95. curUserModel = cacheUser
  96. userInfo.faceURL = curUserModel?.avatar
  97. userInfo.nickName = curUserModel?.name
  98. }
  99. }
  100. print("login lixiantuisong success userInfo:\(userInfo)")
  101. V2TIMManager.sharedInstance()?.setSelfInfo(userInfo, succ: {
  102. success()
  103. debugPrint("set profile success")
  104. }, fail: { (code, desc) in
  105. failed(desc ?? "")
  106. debugPrint("set profile failed.")
  107. })
  108. }
  109. /// IM 登录当前用户
  110. /// - Parameters:
  111. /// - success: 成功
  112. /// - failed: 失败
  113. @objc func IMLogin(userSig: String, success: @escaping ()->Void, failed: @escaping (_ error: String)->Void) {
  114. guard let userID = curUserModel?.userId else {
  115. failed("userID wrong")
  116. return
  117. }
  118. let user = String(userID)
  119. TUILogin.login(Int32(SDKAPPID), userID: user, userSig: userSig) {
  120. debugPrint("TUIlogin success")
  121. V2TIMManager.sharedInstance()?.getUsersInfo([userID], succ: { [weak self] (infos) in
  122. guard let `self` = self else { return }
  123. if let info = infos?.first {
  124. self.curUserModel?.avatar = info.faceURL ?? ""
  125. self.curUserModel?.name = info.nickName ?? ""
  126. success()
  127. }
  128. else {
  129. failed("")
  130. }
  131. }, fail: { (code, err) in
  132. failed(err ?? "")
  133. debugPrint("get user info failed, code:\(code), error: \(err ?? "nil")")
  134. })
  135. } fail: { code, errorDes in
  136. failed(errorDes ?? "")
  137. debugPrint("login failed, code:\(code), error: \(errorDes ?? "nil")")
  138. }
  139. }
  140. @objc func curUserID() -> String? {
  141. guard let userID = curUserModel?.userId else {
  142. return nil
  143. }
  144. return userID
  145. }
  146. @objc public func removeLoginCache() {
  147. let tokenKey = "com.lancoo.wiseCampusApp"
  148. UserDefaults.standard.set(nil, forKey: tokenKey)
  149. }
  150. @objc public func curUserSig() -> String {
  151. return curUserModel?.userSig ?? ""
  152. }
  153. @objc func synchronizUserInfo() {
  154. guard let userModel = curUserModel else {
  155. return
  156. }
  157. let userInfo = V2TIMUserFullInfo()
  158. userInfo.nickName = userModel.name
  159. userInfo.faceURL = userModel.avatar
  160. V2TIMManager.sharedInstance()?.setSelfInfo(userInfo, succ: {
  161. debugPrint("set profile success")
  162. }, fail: { (code, desc) in
  163. debugPrint("set profile failed.")
  164. })
  165. }
  166. }