MOUploadDeviceTool.m 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. //
  2. // MOUploadDeviceTool.m
  3. // MiMoLive
  4. //
  5. // Created by MiMo on 2025/10/10.
  6. //
  7. #import "MOUploadDeviceTool.h"
  8. #import <AdjustSdk/AdjustSdk.h>
  9. #import "HzUUIDTools.h"
  10. static MOUploadDeviceTool *_tool;
  11. @interface MOUploadDeviceTool ()
  12. @property (nonatomic, copy) NSString *adid;
  13. @end
  14. @implementation MOUploadDeviceTool
  15. ///单例
  16. + (MOUploadDeviceTool *)shareTool {
  17. static dispatch_once_t onceToken;
  18. dispatch_once(&onceToken, ^
  19. {
  20. _tool = [[MOUploadDeviceTool alloc] init];
  21. });
  22. return _tool;
  23. }
  24. - (void)saveAdid:(NSString *)adid {
  25. _adid = adid;
  26. [[MODataCache sharedYYCache] setObject:adid forKey:@"kAdjustAdidStr"];
  27. }
  28. - (NSString *)adid {
  29. if (_adid.length > 0) {
  30. return _adid;
  31. }
  32. NSString *cacheAdidStr = (NSString *)[[MODataCache sharedYYCache] objectForKey:@"kAdjustAdidStr"];
  33. if (cacheAdidStr.length > 0) {
  34. return cacheAdidStr;
  35. }
  36. return [HzUUIDTools getDeviceIDInKeychain];
  37. }
  38. - (void)uploadDeviceInfo {
  39. NSString *cacheAdidStr = (NSString *)[[MODataCache sharedYYCache] objectForKey:@"kAdjustAdidStr"];
  40. if (cacheAdidStr.length > 0) {
  41. [self saveAdid:cacheAdidStr];
  42. [self toReportTheDeviceInfoWith:cacheAdidStr];
  43. return;
  44. }
  45. WEAKSELF
  46. [Adjust adidWithCompletionHandler:^(NSString * _Nullable adid) {
  47. if (adid.length > 0) {
  48. [weakSelf saveAdid:adid];
  49. [weakSelf toReportTheDeviceInfoWith:adid];
  50. } else {
  51. NSString *keychainId = [HzUUIDTools getDeviceIDInKeychain];
  52. [weakSelf saveAdid:keychainId];
  53. [weakSelf toReportTheDeviceInfoWith:keychainId];
  54. }
  55. }];
  56. }
  57. - (void)toReportTheDeviceInfoWith:(NSString *)adid {
  58. NSDictionary *infoDict = [MOTools getDeviceInfo];
  59. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  60. NSString *widthStr = [NSString stringWithFormat:@"%.f",SCREENWIDTH];
  61. NSString *heightStr = [NSString stringWithFormat:@"%.f",SCREENHEIGHT];
  62. NSInteger pixelRatio = [[MODataManager objectOrNilForKey:@"PixelRatio" fromDictionary:infoDict] integerValue];
  63. NSString *brand = [MODataManager objectOrNilForKey:@"Brand" fromDictionary:infoDict];
  64. NSString *model = [MOTools getCurrentDeviceModel];
  65. [dict setObject:widthStr forKey:@"width"];
  66. [dict setObject:heightStr forKey:@"height"];
  67. [dict setObject:@(pixelRatio) forKey:@"pixelRatio"];
  68. [dict setObject:brand forKey:@"brand"];
  69. [dict setObject:model forKey:@"model"];
  70. [dict setObject:adid forKey:@"uuid"];
  71. NSString *udid = [MODataManager objectOrNilForKey:@"UDID" fromDictionary:infoDict];
  72. if(udid.length > 0){
  73. [dict setObject:udid forKey:@"udid"];
  74. }
  75. NSString *idfv = [MODataManager objectOrNilForKey:@"IDFV" fromDictionary:infoDict];
  76. if(idfv.length > 0){
  77. [dict setObject:idfv forKey:@"idfv"];
  78. }
  79. NSString *system = [NSString stringWithFormat:@"%@ %@",[MODataManager objectOrNilForKey:@"OS" fromDictionary:infoDict],[MODataManager objectOrNilForKey:@"OSVersion" fromDictionary:infoDict]];
  80. [dict setObject:system forKey:@"system"];
  81. // 获取系统语言
  82. NSArray *preferredLanguages = [NSLocale preferredLanguages];
  83. NSString *currentLanguage = [preferredLanguages firstObject];
  84. if(currentLanguage.length > 0){
  85. [dict setObject:currentLanguage forKey:@"language"];
  86. }
  87. // 获取系统时区
  88. NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
  89. NSString *timeZoneName = [currentTimeZone name];
  90. if(timeZoneName.length > 0){
  91. [dict setObject:timeZoneName forKey:@"timeZone"];
  92. }
  93. //是否越狱
  94. BOOL isRootMobile = [SecurityBridge isJailbroken];
  95. [dict setObject:@(isRootMobile) forKey:@"rootMobile"];
  96. //是否模拟器
  97. BOOL isVirtualMobile = [SecurityBridge isRunningInEmulator];
  98. [dict setObject:@(isVirtualMobile) forKey:@"virtualMobile"];
  99. [self toReportTheDeviceInfoWithDict:dict];
  100. }
  101. - (void)toReportTheDeviceInfoWithDict:(NSDictionary *)dict {
  102. WEAKSELF
  103. [kHttpManager toReportTheDeviceInfoWithParams:dict andBlock:^(id _Nonnull data, NSError * _Nonnull error) {
  104. if(kCode_Success){
  105. MOLogV(@"toReportTheDeviceInfo success");
  106. }
  107. else{
  108. MOLogV(@"toReportTheDeviceInfoWithDict 接口报错了");
  109. }
  110. }];
  111. }
  112. @end