RASingleton.m 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. //
  2. // RASingleton.m
  3. // Apex And Drivers
  4. //
  5. // Created by Jack on 2018/6/6.
  6. // Copyright © 2018年 USAI. All rights reserved.
  7. //
  8. #import "RASingleton.h"
  9. static RASingleton *singleton;
  10. @interface RASingleton ()
  11. @property (nonatomic,strong) NSMutableString *log;
  12. @end
  13. @implementation RASingleton {
  14. NSString *_secretKey;
  15. }
  16. @synthesize backgroundReportType = _backgroundReportType;
  17. + (instancetype)sharedInstance {
  18. static dispatch_once_t tocken;
  19. dispatch_once(&tocken, ^{
  20. singleton = [[RASingleton alloc] init];
  21. singleton->_secretKey = @"usai";
  22. singleton->_savePassword = [[[NSUserDefaults standardUserDefaults] objectForKey:@"savePassword"] boolValue];
  23. });
  24. return singleton;
  25. }
  26. - (void)setSavePassword:(BOOL)savePassword {
  27. _savePassword = savePassword;
  28. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  29. [defaults setObject:@(_savePassword) forKey:@"savePassword"];
  30. }
  31. #pragma mark - User
  32. - (NSString *)secretKey {
  33. return _secretKey;
  34. }
  35. - (NSString *)encryptUser {
  36. if (!self.user) {
  37. return nil;
  38. }
  39. return [self encryptString:self.user];
  40. }
  41. - (NSString *)encryptPassword {
  42. if (!self.password) {
  43. return nil;
  44. }
  45. return [self encryptString:self.password];
  46. }
  47. - (void)saveUserInfo {
  48. if (self.user && self.password) {
  49. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  50. [defaults removeObjectForKey:@"user"];
  51. [defaults removeObjectForKey:@"password"];
  52. [defaults removeObjectForKey:@"firstName"];
  53. [defaults setValue:self.encryptUser forKey:@"user"];
  54. [defaults setValue:self.encryptPassword forKey:@"password"];
  55. [defaults setObject:self.firstName forKey:@"firstName"];
  56. [defaults setBool:TRUE forKey:@"autologin"];
  57. [defaults synchronize];
  58. }
  59. }
  60. - (NSString *)savedUser {
  61. NSString * user = [self decryptString:[[NSUserDefaults standardUserDefaults] stringForKey:@"user"]];
  62. return user;
  63. }
  64. - (NSString *)savedPassword {
  65. NSString * password = [self decryptString:[[NSUserDefaults standardUserDefaults] stringForKey:@"password"]];
  66. return password;
  67. }
  68. - (NSString *)savedFirstName {
  69. return [[NSUserDefaults standardUserDefaults] stringForKey:@"firstName"];
  70. }
  71. - (void)loginUser:(NSString *)user password:(NSString *)password firstName:(NSString *)firstName {
  72. _user = user;
  73. _password = password;
  74. _firstName = firstName;
  75. [self saveUserInfo];
  76. [self bindUserWithNotificationToken];
  77. [self setShouldAutoLogin:YES];
  78. }
  79. - (BOOL)autoLogin {
  80. _user = [self savedUser];
  81. _password = [self savedPassword];
  82. _firstName = [self savedFirstName];
  83. if ([self shouldAutoLogin]) {
  84. return _user.length && _password.length;
  85. }
  86. return NO;
  87. }
  88. - (void)setNotificationToken:(NSString *)notificationToken {
  89. _notificationToken = notificationToken;
  90. [self bindUserWithNotificationToken];
  91. }
  92. - (void)bindUserWithNotificationToken {
  93. if (_user.length && _password.length && _notificationToken.length) {
  94. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  95. [RADataProvider bindNotificationToken:self.notificationToken];
  96. });
  97. }
  98. }
  99. - (void)logout {
  100. _user = nil;
  101. _password = nil;
  102. _firstName = nil;
  103. if (!self.savePassword) {
  104. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  105. [defaults removeObjectForKey:@"user"];
  106. [defaults removeObjectForKey:@"password"];
  107. [defaults removeObjectForKey:@"firstName"];
  108. [defaults synchronize];
  109. }
  110. self.requiredBackgroundLocation = NO;
  111. [self setShouldAutoLogin:NO];
  112. }
  113. - (void)changePassword:(NSString *)password {
  114. _password = password;
  115. [self saveUserInfo];
  116. }
  117. - (BOOL)shouldAutoLogin {
  118. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  119. return [defaults boolForKey:@"autoLogin"];
  120. }
  121. - (void)setShouldAutoLogin:(BOOL)login {
  122. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  123. [defaults setBool:login forKey:@"autoLogin"];
  124. [defaults synchronize];
  125. }
  126. #pragma mark - Location
  127. - (void)setRequiredBackgroundLocation:(BOOL)requiredLocation {
  128. _requiredBackgroundLocation = requiredLocation;
  129. // NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  130. // [defaults setBool:_requiredBackgroundLocation forKey:@"requiredBackgroundLocation"];
  131. // [defaults synchronize];
  132. [self sendRequiredLocationNotification];
  133. }
  134. - (void)loadSavedReuqiredLocation { // 启动的时候
  135. // NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  136. // _requiredLocation = [[defaults objectForKey:@"requiredBackgroundLocation"] boolValue];
  137. // [self sendRequiredLocationNotification];
  138. }
  139. - (void)sendRequiredLocationNotification {
  140. if (_requiredBackgroundLocation) {
  141. [[NSNotificationCenter defaultCenter] postNotificationName:RANotificationStartBackgroundLocation object:nil];
  142. } else {
  143. [[NSNotificationCenter defaultCenter] postNotificationName:RANotificationStopBackgroundLocation object:nil];
  144. }
  145. }
  146. #pragma mark - Utils
  147. - (NSString *)encryptString:(NSString *)str {
  148. if (str == nil) {
  149. return nil;
  150. }
  151. return [AESCrypt encrypt:str password:self.secretKey];
  152. }
  153. - (NSString *)decryptString:(NSString *)str {
  154. if (str == nil) {
  155. return nil;
  156. }
  157. return [AESCrypt decrypt:str password:self.secretKey];
  158. }
  159. #pragma mark - NetworkQueue
  160. - (NSOperationQueue *)networkQueue {
  161. if (!_networkQueue) {
  162. _networkQueue = [[NSOperationQueue alloc] init];
  163. _networkQueue.maxConcurrentOperationCount = 5;
  164. _networkQueue.qualityOfService = NSQualityOfServiceUtility;
  165. }
  166. return _networkQueue;
  167. }
  168. #pragma mark - Backgroud Report Location Permission
  169. - (void)setBackgroundReportType:(RABackgroundReportType)backgroundReportType {
  170. _backgroundReportType = backgroundReportType;
  171. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  172. [defaults setInteger:_backgroundReportType forKey:@"backgroundReportLocationPermissionType"];
  173. [defaults synchronize];
  174. }
  175. - (RABackgroundReportType)backgroundReportType {
  176. if (_backgroundReportType == 0) {
  177. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  178. _backgroundReportType = (RABackgroundReportType)[defaults integerForKey:@"backgroundReportLocationPermissionType"];
  179. }
  180. return _backgroundReportType;
  181. }
  182. #pragma mark - Log
  183. - (NSMutableString *)log {
  184. if (!_log) {
  185. _log = [NSMutableString string];
  186. }
  187. return _log;
  188. }
  189. - (void)writeLog:(NSString *)log {
  190. if (log.length) {
  191. [self.log appendFormat:@"\n%@",log];
  192. }
  193. }
  194. - (void)saveLogs {
  195. if (self.log.length > 0) {
  196. NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  197. NSString *logPath = [cacheDir stringByAppendingPathComponent:@"log"];
  198. [self.log writeToFile:logPath atomically:NO encoding:NSUTF8StringEncoding error:nil];
  199. }
  200. }
  201. @end