ATUnityUtilities.m 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. //
  2. // ATUnityUtilities.m
  3. // UnityContainer
  4. //
  5. // Created by Martin Lau on 14/08/2018.
  6. // Copyright © 2018 Martin Lau. All rights reserved.
  7. //
  8. #import "ATUnityUtilities.h"
  9. NSString *const kATUnityUtilitiesInterstitialImpressionNotification = @"com.anythink.kATUnityUtilitiesInterstitialImpressionNotification";
  10. NSString *const kATUnityUtilitiesInterstitialCloseNotification = @"kATUnityUtilitiesInterstitialCloseNotification";
  11. NSString *const kATUnityUtilitiesRewardedVideoImpressionNotification = @"kATUnityUtilitiesRewardedVideoImpressionNotification";
  12. NSString *const kATUnityUtilitiesRewardedVideoCloseNotification = @"kATUnityUtilitiesRewardedVideoCloseNotification";
  13. NSString *const kATUnityUtilitiesAdShowingExtraScenarioKey = @"Scenario";
  14. NSString *const kATUnityUserExtraDataKey = @"user_load_extra_data";
  15. NSString *const kATUnityCheckLoadModelAdInfoKey = @"adInfo";
  16. @implementation ATUnityUtilities
  17. +(BOOL)isEmpty:(id)object {
  18. return (object == nil || [object isKindOfClass:[NSNull class]] || ([object respondsToSelector:@selector(length)] && [(NSData *)object length] == 0) || ([object respondsToSelector:@selector(count)] && [(NSArray *)object count] == 0));
  19. }
  20. @end
  21. @implementation NSDictionary (KAKit)
  22. -(NSString*) jsonString {
  23. @try {
  24. // can not serialization, return a value is null array string
  25. if (![NSJSONSerialization isValidJSONObject:self]) {
  26. return @"[]";
  27. }
  28. } @catch (NSException *exception) {
  29. return @"[]";
  30. } @finally {}
  31. NSError *error;
  32. NSData *jsonData;
  33. @try {
  34. jsonData = [NSJSONSerialization dataWithJSONObject:self
  35. options:kNilOptions
  36. error:&error];
  37. } @catch (NSException *exception) {
  38. return @"{}";
  39. } @finally {}
  40. if (!jsonData) {
  41. return @"{}";
  42. } else {
  43. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  44. }
  45. }
  46. - (NSString*)jsonFilterString {
  47. NSError *error;
  48. NSData *jsonData;
  49. NSMutableDictionary *extraDictM = [NSMutableDictionary dictionaryWithDictionary:self[kATUnityCheckLoadModelAdInfoKey]];
  50. NSMutableDictionary *extraDataTemp = [NSMutableDictionary dictionary];
  51. NSMutableDictionary *extraDataDictM = [NSMutableDictionary dictionaryWithDictionary:self[kATUnityCheckLoadModelAdInfoKey][kATUnityUserExtraDataKey]];
  52. for (NSString *key in extraDataDictM.allKeys) {
  53. if ([extraDataDictM[key] isKindOfClass:[NSString class]] || [extraDataDictM[key] isKindOfClass:[NSNumber class]]) {
  54. [extraDataTemp setValue:extraDataDictM[key] forKey:key];
  55. }
  56. }
  57. if ([extraDataTemp count]) {
  58. [extraDictM setValue:extraDataTemp forKey:kATUnityUserExtraDataKey];
  59. } else {
  60. [extraDictM removeObjectForKey:kATUnityUserExtraDataKey];
  61. }
  62. NSMutableDictionary *jsonDictM = [NSMutableDictionary dictionaryWithDictionary:self];
  63. [jsonDictM setValue:extraDictM forKey:kATUnityCheckLoadModelAdInfoKey];
  64. @try {
  65. jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictM
  66. options:kNilOptions
  67. error:&error];
  68. } @catch (NSException *exception) {
  69. return @"{}";
  70. } @finally {}
  71. if (!jsonData) {
  72. return @"{}";
  73. } else {
  74. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  75. }
  76. }
  77. -(BOOL)containsObjectForKey:(id)key {
  78. return [self.allKeys containsObject:key];
  79. }
  80. @end
  81. @implementation NSArray (KAKit)
  82. -(NSString*) jsonString {
  83. NSError *error;
  84. NSData *jsonData;
  85. @try {
  86. jsonData = [NSJSONSerialization dataWithJSONObject:self
  87. options:kNilOptions
  88. error:&error];
  89. } @catch (NSException *exception) {
  90. return @"[]";
  91. } @finally {}
  92. if (!jsonData) {
  93. return @"[]";
  94. } else {
  95. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  96. }
  97. }
  98. - (NSString*)jsonFilterString {
  99. NSError *error;
  100. NSData *jsonData;
  101. NSMutableArray *filterArrayM = [NSMutableArray arrayWithCapacity:self.count];
  102. for (NSDictionary *adTempDict in self) {
  103. NSMutableDictionary *extraDictM = [NSMutableDictionary dictionaryWithDictionary:adTempDict];
  104. NSMutableDictionary *extraDataTemp = [NSMutableDictionary dictionary];
  105. NSMutableDictionary *extraDataDictM = [NSMutableDictionary dictionaryWithDictionary:adTempDict[kATUnityUserExtraDataKey]];
  106. for (NSString *key in extraDataDictM.allKeys) {
  107. if ([extraDataDictM[key] isKindOfClass:[NSString class]] || [extraDataDictM[key] isKindOfClass:[NSNumber class]]) {
  108. [extraDataTemp setValue:extraDataDictM[key] forKey:key];
  109. }
  110. }
  111. if ([extraDataTemp count]) {
  112. [extraDictM setValue:extraDataTemp forKey:kATUnityUserExtraDataKey];
  113. } else {
  114. [extraDictM removeObjectForKey:kATUnityUserExtraDataKey];
  115. }
  116. [filterArrayM addObject:extraDictM];
  117. }
  118. @try {
  119. jsonData = [NSJSONSerialization dataWithJSONObject:filterArrayM
  120. options:kNilOptions
  121. error:&error];
  122. } @catch (NSException *exception) {
  123. return @"[]";
  124. } @finally {}
  125. if (!jsonData) {
  126. return @"[]";
  127. } else {
  128. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  129. }
  130. }
  131. @end
  132. @implementation NSData(ATKit)
  133. +(instancetype) dataWithUTF8String:(const char*)string {
  134. return [[NSString stringWithUTF8String:string] dataUsingEncoding:NSUTF8StringEncoding];
  135. }
  136. @end
  137. @implementation UIColor (Hex)
  138. // 透明度固定为1,以0x开头的十六进制转换成的颜色
  139. + (UIColor*) colorWithHex:(long)hexColor;
  140. {
  141. return [UIColor colorWithHex:hexColor alpha:1.];
  142. }
  143. // 0x开头的十六进制转换成的颜色,透明度可调整
  144. + (UIColor *)colorWithHex:(long)hexColor alpha:(float)opacity
  145. {
  146. float red = ((float)((hexColor & 0xFF0000) >> 16))/255.0;
  147. float green = ((float)((hexColor & 0xFF00) >> 8))/255.0;
  148. float blue = ((float)(hexColor & 0xFF))/255.0;
  149. return [UIColor colorWithRed:red green:green blue:blue alpha:opacity];
  150. }
  151. // 颜色转换三:iOS中十六进制的颜色(以#开头)转换为UIColor
  152. + (UIColor *) colorWithHexString: (NSString *)color
  153. {
  154. NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
  155. // String should be 6 or 8 characters
  156. if ([cString length] < 6) {
  157. return [UIColor clearColor];
  158. }
  159. // 判断前缀并剪切掉
  160. if ([cString hasPrefix:@"0X"])
  161. cString = [cString substringFromIndex:2];
  162. if ([cString hasPrefix:@"#"])
  163. cString = [cString substringFromIndex:1];
  164. if ([cString length] != 6)
  165. return [UIColor clearColor];
  166. // 从六位数值中找到RGB对应的位数并转换
  167. NSRange range;
  168. range.location = 0;
  169. range.length = 2;
  170. //R、G、B
  171. NSString *rString = [cString substringWithRange:range];
  172. range.location = 2;
  173. NSString *gString = [cString substringWithRange:range];
  174. range.location = 4;
  175. NSString *bString = [cString substringWithRange:range];
  176. // Scan values
  177. unsigned int r, g, b;
  178. [[NSScanner scannerWithString:rString] scanHexInt:&r];
  179. [[NSScanner scannerWithString:gString] scanHexInt:&g];
  180. [[NSScanner scannerWithString:bString] scanHexInt:&b];
  181. return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];
  182. }
  183. @end