Переглянути джерело

1.数据埋点基础处理完成

huangxiaodong 1 рік тому
батько
коміт
e487541214

+ 20 - 0
创维盒子/双子星云手机.xcodeproj/project.pbxproj

@@ -626,6 +626,10 @@
 		6B7DDF272C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B7DDF252C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.m */; };
 		6B7DDF282C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7DDF242C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.h */; };
 		6B7DDF292C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B7DDF252C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.m */; };
+		6B7DDF302C424B5E00EBDFDD /* RcGameWQKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7DDF2D2C424B5E00EBDFDD /* RcGameWQKeyChain.h */; };
+		6B7DDF312C424B5E00EBDFDD /* RcGameWQKeyChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7DDF2D2C424B5E00EBDFDD /* RcGameWQKeyChain.h */; };
+		6B7DDF322C424B5E00EBDFDD /* RcGameWQKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B7DDF2E2C424B5E00EBDFDD /* RcGameWQKeyChain.m */; };
+		6B7DDF332C424B5E00EBDFDD /* RcGameWQKeyChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B7DDF2E2C424B5E00EBDFDD /* RcGameWQKeyChain.m */; };
 		6B7E04282C3E5A98004B4948 /* customDownloadCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7E041F2C3E5A97004B4948 /* customDownloadCacheManager.h */; };
 		6B7E04292C3E5A98004B4948 /* customDownloadCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7E041F2C3E5A97004B4948 /* customDownloadCacheManager.h */; };
 		6B7E042A2C3E5A98004B4948 /* customDownloadCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B7E04202C3E5A97004B4948 /* customDownloadCacheManager.m */; };
