RASingleton.m 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. });
  23. return singleton;
  24. }
  25. #pragma mark - User
  26. - (NSString *)secretKey {
  27. return _secretKey;
  28. }
  29. - (NSString *)encryptUser {
  30. if (!self.user) {
  31. return nil;
  32. }
  33. return [self encryptString:self.user];
  34. }
  35. - (NSString *)encryptPassword {
  36. if (!self.password) {
  37. return nil;
  38. }
  39. return [self encryptString:self.password];
  40. }
  41. - (void)saveUserInfo {
  42. if (self.user && self.password) {
  43. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  44. [defaults removeObjectForKey:@"user"];
  45. [defaults removeObjectForKey:@"password"];
  46. [defaults setValue:self.encryptUser forKey:@"user"];
  47. [defaults setValue:self.encryptPassword forKey:@"password"];
  48. [defaults setBool:TRUE forKey:@"autologin"];
  49. [defaults synchronize];
  50. }
  51. }
  52. - (NSString *)savedUser {
  53. NSString * user = [self decryptString:[[NSUserDefaults standardUserDefaults] stringForKey:@"user"]];
  54. return user;
  55. }
  56. - (NSString *)savedPassword {
  57. NSString * password = [self decryptString:[[NSUserDefaults standardUserDefaults] stringForKey:@"password"]];
  58. return password;
  59. }
  60. - (void)loginUser:(NSString *)user password:(NSString *)password {
  61. _user = user;
  62. _password = password;
  63. [self saveUserInfo];
  64. [self bindUserWithNotificationToken];
  65. }
  66. - (BOOL)autoLogin {
  67. _user = [self savedUser];
  68. _password = [self savedPassword];
  69. return _user.length && _password.length;
  70. }
  71. - (void)setNotificationToken:(NSString *)notificationToken {
  72. _notificationToken = notificationToken;
  73. [self bindUserWithNotificationToken];
  74. }
  75. - (void)bindUserWithNotificationToken {
  76. if (_user.length && _password.length && _notificationToken.length) {
  77. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  78. [RADataProvider bindNitificationToken:self.notificationToken];
  79. });
  80. }
  81. }
  82. - (void)logout {
  83. _user = nil;
  84. _password = nil;
  85. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  86. [defaults removeObjectForKey:@"user"];
  87. [defaults removeObjectForKey:@"password"];
  88. [defaults synchronize];
  89. }
  90. - (void)changePassword:(NSString *)password {
  91. _password = password;
  92. [self saveUserInfo];
  93. }
  94. #pragma mark - Location
  95. - (void)setRequiredLocation:(BOOL)requiredLocation {
  96. _requiredLocation = requiredLocation;
  97. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  98. [defaults setBool:_requiredLocation forKey:@"requiredLocation"];
  99. [defaults synchronize];
  100. [self sendRequiredLocationNotification];
  101. }
  102. - (void)loadSavedReuqiredLocation { // 启动的时候
  103. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  104. _requiredLocation = [[defaults objectForKey:@"requiredLocation"] boolValue];
  105. [self sendRequiredLocationNotification];
  106. }
  107. - (void)sendRequiredLocationNotification {
  108. if (_requiredLocation) {
  109. [[NSNotificationCenter defaultCenter] postNotificationName:RANotificationStartLocation object:nil];
  110. } else {
  111. [[NSNotificationCenter defaultCenter] postNotificationName:RANotificationStopLocation object:nil];
  112. }
  113. }
  114. #pragma mark - Utils
  115. - (NSString *)encryptString:(NSString *)str {
  116. if (str == nil) {
  117. return nil;
  118. }
  119. return [AESCrypt encrypt:str password:self.secretKey];
  120. }
  121. - (NSString *)decryptString:(NSString *)str {
  122. if (str == nil) {
  123. return nil;
  124. }
  125. return [AESCrypt decrypt:str password:self.secretKey];
  126. }
  127. #pragma mark - NetworkQueue
  128. - (NSOperationQueue *)networkQueue {
  129. if (!_networkQueue) {
  130. _networkQueue = [[NSOperationQueue alloc] init];
  131. _networkQueue.maxConcurrentOperationCount = 5;
  132. _networkQueue.qualityOfService = NSQualityOfServiceUtility;
  133. }
  134. return _networkQueue;
  135. }
  136. #pragma mark - Backgroud Report Location Permission
  137. - (void)setBackgroundReportType:(RABackgroundReportType)backgroundReportType {
  138. _backgroundReportType = backgroundReportType;
  139. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  140. [defaults setInteger:_backgroundReportType forKey:@"backgroundReportLocationPermissionType"];
  141. [defaults synchronize];
  142. }
  143. - (RABackgroundReportType)backgroundReportType {
  144. if (_backgroundReportType == 0) {
  145. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  146. _backgroundReportType = (RABackgroundReportType)[defaults integerForKey:@"backgroundReportLocationPermissionType"];
  147. }
  148. return _backgroundReportType;
  149. }
  150. #pragma mark - Log
  151. - (NSMutableString *)log {
  152. if (!_log) {
  153. _log = [NSMutableString string];
  154. }
  155. return _log;
  156. }
  157. - (void)writeLog:(NSString *)log {
  158. if (log.length) {
  159. [self.log appendFormat:@"\n%@",log];
  160. }
  161. }
  162. - (void)saveLogs {
  163. if (self.log.length > 0) {
  164. NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  165. NSString *logPath = [cacheDir stringByAppendingPathComponent:@"log"];
  166. [self.log writeToFile:logPath atomically:NO encoding:NSUTF8StringEncoding error:nil];
  167. }
  168. }
  169. @end