RASingleton.m 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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. #pragma mark - Location
  91. - (void)setRequiredLocation:(BOOL)requiredLocation {
  92. _requiredLocation = requiredLocation;
  93. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  94. [defaults setBool:_requiredLocation forKey:@"requiredLocation"];
  95. [defaults synchronize];
  96. [self sendRequiredLocationNotification];
  97. }
  98. - (void)loadSavedReuqiredLocation { // 启动的时候
  99. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  100. _requiredLocation = [defaults objectForKey:@"requiredLocation"];
  101. [self sendRequiredLocationNotification];
  102. }
  103. - (void)sendRequiredLocationNotification {
  104. if (_requiredLocation) {
  105. [[NSNotificationCenter defaultCenter] postNotificationName:RANotificationStartLocation object:nil];
  106. } else {
  107. [[NSNotificationCenter defaultCenter] postNotificationName:RANotificationStopLocation object:nil];
  108. }
  109. }
  110. #pragma mark - Utils
  111. - (NSString *)encryptString:(NSString *)str {
  112. if (str == nil) {
  113. return nil;
  114. }
  115. return [AESCrypt encrypt:str password:self.secretKey];
  116. }
  117. - (NSString *)decryptString:(NSString *)str {
  118. if (str == nil) {
  119. return nil;
  120. }
  121. return [AESCrypt decrypt:str password:self.secretKey];
  122. }
  123. #pragma mark - NetworkQueue
  124. - (NSOperationQueue *)networkQueue {
  125. if (!_networkQueue) {
  126. _networkQueue = [[NSOperationQueue alloc] init];
  127. _networkQueue.maxConcurrentOperationCount = 5;
  128. _networkQueue.qualityOfService = NSQualityOfServiceUtility;
  129. }
  130. return _networkQueue;
  131. }
  132. #pragma mark - Backgroud Report Location Permission
  133. - (void)setBackgroundReportType:(RABackgroundReportType)backgroundReportType {
  134. _backgroundReportType = backgroundReportType;
  135. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  136. [defaults setInteger:_backgroundReportType forKey:@"backgroundReportLocationPermissionType"];
  137. [defaults synchronize];
  138. }
  139. - (RABackgroundReportType)backgroundReportType {
  140. if (_backgroundReportType == 0) {
  141. NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
  142. _backgroundReportType = (RABackgroundReportType)[defaults integerForKey:@"backgroundReportLocationPermissionType"];
  143. }
  144. return _backgroundReportType;
  145. }
  146. #pragma mark - Log
  147. - (NSMutableString *)log {
  148. if (!_log) {
  149. _log = [NSMutableString string];
  150. }
  151. return _log;
  152. }
  153. - (void)writeLog:(NSString *)log {
  154. if (log.length) {
  155. [self.log appendFormat:@"\n%@",log];
  156. }
  157. }
  158. - (void)saveLogs {
  159. if (self.log.length > 0) {
  160. NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  161. NSString *logPath = [cacheDir stringByAppendingPathComponent:@"log"];
  162. [self.log writeToFile:logPath atomically:NO encoding:NSUTF8StringEncoding error:nil];
  163. }
  164. }
  165. @end