Няма описание

FKUserManager.m 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. //
  2. // ApplicationModel.m
  3. // FirstLink
  4. //
  5. // Created by unicode on 14-9-28.
  6. // Copyright (c) 2014年 FirstLink. All rights reserved.
  7. //
  8. #import "FKUserManager.h"
  9. #import "UserDefaultManager.h"
  10. #import <UICKeyChainStore.h>
  11. @interface FKUserManager ()
  12. @property (nonatomic, strong) User* user;
  13. @property (nonatomic, strong) UICKeyChainStore *keychain;
  14. @end
  15. @implementation FKUserManager
  16. + (FKUserManager *)sharedManager {
  17. static FKUserManager *sharedUserManagerInstance = nil;
  18. static dispatch_once_t once_token;
  19. dispatch_once(&once_token, ^{
  20. sharedUserManagerInstance = [[self alloc] init];
  21. });
  22. return sharedUserManagerInstance;
  23. }
  24. - (instancetype)init {
  25. self = [super init];
  26. if (self) {
  27. _keychain = [UICKeyChainStore keyChainStoreWithService:@"com.firstlink.duoshoubang.mobile"];
  28. }
  29. return self;
  30. }
  31. #pragma mark - User
  32. + (NSString*)userArchivePath {
  33. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
  34. NSString *homePath = [paths objectAtIndex:0];
  35. return [homePath stringByAppendingPathComponent:@"user.archive"];
  36. }
  37. - (User*)unarchiveUser {
  38. User *user = [NSKeyedUnarchiver unarchiveObjectWithFile:[FKUserManager userArchivePath]];
  39. return user;
  40. }
  41. - (User*)user {
  42. if (_user != nil) {
  43. return _user;
  44. } else {
  45. // 为兼容归档文件向kechain迁移
  46. NSFileManager *manager = [NSFileManager defaultManager];
  47. if ([manager fileExistsAtPath:[FKUserManager userArchivePath]]) {
  48. _user = [[FKUserManager sharedManager] unarchiveUser];
  49. [manager removeItemAtPath:[FKUserManager userArchivePath] error:nil];
  50. [self saveUser:_user];
  51. } else {
  52. _user = [[User alloc] init];
  53. _user.isNew = self.keychain[kIsNew];
  54. _user.headurl = self.keychain[kHeadURL];
  55. _user.mobile = self.keychain[kMobile];
  56. _user.nickName = self.keychain[kNickName];
  57. _user.status = self.keychain[kStatus];
  58. _user.level = self.keychain[kLevel];
  59. _user.token = self.keychain[kToken];
  60. _user.userID = self.keychain[kUserID];
  61. _user.introduce = self.keychain[kIntroduce];
  62. NSString *type = self.keychain[kLoginType];
  63. if (type.length == 0) {
  64. _user.lastLoginType = UserLoginTypeMobile;
  65. } else {
  66. _user.lastLoginType = (UserLoginType)[type intValue];
  67. }
  68. }
  69. }
  70. return _user;
  71. }
  72. - (BOOL)saveUser:(User *)user {
  73. _user = [user mutableCopy];
  74. self.keychain[kIsNew] = _user.isNew;
  75. self.keychain[kHeadURL] = _user.headurl;
  76. self.keychain[kMobile] = _user.mobile;
  77. self.keychain[kNickName] = _user.nickName;
  78. self.keychain[kStatus] = _user.status;
  79. self.keychain[kLevel] = _user.level;
  80. self.keychain[kToken] = _user.token;
  81. self.keychain[kUserID] = _user.userID;
  82. self.keychain[kIntroduce] = _user.introduce;
  83. self.keychain[kLoginType] = [NSString stringWithFormat:@"%@", @(_user.lastLoginType)];
  84. return TRUE;
  85. }
  86. - (BOOL)clearUser {
  87. _user = nil;
  88. self.keychain[kIsNew] = nil;
  89. self.keychain[kHeadURL] = nil;
  90. self.keychain[kMobile] = nil;
  91. self.keychain[kNickName] = nil;
  92. self.keychain[kStatus] = nil;
  93. self.keychain[kLevel] = nil;
  94. self.keychain[kToken] = nil;
  95. self.keychain[kUserID] = nil;
  96. self.keychain[kIntroduce] = nil;
  97. self.keychain[kLoginType] = nil;
  98. NSFileManager *manager = [NSFileManager defaultManager];
  99. if ([manager fileExistsAtPath:[FKUserManager userArchivePath]]) {
  100. [manager removeItemAtPath:[FKUserManager userArchivePath] error:nil];
  101. }
  102. return TRUE;
  103. }
  104. + (BOOL)isUserLogin {
  105. User *user = [FKUserManager sharedManager].user;
  106. if (user == nil || user.token == nil) {
  107. return FALSE;
  108. }
  109. return TRUE;
  110. }
  111. - (ApplicationMode)applicationMode {
  112. if ([FKUserManager isUserLogin]) {
  113. return ApplicationModeLogin;
  114. }
  115. return ApplicationModeVisitor;
  116. }
  117. - (BOOL)localLogout {
  118. User *user = [[User alloc] init];
  119. user.mobile = self.user.mobile;
  120. user.nickName = self.user.nickName;
  121. user.headurl = self.user.headurl;
  122. user.lastLoginType = self.user.lastLoginType;
  123. [self saveUser:user];
  124. [SystemUtil asyncRequestUserAuthority];
  125. return NO;
  126. }
  127. + (void)remoteLogout:(void (^)(MSGHeader *, id))success
  128. failure:(void (^)(MSGHeader *, NSError *))failure {
  129. NSString *URLString = [NSString stringWithFormat:@"%@/link-site/api/user/logout.json?d_id=%@&umtk=%@",
  130. [[FKServerUtil sharedInstance] apiServer],
  131. [FLStringHelper replaceNilWithEmpty:[SystemUtil getIdentifierForVendor]],
  132. [[UserDefaultManager sharedManager] getUserDefaultObject:REMOTE_NOTIFICATION_TOKEN]
  133. ];
  134. FLDataCenter *dataCenter = [FLDataCenter sharedDataCenter];
  135. [dataCenter POST:URLString parameters:[FLRequestHelper commonParamater]
  136. success:^(MSGHeader *header, id responseObject) {
  137. if ([header.code intValue] == RESPONSE_MSG_NORMAL) {
  138. success(header, responseObject);
  139. } else {
  140. success(header, responseObject);
  141. }
  142. } failure:^(MSGHeader *header, NSError *error) {
  143. failure(header, error);
  144. }];
  145. }
  146. @end