@@ -1774,6 +1778,8 @@
 		6B7B65702ADEAE3D00BE8CB3 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
 		6B7DDF242C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = previewVideoLandscapeTopMoreView.h; sourceTree = "<group>"; };
 		6B7DDF252C421DA900EBDFDD /* previewVideoLandscapeTopMoreView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = previewVideoLandscapeTopMoreView.m; sourceTree = "<group>"; };
+		6B7DDF2D2C424B5E00EBDFDD /* RcGameWQKeyChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RcGameWQKeyChain.h; sourceTree = "<group>"; };
+		6B7DDF2E2C424B5E00EBDFDD /* RcGameWQKeyChain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RcGameWQKeyChain.m; sourceTree = "<group>"; };
 		6B7E041F2C3E5A97004B4948 /* customDownloadCacheManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = customDownloadCacheManager.h; sourceTree = "<group>"; };
 		6B7E04202C3E5A97004B4948 /* customDownloadCacheManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = customDownloadCacheManager.m; sourceTree = "<group>"; };
 		6B7E04212C3E5A97004B4948 /* customDownloadManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = customDownloadManager.h; sourceTree = "<group>"; };
@@ -3052,6 +3058,15 @@
 			path = websocket;
 			sourceTree = "<group>";
 		};
+		6B7DDF2F2C424B5E00EBDFDD /* keyChain */ = {
+			isa = PBXGroup;
+			children = (
+				6B7DDF2D2C424B5E00EBDFDD /* RcGameWQKeyChain.h */,
+				6B7DDF2E2C424B5E00EBDFDD /* RcGameWQKeyChain.m */,
+			);
+			path = keyChain;
+			sourceTree = "<group>";
+		};
 		6B7E04272C3E5A97004B4948 /* customDownloadManager */ = {
 			isa = PBXGroup;
 			children = (
@@ -3307,6 +3322,7 @@
 		A003F6C727D8425C00715CBF /* Helpers */ = {
 			isa = PBXGroup;
 			children = (
+				6B7DDF2F2C424B5E00EBDFDD /* keyChain */,
 				A003F6C827D8425C00715CBF /* iTools.h */,
 				A003F6CC27D8425C00715CBF /* iTools.m */,
 				A003F6C927D8425C00715CBF /* iToast.h */,
@@ -3728,6 +3744,7 @@
 				6B72724B2B0AF59200C03F87 /* uploadFileRecordTableViewHeadView.h in Headers */,
 				6B72725F2B0E240F00C03F87 /* uploadFileRecordTableView.h in Headers */,
 				6B5D867A2C22D6E9008D25EA /* NASLastFileView.h in Headers */,
+				6B7DDF302C424B5E00EBDFDD /* RcGameWQKeyChain.h in Headers */,
 				181E84F72A8F451D00292B96 /* MineViewCell.h in Headers */,
 				6B2C1E4E2C070ADE00FDCF82 /* ZFUtilities.h in Headers */,
 				6B8661D72BBA53B600B19846 /* noticeModel.h in Headers */,
@@ -3978,6 +3995,7 @@
 				6BD506DF2B9576A4006E7CB0 /* uploadFileRecordTableViewHeadView.h in Headers */,
 				6BD506E02B9576A4006E7CB0 /* uploadFileRecordTableView.h in Headers */,
 				6B5D867B2C22D6E9008D25EA /* NASLastFileView.h in Headers */,
+				6B7DDF312C424B5E00EBDFDD /* RcGameWQKeyChain.h in Headers */,
 				6BD506E12B9576A4006E7CB0 /* MineViewCell.h in Headers */,
 				6B2C1E4F2C070ADE00FDCF82 /* ZFUtilities.h in Headers */,
 				6B8661D82BBA53B600B19846 /* noticeModel.h in Headers */,
@@ -4501,6 +4519,7 @@
 				6BD507202B9576A4006E7CB0 /* NSArray+JSONModel.m in Sources */,
 				6BD507212B9576A4006E7CB0 /* HWAddBookmarkViewController.m in Sources */,
 				6BD507222B9576A4006E7CB0 /* AuthCodeTextField.m in Sources */,
+				6B7DDF332C424B5E00EBDFDD /* RcGameWQKeyChain.m in Sources */,
 				6BA08F5A2C01D05B00A2242D /* CWUploadTask+CheckInfo.m in Sources */,
 				6BD507232B9576A4006E7CB0 /* ShearDeviceUDPManager.m in Sources */,
 				6BD507242B9576A4006E7CB0 /* filePathCreatPopView.m in Sources */,
@@ -4833,6 +4852,7 @@
 				183AE6012A89CE3C00B11CB0 /* NSArray+JSONModel.m in Sources */,
 				A00221DB27EAFF4A00E45F78 /* HWAddBookmarkViewController.m in Sources */,
 				6BFF26922AF9D88200FCB4F7 /* AuthCodeTextField.m in Sources */,
+				6B7DDF322C424B5E00EBDFDD /* RcGameWQKeyChain.m in Sources */,
 				6BA08F592C01D05B00A2242D /* CWUploadTask+CheckInfo.m in Sources */,
 				18664FF52AC2B3A4008F8A61 /* ShearDeviceUDPManager.m in Sources */,
 				6B5B60772B3E665E009A2AE2 /* filePathCreatPopView.m in Sources */,

+ 29 - 9
创维盒子/双子星云手机/Helpers/iTools.m

@@ -1308,10 +1308,10 @@ static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq
    NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
    
    
-    if ([deviceModel isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
-    if ([deviceModel isEqualToString:@"iPhone3,2"])    return @"iPhone 4";
-    if ([deviceModel isEqualToString:@"iPhone3,3"])    return @"iPhone 4";
-    if ([deviceModel isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
+//    if ([deviceModel isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
+//    if ([deviceModel isEqualToString:@"iPhone3,2"])    return @"iPhone 4";
+//    if ([deviceModel isEqualToString:@"iPhone3,3"])    return @"iPhone 4";
+//    if ([deviceModel isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
     if ([deviceModel isEqualToString:@"iPhone5,1"])    return @"iPhone 5";
     if ([deviceModel isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
     if ([deviceModel isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
@@ -1350,10 +1350,19 @@ static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq
     if ([deviceModel isEqualToString:@"iPhone14,5"])   return @"iPhone 13";
     if ([deviceModel isEqualToString:@"iPhone14,2"])   return @"iPhone 13 Pro";
     if ([deviceModel isEqualToString:@"iPhone14,3"])   return @"iPhone 13 Pro Max";
-    if ([deviceModel isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
-    if ([deviceModel isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
-    if ([deviceModel isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
-    if ([deviceModel isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
+    if ([deviceModel isEqualToString:@"iPhone14,7"])   return @"iPhone 14";
+    if ([deviceModel isEqualToString:@"iPhone14,8"])   return @"iPhone 14 plus";
+    if ([deviceModel isEqualToString:@"iPhone15,2"])   return @"iPhone 14 pro";
+    if ([deviceModel isEqualToString:@"iPhone15,3"])   return @"iPhone 14 Pro Max";
+    if ([deviceModel isEqualToString:@"iPhone15,4"])   return @"iPhone 15";
+    if ([deviceModel isEqualToString:@"iPhone15,5"])   return @"iPhone 15 plus";
+    if ([deviceModel isEqualToString:@"iPhone16,1"])   return @"iPhone 15 pro";
+    if ([deviceModel isEqualToString:@"iPhone16,2"])   return @"iPhone 15 Pro Max";
+    
+//    if ([deviceModel isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
+//    if ([deviceModel isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
+//    if ([deviceModel isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
+//    if ([deviceModel isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
     if ([deviceModel isEqualToString:@"iPod5,1"])      return @"iPod Touch (5 Gen)";
     if ([deviceModel isEqualToString:@"iPad1,1"])      return @"iPad";
     if ([deviceModel isEqualToString:@"iPad1,2"])      return @"iPad 3G";
@@ -1386,7 +1395,18 @@ static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq
     if ([deviceModel isEqualToString:@"iPad6,4"])      return @"iPad Pro 9.7";
     if ([deviceModel isEqualToString:@"iPad6,7"])      return @"iPad Pro 12.9";
     if ([deviceModel isEqualToString:@"iPad6,8"])      return @"iPad Pro 12.9";
-
+    if ([deviceModel isEqualToString:@"iPad6,11"])      return @"iPad 5";
+    if ([deviceModel isEqualToString:@"iPad6,12"])      return @"iPad 5";
+    if ([deviceModel isEqualToString:@"iPad7,1"])      return @"iPad Pro 12.9 inch 2nd gen";
+    if ([deviceModel isEqualToString:@"iPad7,2"])      return @"iPad Pro 12.9 inch 2nd gen";
+    if ([deviceModel isEqualToString:@"iPad7,3"])      return @"iPad Pro 10.5 inch";
+    if ([deviceModel isEqualToString:@"iPad7,4"])      return @"iPad Pro 10.5 inch";
+    if ([deviceModel isEqualToString:@"iPad7,5"])      return @"iPad 6";
+    if ([deviceModel isEqualToString:@"iPad7,6"])      return @"iPad 6";
+    if ([deviceModel isEqualToString:@"iPad7,11"])      return @"iPad 7";
+    if ([deviceModel isEqualToString:@"iPad7,12"])      return @"iPad 7";
+    
+    
     if ([deviceModel isEqualToString:@"AppleTV2,1"])      return @"Apple TV 2";
     if ([deviceModel isEqualToString:@"AppleTV3,1"])      return @"Apple TV 3";
     if ([deviceModel isEqualToString:@"AppleTV3,2"])      return @"Apple TV 3";

+ 21 - 0
创维盒子/双子星云手机/Helpers/keyChain/RcGameWQKeyChain.h

@@ -0,0 +1,21 @@
+//
+//  RcGameWQKeyChain.h
+//  Vclusters_game_SDK_iOS
+//
+//  Created by xd h on 2021/6/8.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RcGameWQKeyChain : NSObject
+
+//+(void)saveIdentifier:(NSString *)iden;
+//+(id)readIdentifier;
++(void)deleteIdentifier;
+
++ (NSString*)getOaidStringFun;
+@end
+
+NS_ASSUME_NONNULL_END

+ 126 - 0
创维盒子/双子星云手机/Helpers/keyChain/RcGameWQKeyChain.m

@@ -0,0 +1,126 @@
+//
+//  RcGameWQKeyChain.m
+//  Vclusters_game_SDK_iOS
+//
+//  Created by xd h on 2021/6/8.
+//
+
+#import "RcGameWQKeyChain.h"
+
+@implementation RcGameWQKeyChain
+
+static NSString * const KEY_IN_KEYCHAIN_RcGame = @"w10010DataPrivateX";
+static NSString * const KEY_Identifier_RcGame = @"wuuidIdentifierPrivateX";
+
+static NSString*identifierForVendor = nil;//设备标识符
+
++(void)saveIdentifier:(NSString *)iden
+{
+    NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionary];
+    [usernamepasswordKVPairs setObject:iden forKey:KEY_Identifier_RcGame];
+    [RcGameWQKeyChain save:KEY_IN_KEYCHAIN_RcGame data:usernamepasswordKVPairs];
+}
+
++(id)readIdentifier
+{
+    NSMutableDictionary *userIdentifierKVPair = (NSMutableDictionary *)[RcGameWQKeyChain load:KEY_IN_KEYCHAIN_RcGame];
+    return [userIdentifierKVPair objectForKey:KEY_Identifier_RcGame];
+}
+
++(void)deleteIdentifier
+{
+    [RcGameWQKeyChain delete:KEY_IN_KEYCHAIN_RcGame];
+}
+
+
+static NSMutableDictionary * queryDIC;
++ (NSMutableDictionary *)getKeychainQuery:(NSString *)service {
+    
+    if (!queryDIC) {
+           queryDIC =[NSMutableDictionary dictionaryWithObjectsAndKeys:
+                      (__bridge_transfer id)kSecClassGenericPassword,(__bridge_transfer id)kSecClass,
+                      service, (__bridge_transfer id)kSecAttrService,
+                      service, (__bridge_transfer id)kSecAttrAccount,
+                      (__bridge_transfer id)kSecAttrAccessibleAfterFirstUnlock,(__bridge_transfer id)kSecAttrAccessible,
+                      nil];
+       }
+       return queryDIC;
+}
+
++ (void)save:(NSString *)service data:(id)data {
+    //Get search dictionary
+    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
+    //Delete old item before add new item
+    SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery);
+    //Add new object to search dictionary(Attention:the data format)
+    [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge_transfer id)kSecValueData];
+    //Add item to keychain with the search dictionary
+    SecItemAdd((__bridge_retained CFDictionaryRef)keychainQuery, NULL);
+}
+
++ (id)load:(NSString *)service {
+    id ret = nil;
+    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
+    //Configure the search setting
+    [keychainQuery setObject:(id)kCFBooleanTrue forKey:(__bridge_transfer id)kSecReturnData];
+    [keychainQuery setObject:(__bridge_transfer id)kSecMatchLimitOne forKey:(__bridge_transfer id)kSecMatchLimit];
+    CFDataRef keyData = NULL;
+    if (SecItemCopyMatching((__bridge_retained CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
+        @try {
+            ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge_transfer NSData *)keyData];
+        } @catch (NSException *e) {
+            NSLog(@"Unarchive of %@ failed: %@", service, e);
+        } @finally {
+        }
+    }
+    return ret;
+}
+
++ (void)delete:(NSString *)service {
+    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
+    SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery);
+}
+
+/*******************************************************************************/
+
++ (NSString*)getOaidStringFun{
+    if(!identifierForVendor)
+    {//生成一个随机字符串
+        //随机31个字符
+        NSString *randomUdidStr = [self randomString:31];
+        [RcGameWQKeyChain saveIdentifier:randomUdidStr];
+        identifierForVendor = randomUdidStr;
+    }
+
+    return  identifierForVendor;
+    
+}
+
+/**
+ 生成随机数字和大写字母
+ @param number  需要的个数
+ @return 生成的字符串
+ */
++ (NSString *)randomString:(NSInteger)number {
+    
+    NSString *ramdom;
+    NSMutableArray *array = [NSMutableArray array];
+    for (int i = 1; i ; i ++) {
+        int a = (arc4random() % 122);
+        
+        //48-57 (0-9)
+        //65-90 (A-Z)
+        if ((a >= 48 && a<=57) || (a >= 65 && a<=90)) {
+            char c = (char)a;
+            [array addObject:[NSString stringWithFormat:@"%c",c]];
+            if (array.count == number) {
+                break;
+            }
+        } else continue;
+    }
+    ramdom = [array componentsJoinedByString:@""];
+    return ramdom;
+    
+}
+
+@end

+ 5 - 0
创维盒子/双子星云手机/netWork/netWorkManager.h

@@ -33,6 +33,11 @@ typedef void (^netWork_Faild) (NSError *error);
 
 - (void)doUploadFileToFileServiceWithParams:(NSMutableDictionary *)params data:(NSData *)data success:(netWork_Success)success faild:(netWork_Faild)faildStr;
 
+#pragma mark  afnetwork  post 埋点请求
+//eventType 事件模块类型 0 一级模块=1 二级模块=2 三级模块=3
+//事件模块值 Scan_code 
+- (void)DataEmbeddingPointBy:(int)eventType withEventValue:(NSString*)eventValue;
+
 #pragma mark  afnetwork  post 请求
 - (void)cloudPhonePostCallBackCode:(NSString*)code  Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure;
 

+ 43 - 1
创维盒子/双子星云手机/netWork/netWorkManager.m

@@ -8,7 +8,8 @@
 #import "netWorkManager.h"
 #import "AFNetworkReachabilityManager.h"
 #import "AFHTTPSessionManager.h"
-
+#import "RcGameWQKeyChain.h"
+#import "iPhone.h"
 
 @interface netWorkManager ()
 {
@@ -107,6 +108,26 @@ static netWorkManager *Game_NetWorkShareInstance = nil;
 //    [manager.requestSerializer setValue:uuid forHTTPHeaderField:@"devicesId"];
     [manager.requestSerializer setValue:@"ios" forHTTPHeaderField:@"Source-Type"];
     
+    NSString *DeviceModel = [iTools getCurrentDeviceModel];
+    if(DeviceModel){
+        [manager.requestSerializer setValue:DeviceModel forHTTPHeaderField:@"Devices"];
+    }
+    
+    NSString *curSN = [connectDeviceManager shareInstance].DeviceThirdIdMod.data.changeSn;
+    if (curSN) {
+        [manager.requestSerializer setValue:curSN forHTTPHeaderField:@"SN"];
+    }
+    
+    NSString *curOaidStr = [RcGameWQKeyChain getOaidStringFun];
+    if(curOaidStr){
+        [manager.requestSerializer setValue:curOaidStr forHTTPHeaderField:@"OAID"];
+    }
+    
+    NSString *vers = [iPhone appVersion];
+    if(vers){
+        [manager.requestSerializer setValue:vers forHTTPHeaderField:@"versionName"];
+    }
+    
     if ([mCloudService rangeOfString:@"https"].location != NSNotFound)
     {
         [manager setSecurityPolicy:[self customSecurityPolicy]];
@@ -340,6 +361,27 @@ static netWorkManager *Game_NetWorkShareInstance = nil;
     }];
 }
 
+#pragma mark  afnetwork  post 埋点请求
+//eventType 事件模块类型 0 一级模块=1 二级模块=2 三级模块=3
+//事件模块值 Scan_code
+- (void)DataEmbeddingPointBy:(int)eventType withEventValue:(NSString*)eventValue
+{
+    if(!eventValue){
+        return;
+    }
+    
+    NSMutableDictionary *dict = [NSMutableDictionary new];
+    [dict setValue:[NSNumber numberWithInt:eventType] forKey:@"eventType"];
+    [dict setValue:eventValue forKey:@"eventValue"];
+    
+    [self CommonPostCallBackCode:queryShareRuleFun Parameters:dict success:^(id  _Nonnull responseObject) {
+        
+    } failure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+
 #pragma mark  afnetwork  post 请求
 - (void)cloudPhonePostCallBackCode:(NSString*)code  Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure
 {

+ 7 - 0
创维盒子/双子星云手机/netWork/newWorkInterface.h

@@ -114,4 +114,11 @@
  返回数据模型 */
 //#define queryShareRuleFun  @"/box/agreement/info/queryByCondition"
 
+/*17 数据埋点 POST请求
+输入参数 eventType 事件模块类型 一级模块=1 二级模块=2 三级模块=3
+ 输入参数 eventValue string
+ 返回数据模型 */
+#define queryShareRuleFun  @"/box/data/point/clientAdd"
+
+
 #endif /* newWorkInterface_h */