Tools.m 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. //
  2. // Tools.m
  3. // jiaPeiC
  4. //
  5. // Created by apple on 16/3/12.
  6. // Copyright © 2016年 JCZ. All rights reserved.
  7. //
  8. #import "Tools.h"
  9. #import "SDSoundPlayer.h"
  10. //广告标识
  11. #import <AdSupport/ASIdentifierManager.h>
  12. @implementation Tools
  13. + (NSString *)getPathWithFileName:(NSString *)fileName
  14. {
  15. NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
  16. NSString *filePath = [document stringByAppendingPathComponent:fileName];
  17. return filePath;
  18. }
  19. + (void)playAudioWithString:(NSString *)string
  20. {
  21. SDSoundPlayer *player = [SDSoundPlayer SDSoundPlayerInit];
  22. [player setDefaultWithVolume:-1.0 rate:0.5 pitchMultiplier:1.2];
  23. [player play:string];
  24. }
  25. //验证是否是电话号码
  26. + (BOOL)isMobileNumber:(NSString *)mobileNum
  27. {
  28. // 电信号段:133/153/180/181/189/177
  29. // 联通号段:130/131/132/155/156/185/186/145/176
  30. // 移动号段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178
  31. // 虚拟运营商:170
  32. NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";
  33. NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
  34. return [regextestmobile evaluateWithObject:mobileNum];
  35. }
  36. //根据图片二进制流获取图片格式
  37. + (NSString *)typeForImageData:(NSData *)data {
  38. uint8_t c;
  39. [data getBytes:&c length:1];
  40. switch (c) {
  41. case 0xFF:
  42. return @"jpeg";
  43. case 0x89:
  44. return @"png";
  45. case 0x47:
  46. return @"gif";
  47. case 0x49:
  48. case 0x4D:
  49. return @"tiff";
  50. }
  51. return @"jpg";
  52. }
  53. + (NSString *)getIDFV
  54. {
  55. // if (!isOfficial) {
  56. // return @"0282DC86-95FD-4000-AC65-0F69CF9DBE7E";
  57. // }
  58. NSString * const KEY_USERNAME_PASSWORD = @"com.danson.jiaPeiCo.usernamepassword";
  59. NSString * const KEY_PASSWORD = @"com.danson.jiaPeiCo.password";
  60. //测试用 清除keychain中的内容
  61. //[Tools delete:KEY_USERNAME_PASSWORD];
  62. NSMutableDictionary *readUserPwd = (NSMutableDictionary *)[Tools load:KEY_USERNAME_PASSWORD];
  63. //NSLog(@"keychain------><>%@",readUserPwd);
  64. if (!readUserPwd) {
  65. //如果为空 说明是第一次安装 做存储操作
  66. //IDFV
  67. // NSString *identifierStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
  68. // NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionaryWithObject:identifierStr forKey:KEY_PASSWORD];
  69. //IDFA
  70. NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
  71. if ([adId isEqualToString:@"00000000-0000-0000-0000-000000000000"] || [adId isEqualToString:@"00000000000000000000000000000000"]) {
  72. ShowMsg(@"获取广告标识失败,请在“设置-隐私-广告”中,关闭“限制广告跟踪”");
  73. }else{
  74. NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionaryWithObject:adId forKey:KEY_PASSWORD];
  75. [Tools save:KEY_USERNAME_PASSWORD data:usernamepasswordKVPairs];
  76. }
  77. return adId;
  78. }else{
  79. return [readUserPwd objectForKey:KEY_PASSWORD];
  80. }
  81. }
  82. //存
  83. + (void)save:(NSString *)service data:(id)data {
  84. //Get search dictionary
  85. NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
  86. //Delete old item before add new item
  87. SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
  88. //Add new object to search dictionary(Attention:the data format)
  89. [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge id)kSecValueData];
  90. //Add item to keychain with the search dictionary
  91. SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL);
  92. }
  93. + (NSMutableDictionary *)getKeychainQuery:(NSString *)service {
  94. return [NSMutableDictionary dictionaryWithObjectsAndKeys:
  95. (__bridge id)kSecClassGenericPassword,(__bridge id)kSecClass,
  96. service, (__bridge id)kSecAttrService,
  97. service, (__bridge id)kSecAttrAccount,
  98. (__bridge id)kSecAttrAccessibleAfterFirstUnlock,(__bridge id)kSecAttrAccessible,
  99. nil];
  100. }
  101. //取
  102. + (id)load:(NSString *)service {
  103. id ret = nil;
  104. NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
  105. //Configure the search setting
  106. //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue
  107. [keychainQuery setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
  108. [keychainQuery setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
  109. CFDataRef keyData = NULL;
  110. if (SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
  111. @try {
  112. ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];
  113. } @catch (NSException *e) {
  114. NSLog(@"Unarchive of %@ failed: %@", service, e);
  115. } @finally {
  116. }
  117. }
  118. if (keyData)
  119. CFRelease(keyData);
  120. return ret;
  121. }
  122. //删除
  123. + (void)delete:(NSString *)service {
  124. NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
  125. SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
  126. }
  127. + (NSString *)dateWithTimestamp:(NSString *)timestamp {
  128. // iOS 生成的时间戳是10位
  129. NSTimeInterval interval = [timestamp doubleValue] / 1000.0;
  130. NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];
  131. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  132. [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  133. return [formatter stringFromDate: date];
  134. }
  135. @end