diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..932938d4a3444a55f847d8e04509a000efaf43aa Binary files /dev/null and b/.DS_Store differ diff --git a/Demo/.DS_Store b/Demo/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..22001bbae930e727bc2b9bfd25077f1fd2f17776 Binary files /dev/null and b/Demo/.DS_Store differ diff --git a/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/Demo.xcscmblueprint b/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/Demo.xcscmblueprint new file mode 100644 index 0000000000000000000000000000000000000000..bc0f552f1771121736b49a3eb20deb5743279307 --- /dev/null +++ b/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/Demo.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2" : 9223372036854775807, + "6A41E5A725AED0DCD5E5E153CE1E565033830CA5" : 0 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "A39AFA0B-F6A9-4215-A397-53DB8D4B7457", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2" : "MMAViewabilitySDK_iOS\/", + "6A41E5A725AED0DCD5E5E153CE1E565033830CA5" : "develop" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "Demo", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Demo\/Demo.xcodeproj", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/git.oschina.net\/AdMaster\/MMA_iOS_SDK.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6A41E5A725AED0DCD5E5E153CE1E565033830CA5" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "git.oschina.net:meagle_mz\/MMAViewabilitySDK_iOS.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2" + } + ] +} \ No newline at end of file diff --git a/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/miaojianwei.xcuserdatad/UserInterfaceState.xcuserstate b/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/miaojianwei.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..601548dafd3b56896336214a506698d272d96b7b Binary files /dev/null and b/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/miaojianwei.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Demo/Demo.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/Demo.xcscheme b/Demo/Demo.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/Demo.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..ddba38869ffef7f174472087791b0581a8bed46f --- /dev/null +++ b/Demo/Demo.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/Demo.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/Demo.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/xcschememanagement.plist b/Demo/Demo.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000000000000000000000000000000000000..f1af86300b27855d792f888f46bf9722b490022a --- /dev/null +++ b/Demo/Demo.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + Demo.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 2A0C4E1918D6D18700200F18 + + primary + + + 2A0C4E3A18D6D18700200F18 + + primary + + + + + diff --git a/Demo/Demo/.DS_Store b/Demo/Demo/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..054905b04dabf048b2a510b0db8b3f86b58169e3 Binary files /dev/null and b/Demo/Demo/.DS_Store differ diff --git a/MobileTracking/.DS_Store b/MobileTracking/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3eba0f44b1b27d1a7365308f96e7ea7afd38e1ba Binary files /dev/null and b/MobileTracking/.DS_Store differ diff --git a/MobileTracking/MobileTracking.xcodeproj/project.xcworkspace/xcshareddata/MobileTracking.xcscmblueprint b/MobileTracking/MobileTracking.xcodeproj/project.xcworkspace/xcshareddata/MobileTracking.xcscmblueprint new file mode 100644 index 0000000000000000000000000000000000000000..b102ad07d5771aec3f56c4a8ebe6ef9bc2def504 --- /dev/null +++ b/MobileTracking/MobileTracking.xcodeproj/project.xcworkspace/xcshareddata/MobileTracking.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2" : 9223372036854775807, + "6A41E5A725AED0DCD5E5E153CE1E565033830CA5" : 0 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "6AAEA0B5-C01C-4F4D-9AA2-BDA0486AE0C5", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2" : "MMAViewabilitySDK_iOS\/", + "6A41E5A725AED0DCD5E5E153CE1E565033830CA5" : "develop" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "MobileTracking", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "MobileTracking\/MobileTracking.xcodeproj", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/git.oschina.net\/AdMaster\/MMA_iOS_SDK.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6A41E5A725AED0DCD5E5E153CE1E565033830CA5" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "git.oschina.net:meagle_mz\/MMAViewabilitySDK_iOS.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "AE690331FF995CC7ECDAD7EC4033EE68B2CDECD2" + } + ] +} \ No newline at end of file diff --git a/MobileTracking/MobileTracking.xcodeproj/project.xcworkspace/xcuserdata/miaojianwei.xcuserdatad/UserInterfaceState.xcuserstate b/MobileTracking/MobileTracking.xcodeproj/project.xcworkspace/xcuserdata/miaojianwei.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..2e299d234079370ff60a2d88fd7cc503492dd967 Binary files /dev/null and b/MobileTracking/MobileTracking.xcodeproj/project.xcworkspace/xcuserdata/miaojianwei.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000000000000000000000000000000000000..fe2b45415124ec4c223006e19defd56850da95d9 --- /dev/null +++ b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTracking.xcscheme b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTracking.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..89db7f4a1ffee6d04f140b7783703878a0aee630 --- /dev/null +++ b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTracking.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTrackingDevice.xcscheme b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTrackingDevice.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..35bc972e646cce030e68a1331208b21b0ba897f8 --- /dev/null +++ b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTrackingDevice.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTrackingSimulator.xcscheme b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTrackingSimulator.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..c7f4a87e7f67f4dcfddb123a9cf33f605084854e --- /dev/null +++ b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/MobileTrackingSimulator.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/xcschememanagement.plist b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000000000000000000000000000000000000..d6eea9ed9fc0c9eb2feab248695fd85a5fa64721 --- /dev/null +++ b/MobileTracking/MobileTracking.xcodeproj/xcuserdata/miaojianwei.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,47 @@ + + + + + SchemeUserState + + MobileTracking.xcscheme + + orderHint + 2 + + MobileTrackingDevice.xcscheme + + orderHint + 0 + + MobileTrackingSimulator.xcscheme + + orderHint + 1 + + + SuppressBuildableAutocreation + + 2A632A1718CEB10B00BE2533 + + primary + + + 2A632A2718CEB10B00BE2533 + + primary + + + 2A8171FF18DAEB3A00E0EFEC + + primary + + + 2A81721C18DAECA100E0EFEC + + primary + + + + + diff --git a/MobileTracking/MobileTracking/MMA_Macro.h b/MobileTracking/MobileTracking/MMA_Macro.h index c78b7bf698f1d823c49f808582e16e33d4130b9e..be3bb238f04a3aafda420c8b39a8b3502e767a65 100755 --- a/MobileTracking/MobileTracking/MMA_Macro.h +++ b/MobileTracking/MobileTracking/MMA_Macro.h @@ -92,7 +92,11 @@ AD_VB_POINT, \ AD_VB_FRAME, \ AD_VB_TIME, \ AD_VB_EVENTS, \ -IMPRESSIONID \ +IMPRESSIONID, \ +MZ_VIEWABILITY_THRESHOLD, \ +MZ_VIEWABILITY_VIDEO_PLAYTYPE, \ +MZ_VIEWABILITY_VIDEO_PROGRESS, \ +MZ_VIEWABILITY \ ] #define VIEW_ABILITY_MAIN_KEY @[ \ @@ -115,4 +119,16 @@ IMPRESSIONID \ #define IOS6 6.0 +#define MZ_COMPANY_NAME @"miaozhen" +#define MZ_COMPANY_DOMAIN @".miaozhen.com" +#define TRACKING_KEY_NETWORKTYPE @"NETWORKTYPE" //mw +#define MZ_VIEWABILITY_THRESHOLD @"MZviewabilityThreshold" //ve +#define MZ_VIEWABILITY_VIDEO_PLAYTYPE @"MZviewabilityVideoPlayType" //vg +#define MZ_VIEWABILITY_VIDEO_PROGRESS @"MZviewabilityVideoProgress" //vc +#define MZ_VIEWABILITY_VIDEO_DURATION @"MZviewabilityVideoDuration" //vb +#define MZ_VIEWABILITY @"MZviewability" //vx +#define MZ_VIEWABILITY_RECORD @"MZviewabilityRecord" //va +#define MZ_VIEWABILITY_CONFIG_THRESHOLD @"MZviewabilityConfigThreshold" //vi +#define MZ_VIEWABILITY_CONFIG_AREA @"MZviewabilityConfigArea" //vh + #endif diff --git a/MobileTracking/MobileTracking/MobileTracking.h b/MobileTracking/MobileTracking/MobileTracking.h index 774ad947b1125dc07ffc4c852b24cf6b8d3a8683..53b41118963d3be8117a2a80d64c2e2bcb86b049 100755 --- a/MobileTracking/MobileTracking/MobileTracking.h +++ b/MobileTracking/MobileTracking/MobileTracking.h @@ -33,6 +33,7 @@ // 视频可视化监测曝光 - (void)viewVideo:(NSString *)url ad:(UIView *)adView; +- (void)viewVideo:(NSString *)url ad:(UIView *)adView videoPlayType:(NSInteger)type;//type:视频播放类型,1-自动播放,2-手动播放,0-无法识别 // 普通曝光 - (void)jsView:(NSString *)url ad:(UIView *)adView; diff --git a/MobileTracking/MobileTracking/MobileTracking.m b/MobileTracking/MobileTracking/MobileTracking.m index e157ea73571244563e0183c95b6d7d93c6e2fb2b..e21527b05c331ce70eaf8b3a97fa1dff290de93b 100755 --- a/MobileTracking/MobileTracking/MobileTracking.m +++ b/MobileTracking/MobileTracking/MobileTracking.m @@ -421,6 +421,12 @@ } } + //mzcommit-秒针自己的过滤函数 + if ([company.name isEqualToString:MZ_COMPANY_NAME]) { + [self mzCanOpenViewabilityService:[trackURL mutableCopy] result:res company:company]; + return res; + } + NSString *noRedirectURL = [NSString stringWithString:trackURL]; NSMutableString *exposeURL = [[NSMutableString alloc] initWithString:trackURL]; NSMutableString *viewabilityURL = [[NSMutableString alloc] initWithString:trackURL]; @@ -494,6 +500,37 @@ } +//mzcommit-有vx配置就进行可见监测,删除请求中的可见参数 +- (VBOpenResult *)mzCanOpenViewabilityService:(NSMutableString *)url result:(VBOpenResult *)res company:(MMA_Company *)company{ + NSString *separator = company.separator; + NSString *equalizer = company.equalizer; + + + for (MMA_Argument *argument in [company.config.viewabilityarguments objectEnumerator]) { + NSString *key = argument.key; + if (key && key.length) { + NSString *value = [(MMA_Argument *)[company.config.viewabilityarguments objectForKey:argument.key] value]; + if (value && value.length) { + if ([key isEqualToString:MZ_VIEWABILITY_RECORD]) { + continue; + } else if ([key isEqualToString:MZ_VIEWABILITY_VIDEO_DURATION]) { + continue; + } else if ([key isEqualToString:MZ_VIEWABILITY_CONFIG_AREA]) { + continue; + } else if ([key isEqualToString:MZ_VIEWABILITY_CONFIG_THRESHOLD]) { + continue; + }else if ([key isEqualToString:MZ_VIEWABILITY]) { + res.canOpen = YES; + } + + [url replaceOccurrencesOfString:[NSString stringWithFormat:@"%@%@%@[^%@]*", separator, value, equalizer, separator] withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, url.length)]; + } + } + } + res.exposeURL = [[NSMutableString alloc] initWithString:url]; + res.viewabilityURL = [[NSMutableString alloc] initWithString:url]; + return res; +} - (void)click:(NSString *)url { @@ -533,8 +570,13 @@ // 视频Viewaility曝光请求: 视频曝光判断是否含有相关AdViewabilityEvents字段决定是否开启viewability - (void)viewVideo:(NSString *)url ad:(UIView *)adView { + [self viewVideo:url ad:adView videoPlayType:0]; +} + +// 视频Viewaility曝光请求: 视频曝光判断是否含有相关AdViewabilityEvents字段决定是否开启viewability +- (void)viewVideo:(NSString *)url ad:(UIView *)adView videoPlayType:(NSInteger)type { VBOpenResult *result = [self canOpenViewabilityService:url]; - [self view:url ad:adView isVideo:YES handleResult:result]; + [self view:url ad:adView isVideo:YES handleResult:result videoPlayType:type]; } // 广告Viewability曝光请求: 同视频Viewability曝光逻辑 @@ -545,6 +587,10 @@ // - (void)view:(NSString *)url ad:(UIView *)adView isVideo:(BOOL)isVideo handleResult:(VBOpenResult *)result { + [self view:url ad:adView isVideo:isVideo handleResult:result videoPlayType:0]; +} + +- (void)view:(NSString *)url ad:(UIView *)adView isVideo:(BOOL)isVideo handleResult:(VBOpenResult *)result videoPlayType:(NSInteger)type { @try { /** * 获取是否含有使用viewability字段 @@ -577,6 +623,20 @@ NSString *impressID = [MMA_Helper md5HexDigest:compString]; _impressionDictionary[impressKey] = impressID; + //mzcommit-秒针view非空即进行可见监测,可见监测发的普通曝光要加vx=0 + if ([company.name isEqualToString:MZ_COMPANY_NAME]) { + if (useViewabilityService && adView && [adView isKindOfClass:[UIView class]]) { + NSMutableString *tempURL = [NSMutableString stringWithString:result.exposeURL]; + MMA_Argument *mzViewability = [company.config.viewabilityarguments valueForKey:MZ_VIEWABILITY]; + if(mzViewability.value) { + [tempURL appendFormat:@"%@%@%@%@",company.separator,mzViewability.value,company.equalizer,@"0"]; + result.exposeURL = tempURL; + } + } else if (!adView || ![adView isKindOfClass:[UIView class]]) { + useViewabilityService = NO; + } + } + /** * 发送正常的url 监测使用去噪impressionID曝光url */ @@ -616,6 +676,19 @@ [self filterURL:url]; } else { VAMonitor *monitor = [VAMonitor monitorWithView:adView isVideo:isVideo url:result.viewabilityURL redirectURL:result.redirectURL impressionID:impressID adID:adID keyValueAccess:[keyvalueAccess copy]]; + if ([company.name isEqualToString:MZ_COMPANY_NAME]) { + monitor.isMZURL = YES; + monitor.isNeedRecord = [self isNeedRecordWithUrl:result.viewabilityURL withCompany:company]; + monitor.validExposeDuration = [self getValueFromUrl:result.viewabilityURL withCompany:company withTag:MZ_VIEWABILITY_CONFIG_THRESHOLD]; + monitor.vaildExposeShowRate = [self getValueFromUrl:result.viewabilityURL withCompany:company withTag:MZ_VIEWABILITY_CONFIG_AREA]; + if (isVideo) { + monitor.videoPlayType = (int)type; + monitor.mzVideoMidPoint = [self getConfigTagNameWithCompany:company withTag:MZ_VIEWABILITY_VIDEO_PROGRESS]; + if (monitor.mzVideoMidPoint) { + monitor.videoDuration = [self getValueFromUrl:result.viewabilityURL withCompany:company withTag:MZ_VIEWABILITY_VIDEO_DURATION]; + } + } + } monitor.delegate = self; [_viewabilityService addVAMonitor:monitor]; } @@ -862,6 +935,9 @@ } else if ([argument.key isEqualToString:TRACKING_KEY_SDKVS]) { [trackURL appendFormat:@"%@%@%@%@", company.separator, queryArgsKey, company.equalizer, MMA_SDK_VERSION]; + } else if ([argument.key isEqualToString:TRACKING_KEY_NETWORKTYPE]) { + NSInteger type = [self.trackingInfoService getCurrentNetTypeMZ]; + [trackURL appendFormat:@"%@%@%@%d", company.separator, queryArgsKey, company.equalizer, (int)type]; } } @@ -879,4 +955,57 @@ return trackURL; } + +- (BOOL)isNeedRecordWithUrl:(NSString *)url withCompany:(MMA_Company *)company +{ + if (!company) { + return NO; + } + + NSString *viewabilityRecordName = [self getConfigTagNameWithCompany:company withTag:MZ_VIEWABILITY_RECORD]; + NSString *separator = company.separator; + NSString *equalizer = company.equalizer; + NSString *substr = [NSString stringWithFormat:@"%@%@%@%@", separator, viewabilityRecordName, equalizer, @"1"]; + + return viewabilityRecordName && viewabilityRecordName.length && [url containsString:substr]; +} + +- (float)getValueFromUrl:(NSString *)url withCompany:(MMA_Company *)company withTag:(NSString *)tag +{ + NSString *key = [self getConfigTagNameWithCompany:company withTag:tag]; + if (!key || !key.length) { + return 0; + } + + NSString *separator = company.separator; + NSString *equalizer = company.equalizer; + NSArray *arr = [url componentsSeparatedByString:separator]; + NSString *prefix= [NSString stringWithFormat:@"%@%@",key,equalizer]; + for (int i=1;i<[arr count];i++) { + NSString *str = [arr objectAtIndex:i]; + if ([str hasPrefix:prefix]) { + NSScanner *scanner = [NSScanner scannerWithString:str]; + [scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil]; + float value; + [scanner scanFloat:&value]; + return value; + } + } + return 0; +} + +- (NSString *) getConfigTagNameWithCompany:(MMA_Company *)company withTag:(NSString *)tag +{ + for (MMA_Argument *argument in [company.config.viewabilityarguments objectEnumerator]) { + NSString *key = argument.key; + if (key && key.length && [key isEqualToString:tag]) { + NSString *value = [(MMA_Argument *)[company.config.viewabilityarguments objectForKey:argument.key] value]; + if (value && value.length) { + return value; + } + } + } + + return nil; +} @end diff --git a/MobileTracking/MobileTracking/Service/TrackingInfoService.h b/MobileTracking/MobileTracking/Service/TrackingInfoService.h index 954dd77e1dc565ac7cc53e5281e864f4dcd3bbb4..8cef76bb498ec9331b57b7c0f084c9c8b421cd7e 100755 --- a/MobileTracking/MobileTracking/Service/TrackingInfoService.h +++ b/MobileTracking/MobileTracking/Service/TrackingInfoService.h @@ -27,5 +27,6 @@ @property (nonatomic, strong, readonly) NSString *location; @property (nonatomic, strong, readonly) NSString *term; @property (nonatomic, assign, readonly) NSInteger networkCondition; +@property (nonatomic, assign, readonly) NSInteger getCurrentNetTypeMZ; @end diff --git a/MobileTracking/MobileTracking/Service/TrackingInfoService.m b/MobileTracking/MobileTracking/Service/TrackingInfoService.m index 387892b181a6240f5e18139ad6e3527f65951824..55874d15bcc6576db918bc1b81d196af5ca57411 100755 --- a/MobileTracking/MobileTracking/Service/TrackingInfoService.m +++ b/MobileTracking/MobileTracking/Service/TrackingInfoService.m @@ -121,4 +121,23 @@ } } +- (NSInteger)getCurrentNetTypeMZ +{ + NSInteger type = [self networkCondition]; + switch (type) { + case NETWORK_STATUS_NO: + return 0; + break; + case NETWORK_STATUS_WIFI: + return 1; + break; + case NETWORK_STATUS_3G: + return 2; + break; + default: + return 0; + break; + } +} + @end diff --git a/MobileTracking/Viewability/VAMonitor.h b/MobileTracking/Viewability/VAMonitor.h index 68e951c1b1bf67f70b3d3dc57217e75c32e9893d..734ab3f912ccf15efe9b4320e8a13fc7df1ecd88 100644 --- a/MobileTracking/Viewability/VAMonitor.h +++ b/MobileTracking/Viewability/VAMonitor.h @@ -49,8 +49,16 @@ typedef NS_ENUM(NSUInteger, VAMonitorStatus) { @property (nonatomic, strong,readonly) VAMonitorConfig *config; @property (nonatomic, readonly) BOOL isValid; @property (nonatomic, readonly) BOOL isVideo; - - +@property (nonatomic) CGFloat validExposeDuration; +@property (nonatomic) CGFloat vaildExposeShowRate; +@property (nonatomic) CGFloat exposeVaildDuration; +@property (nonatomic) int videoPlayType; +@property (nonatomic) NSString *mzVideoMidPoint; +@property (nonatomic) int videoDuration; +@property (nonatomic) BOOL isMZURL; +@property (nonatomic) BOOL isNeedRecord; +@property (nonatomic) BOOL mzMidOver; +@property (nonatomic) BOOL mzEndOver; @property (nonatomic, weak) id delegate; diff --git a/MobileTracking/Viewability/VAMonitor.m b/MobileTracking/Viewability/VAMonitor.m index 4a65be0b9a013d7b6567d222babf774609a3c967..4ea0599094751e9303e1f1d914bf42c63c609160 100644 --- a/MobileTracking/Viewability/VAMonitor.m +++ b/MobileTracking/Viewability/VAMonitor.m @@ -45,7 +45,8 @@ _timeline = [[VAMonitorTimeline alloc] initWithMonitor:self]; _isValid = NO; _keyValueAccess = keyValueAccess; - + _mzMidOver = NO; + _mzEndOver = NO; self.status = VAMonitorStatusRuning; } return self; @@ -92,6 +93,12 @@ - (void)verifyExpose { //曝光有效间隔和最大时长达标,等待上报 + //mzcommit-满足条件进行中点监测,否则把mzEndOver置成true,走普通的数据上报流程 + if (self.isVideo && self.videoDuration > 0) { + [self mzMidPointVerifyUpload]; + } else { + _mzEndOver = YES; + } // 条件1: 达到曝光最大时长并且当前广告未正在进行曝光 if(self.timeline.monitorDuration >= _config.maxDuration && self.timeline.exposeDuration < 0.001) { @@ -102,11 +109,18 @@ } // 条件2: 当前曝光时长已经满足曝光上报条件阈值 - CGFloat exposeVaildDuration = _isVideo ? _config.videoExposeValidDuration : _config.exposeValidDuration; - if(self.timeline.exposeDuration >= exposeVaildDuration) { + if (_isMZURL && _validExposeDuration > 0) { + _exposeVaildDuration = _validExposeDuration; + } else { + _exposeVaildDuration = _isVideo ? _config.videoExposeValidDuration : _config.exposeValidDuration; + } + if(self.timeline.exposeDuration >= _exposeVaildDuration && !_isValid) { NSLog(@"ID:%@满足曝光条件进行上报等待,广告位监测帧数:%ld",self.impressionID,[self.timeline count]); _isValid = YES; - self.status = VAMonitorStatusWaitingUpload; + if(_mzEndOver) { + //中点监测结束,才停止定时器 + self.status = VAMonitorStatusWaitingUpload; + } [self generateUpload]; return; } @@ -136,12 +150,25 @@ - (NSString *)generateUpload { - NSDictionary *parmaters = @{ - IMPRESSIONID : _impressionID, - AD_VB_EVENTS : [self.timeline generateUploadEvents], // 9字段 - AD_VB : [NSString stringWithFormat:@"%d",_isValid], - AD_MEASURABILITY : @"1" // 是否可测量 - }; + NSMutableDictionary *parmaters; + if (self.isMZURL) { + parmaters = [[NSMutableDictionary alloc] initWithObjectsAndKeys:_impressionID,IMPRESSIONID, + [NSString stringWithFormat:@"%d",_isValid?1:4],MZ_VIEWABILITY, + [NSString stringWithFormat:@"%d",(int)_exposeVaildDuration],MZ_VIEWABILITY_THRESHOLD, + nil]; + if (self.isNeedRecord) { + [parmaters setValue:[self.timeline generateUploadEvents] forKey:AD_VB_EVENTS]; + } + if (self.isVideo) { + [parmaters setValue:[NSString stringWithFormat:@"%d", _videoPlayType] forKey:MZ_VIEWABILITY_VIDEO_PLAYTYPE]; + } + } else { + parmaters = [[NSMutableDictionary alloc] initWithObjectsAndKeys:_impressionID,IMPRESSIONID, + [self.timeline generateUploadEvents],AD_VB_EVENTS, + [NSString stringWithFormat:@"%d",_isValid],AD_VB, + @"1",AD_MEASURABILITY, + nil]; + } NSMutableDictionary *accessDictionary = [NSMutableDictionary dictionary]; @@ -155,11 +182,50 @@ [_delegate monitor:self didReceiveData:accessDictionary]; } - self.status = VAMonitorStatusUploaded; + if(!(_isValid && !_mzEndOver)) { + //可见但中点监测没结束,先不停定时器 + self.status = VAMonitorStatusUploaded; + } return @""; } +- (void)mzMidPointVerifyUpload { + if (_mzEndOver) { + return; + } + + if (!_mzMidOver && self.timeline.monitorDuration >= _videoDuration/2) { + _mzMidOver = YES; + NSMutableDictionary *accessDictionary = [NSMutableDictionary dictionary]; + if ([self canRecord:IMPRESSIONID]) { + accessDictionary[[self keyQuery:IMPRESSIONID]] = _impressionID; + } + accessDictionary[self.mzVideoMidPoint] = @"mid"; + if(self.delegate && [self.delegate respondsToSelector:@selector(monitor:didReceiveData:)]) { + [_delegate monitor:self didReceiveData:accessDictionary]; + } + } + + if (!_mzEndOver && self.timeline.monitorDuration >= _videoDuration) { + _mzEndOver = YES; + if(_isValid) { + self.status = VAMonitorStatusWaitingUpload; + } + NSMutableDictionary *accessDictionary = [NSMutableDictionary dictionary]; + if ([self canRecord:IMPRESSIONID]) { + accessDictionary[[self keyQuery:IMPRESSIONID]] = _impressionID; + } + accessDictionary[self.mzVideoMidPoint] = @"end"; + if(self.delegate && [self.delegate respondsToSelector:@selector(monitor:didReceiveData:)]) { + [_delegate monitor:self didReceiveData:accessDictionary]; + } + if(_isValid) { + self.status = VAMonitorStatusUploaded; + } + } +} + - (void)dealloc { NSLog(@"ID:%@ deallocd",self.impressionID); } diff --git a/MobileTracking/Viewability/VAMonitorConfig.m b/MobileTracking/Viewability/VAMonitorConfig.m index fe3a8f38fc0aff768a367b19468d8ec03cbdae9e..292b0c7ae1005e50c026397c87d548f45c4810e4 100644 --- a/MobileTracking/Viewability/VAMonitorConfig.m +++ b/MobileTracking/Viewability/VAMonitorConfig.m @@ -17,9 +17,9 @@ - (instancetype)init { self = [super init]; _maxDuration = 120; // 默认监测时长 - _exposeValidDuration = 2; // 普通曝光达标时长(秒) - _videoExposeValidDuration = 1; // 视频曝光达标时长(秒) - _monitorInterval = 0.2; // 监测事件间隔(秒) + _exposeValidDuration = 1; // 普通曝光达标时长(秒) + _videoExposeValidDuration = 2; // 视频曝光达标时长(秒) + _monitorInterval = 0.1; // 监测事件间隔(秒) _cacheInterval = 1; // 缓存事件间隔(秒) _vaildExposeShowRate = 0.5; // 有效曝光比例 _maxUploadCount = 10; //最大可上传监测节点数量 diff --git a/MobileTracking/Viewability/VAMonitorFrame.h b/MobileTracking/Viewability/VAMonitorFrame.h index c94897924b0519a87737d08d58fdb570ff401b13..2fd8b9b113274c3c180f22c81d30708aa35ec528 100644 --- a/MobileTracking/Viewability/VAMonitorFrame.h +++ b/MobileTracking/Viewability/VAMonitorFrame.h @@ -26,7 +26,7 @@ @property (nonatomic,readonly) CGFloat coverRate; // 被覆盖比例 -- (instancetype)initWithView:(UIView *)view; +- (instancetype)initWithView:(UIView *)view isMZURL:(BOOL)isMZURL; - (BOOL)isVisible; diff --git a/MobileTracking/Viewability/VAMonitorFrame.m b/MobileTracking/Viewability/VAMonitorFrame.m index efd98eb262909b3b542f6d52a976434b1fb3ae4c..f74cc1bc39856ab7a72b68d9f6c30db1ae3305b8 100644 --- a/MobileTracking/Viewability/VAMonitorFrame.m +++ b/MobileTracking/Viewability/VAMonitorFrame.m @@ -14,20 +14,24 @@ @implementation VAMonitorFrame -- (instancetype)initWithView:(UIView *)view { +- (instancetype)initWithView:(UIView *)view isMZURL:(BOOL)isMZURL { if(!view) { return nil; } if (self = [super init]) { - _frame = view.frame; _windowFrame = view.frameOnKeyWindow; - _showFrame = view.showOnKeyWindow; _alpha = view.alpha; _hidden = view.hidden; - _isForground = !([UIApplication sharedApplication].applicationState==UIApplicationStateBackground); + _isForground = [UIApplication sharedApplication].applicationState==UIApplicationStateActive; //判断遮挡和焦点 _captureDate = [NSDate date]; - _coverRate = 1 - (_showFrame.size.width * _showFrame.size.height) / (_frame.size.width * _frame.size.height); + if (isMZURL) { + _coverRate = 1 - [self getVisibilityRate:view]; + } else { + _frame = view.frame; + _showFrame = view.showOnKeyWindow; + _coverRate = 1 - (_showFrame.size.width * _showFrame.size.height) / (_frame.size.width * _frame.size.height); + } } return self; } @@ -49,6 +53,58 @@ return NO; } +-(CGFloat)getVisibilityRate:(UIView *)adView +{ + if (adView == nil) { + NSLog(@"#MZ Warning: View is nil, please check input parameter."); + return 0; + } + + // 获取屏幕区域 + CGRect screenRect = [UIScreen mainScreen].bounds; + if (CGRectIsEmpty(screenRect) || CGRectIsNull(screenRect)) { + NSLog(@"#MZ Warning: Screen rect is null."); + return 0; + } + + // 转换view对应window的Rect + UIWindow * window = [[[UIApplication sharedApplication] delegate] window]; + CGRect rect = [adView convertRect: adView.bounds toView:window]; + if (CGRectIsEmpty(rect) || CGRectIsNull(rect)) { + return 0; + } + _frame = rect; + + // 转换父view对应window的Rect + CGRect superRect = [adView.superview convertRect: adView.superview.bounds toView:window]; + if (CGRectIsEmpty(superRect) || CGRectIsNull(superRect)) { + return 0; + } + + // 获取父view与window交叉的可视区域Rect + CGRect visibleRect = CGRectIntersection(superRect, screenRect); + if (CGRectIsEmpty(visibleRect) || CGRectIsNull(visibleRect)) { + return 0; + } + + // 获取adView与可视区域的交叉Rect + CGRect intersectionRect = CGRectIntersection(rect, visibleRect); + if (CGRectIsEmpty(intersectionRect) || CGRectIsNull(intersectionRect)) { + return 0; + } + _showFrame = intersectionRect; + + // NSLog(@"#MZ Warning, rects(\n\tscreenRect:%@, \n\tadview:%@, \n\tfatherview:%@, \n\tvisible:%@, \n\tfinally:%@\n\t)", + // NSStringFromCGRect(screenRect),NSStringFromCGRect(rect),NSStringFromCGRect(superRect),NSStringFromCGRect(visibleRect),NSStringFromCGRect(intersectionRect)); + + // 计算可视面积 + if(rect.size.height == 0 || rect.size.width == 0) { + return 0; + } + else { + return (intersectionRect.size.height * intersectionRect.size.width) / (rect.size.height * rect.size.width); + } +} #pragma mark ---- Coder diff --git a/MobileTracking/Viewability/VAMonitorTimeline.h b/MobileTracking/Viewability/VAMonitorTimeline.h index 2262986eea7f76581f00d8c6f963cd75af58e2e0..e63f01a30bac727998e924ad4859d96738823295 100644 --- a/MobileTracking/Viewability/VAMonitorTimeline.h +++ b/MobileTracking/Viewability/VAMonitorTimeline.h @@ -13,6 +13,8 @@ @property (nonatomic) CGFloat exposeDuration; @property (nonatomic) CGFloat monitorDuration; @property (nonatomic, weak) VAMonitor *monitor; +@property (nonatomic) BOOL prevIsVisibleSlice; +@property (nonatomic) BOOL isVisibleSlice; - (instancetype)initWithMonitor:(VAMonitor *)monitor; diff --git a/MobileTracking/Viewability/VAMonitorTimeline.m b/MobileTracking/Viewability/VAMonitorTimeline.m index 4bac27f3350d9501a73a1d617bdb484d47824b6d..1f6c4a65dda4635077f8b369b1d55d6ea6c6289d 100644 --- a/MobileTracking/Viewability/VAMonitorTimeline.m +++ b/MobileTracking/Viewability/VAMonitorTimeline.m @@ -19,7 +19,6 @@ @property (nonatomic, strong) VAMonitorFrame *visibleStart; @property (nonatomic, strong) VAMonitorFrame *end; @property (nonatomic, strong) NSMutableArray *frames; - @end @@ -30,6 +29,8 @@ self.frames = [NSMutableArray array]; _exposeDuration = 0; _monitorDuration = 0; + _isVisibleSlice = NO; + _prevIsVisibleSlice = NO; _monitor = monitor; } return self; @@ -44,12 +45,37 @@ return; } + /** + * 计算曝光时长 + */ + CGFloat monitorCoverRate; + if(self.monitor.isMZURL && self.monitor.vaildExposeShowRate > 0 && self.monitor.vaildExposeShowRate < 1) { + monitorCoverRate = self.monitor.vaildExposeShowRate; + } else { + monitorCoverRate = self.monitor.config.vaildExposeShowRate; + } + if([frame isVisible] && (1 - frame.coverRate) >= monitorCoverRate) { // 当前帧可见 累计曝光时间. + _isVisibleSlice = YES; + if(!_visibleStart) { + _visibleStart = frame; + } + _exposeDuration = [frame.captureDate timeIntervalSinceDate:_visibleStart.captureDate]; + + } else { // 当前帧不可见 曝光时间重置 + _isVisibleSlice = NO; + _visibleStart = nil; + _exposeDuration = 0; + } + + _monitorDuration = [_end.captureDate timeIntervalSinceDate:_start.captureDate]; + NSLog(@"ID:%p 持续监测时长:%f 曝光时长:%f",self,_monitorDuration,_exposeDuration); + /** * 第一个添加为首 然后判断是否需要记录与end 相比较相同则放弃,end 换为当前帧 */ if(!_frames.count ) { NSLog(@"start 帧保存成功"); - + _start = frame; } @@ -60,29 +86,11 @@ [_frames removeObjectAtIndex:0]; } NSLog(@"当前帧发生变更记录%@",frame.captureDate); - + _prevIsVisibleSlice = _isVisibleSlice; } _end = frame; - - - /** - * 计算曝光时长 - */ - if([frame isVisible] && (1 - frame.coverRate) >= self.monitor.config.vaildExposeShowRate) { // 当前帧可见 累计曝光时间. - if(!_visibleStart) { - _visibleStart = frame; - } - _exposeDuration = [frame.captureDate timeIntervalSinceDate:_visibleStart.captureDate]; - - } else { // 当前帧不可见 曝光时间重置 - _visibleStart = nil; - _exposeDuration = 0; - } - _monitorDuration = [_end.captureDate timeIntervalSinceDate:_start.captureDate]; - NSLog(@"ID:%p 持续监测时长:%f 曝光时长:%f",self,_monitorDuration,_exposeDuration); - } - (BOOL)needRecord:(VAMonitorFrame *)frame { @@ -91,9 +99,13 @@ return YES; } - // 与end 相同 不记录 - if([_end isEqualFrame:frame]) { - return NO; + if (self.monitor.isMZURL) { + return _prevIsVisibleSlice != _isVisibleSlice; + } else { + // 与end 相同 不记录 + if([_end isEqualFrame:frame]) { + return NO; + } } return YES; @@ -142,10 +154,13 @@ AD_VB_SHOWFRAME : VAStringFromSize(obj.showFrame.size), // 广告可视尺寸 AD_VB_FORGROUND : [NSString stringWithFormat:@"%d",obj.isForground] // 是否前台 }; - + NSMutableDictionary *accessDictionary = [NSMutableDictionary dictionary]; [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key,NSString *obj, BOOL * _Nonnull stop) { if([self.monitor canRecord:key]) { + if (self.monitor.isMZURL && [key isEqualToString:AD_VB_HIDE]) { + obj = [obj isEqualToString:@"1"]?@"0":@"1"; + } accessDictionary[[self.monitor keyQuery:key]] = obj; } }]; diff --git a/MobileTracking/Viewability/VAViewMonitor.m b/MobileTracking/Viewability/VAViewMonitor.m index f1e7c4da443b6173435998e552dd1aff21c8d411..8fa510f9b5d5eb2dc31b35f200257e09036c4b25 100644 --- a/MobileTracking/Viewability/VAViewMonitor.m +++ b/MobileTracking/Viewability/VAViewMonitor.m @@ -12,7 +12,7 @@ @implementation VAViewMonitor - (void)captureAdStatus { - VAMonitorFrame *frame = [[VAMonitorFrame alloc] initWithView:self.adView]; + VAMonitorFrame *frame = [[VAMonitorFrame alloc] initWithView:self.adView isMZURL:self.isMZURL]; NSLog(@"ID:%@ 捕获数据中:%@",self.impressionID,frame); [self.timeline enqueueFrame:frame]; } diff --git a/OutputRelease/MobileTracking.h b/OutputRelease/MobileTracking.h index 159bd517bd779b125fdcda929f0dfdb136a77eee..53b41118963d3be8117a2a80d64c2e2bcb86b049 100755 --- a/OutputRelease/MobileTracking.h +++ b/OutputRelease/MobileTracking.h @@ -6,7 +6,7 @@ // Copyright (c) 2014年 Admaster. All rights reserved. // -//#define MMA_SDK_VERSION @"1.3.4" +//#define MMA_SDK_VERSION @"V2.0.0" #import @@ -28,11 +28,18 @@ // 普通曝光 - (void)view:(NSString *)url; +// 可视化监测曝光 +- (void)view:(NSString *)url ad:(UIView *)adView; + // 视频可视化监测曝光 - (void)viewVideo:(NSString *)url ad:(UIView *)adView; +- (void)viewVideo:(NSString *)url ad:(UIView *)adView videoPlayType:(NSInteger)type;//type:视频播放类型,1-自动播放,2-手动播放,0-无法识别 -// 可视化监测曝光 -- (void)view:(NSString *)url ad:(UIView *)adView; +// 普通曝光 +- (void)jsView:(NSString *)url ad:(UIView *)adView; + +// 视频可视化监测曝光 +- (void)jsViewVideo:(NSString *)url ad:(UIView *)adView; // 清空待发送任务队列和发送失败任务队列 - (BOOL)clearAll; diff --git a/OutputRelease/libMobileTrackingDevice.a b/OutputRelease/libMobileTrackingDevice.a index f3195c92755e518859574931c75f36440856a202..d52a3b6a4f638b89e5d7bba6f57223a586d8acbd 100644 Binary files a/OutputRelease/libMobileTrackingDevice.a and b/OutputRelease/libMobileTrackingDevice.a differ diff --git a/OutputRelease/sdkconfig.xml b/OutputRelease/sdkconfig.xml index 90f106dc464c578f6e953a623198adcf689e8acf..09091117cdc69d3baef9cffa5d0193bc2d76e652 100755 --- a/OutputRelease/sdkconfig.xml +++ b/OutputRelease/sdkconfig.xml @@ -12,13 +12,13 @@ - 200 + 100 50 - 2 + 1 - 1 + 2 120 @@ -279,5 +279,280 @@ true + + miaozhen + + + .miaozhen.com + + + DbXiUlEVN + mf + + + true + + 604800 + + raw + raw + raw + raw + + + + + + + + OS + mo + true + true + + + + TS + mt + true + true + + + + MAC + m7 + true + true + + + + IDFA + m5 + true + true + + + IMEI + m3 + true + true + + + + ANDROIDID + m1 + true + true + + + + NETWORKTYPE + mw + true + true + + + + AKEY + mp + true + true + + + + ANAME + mn + true + true + + + + SCWH + mh + true + true + + + + OPENUDID + m0 + true + true + + + TERM + md + true + true + + + + OSVS + me + true + true + + + + LBS + mm + true + true + + + SDKVS + mv + true + true + + + REDIRECTURL + o + true + true + + + + + + start + mb=start + true + + + + end + mb=end + true + + + + + Adplacement + p + false + false + + + + + + + ImpressionID + vf + true + true + + + AdviewabilityEvents + vd + true + true + + + AdviewabilityTime + 1 + true + true + + + AdviewabilityFrame + 2 + true + true + + + AdviewabilityPoint + 3 + true + true + + + AdviewabilityAlpha + 4 + true + true + + + AdviewabilityHide + 5 + true + true + + + AdviewabilityCoverRate + 6 + true + true + + + AdviewabilityShowFrame + 7 + true + true + + + AdviewabilityForground + 8 + true + true + + + MZviewabilityThreshold + ve + true + true + + + MZviewabilityVideoPlayType + vg + true + true + + + MZviewabilityVideoProgress + vc + true + true + + + MZviewabilityVideoDuration + vb + true + true + + + MZviewabilityRecord + va + true + true + + + MZviewability + vx + true + true + + + MZviewabilityConfigArea + vh + true + true + + + MZviewabilityConfigThreshold + vi + true + true + + + + + & + + = + + true + diff --git a/README.md b/README.md index 85586efaf39c4704955cdf45cb72de23eaa528eb..e725a97e8b46425d89c273c69f35ab6922edd40d 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -## Admaster iOS SDK 部署指南 +## MMA iOS SDK 部署指南 -### 步骤1:添加 Admaster iOS SDK 到工程中 +### 步骤1:添加 MMA iOS SDK 到工程中 1. 将SDK发布文件中,release目录下的**MobileTracking.h** 、**libMobileTracking.a**、**sdkconfig.xml** 三个文件拷贝到项目工程中,将 **sdkconfig.xml** 上传到 web 服务器,使其可以通过 web 方式访问,假设其地址为 **http://xxxxxx.com/sdkconfig.xml**(其后会用到)。 2. 在项目工程 App 的 Target Build Settings 中的 **Other Linker Flags** 选项里添加 **-lxml2** **-all_load** 或 **-lxml2** **-force_load** 静态库的绝对路径 @@ -33,37 +33,42 @@ SDK 会自动下载远程的配置文件,使用最新的配置文件进行参 * 第一个参数为第三方公司的监测地址 * 第二个参数为当前广告视图对象(**可视化广告监测为必传字段,普通广告监测默认缺省。**) + * 第三个参数为当前视频广告的播放类型(**视频可视化广告监测为可选字段,1-自动播放,2-手动播放,0-无法识别。**) 普通广告监测 ``` -[[MobileTracking sharedInstance] view:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201”]; +[[MobileTracking sharedInstance] view:@"http://example.com/xxxxxx”]; ``` 可见性广告监测 ``` -[[MobileTracking sharedInstance] view:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201” ad:adview]; +[[MobileTracking sharedInstance] view:@"http://example.com/xxxxxx” ad:adview]; ``` 视频可见性广告监测 ``` -[[MobileTracking sharedInstance] viewVideo:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201” ad:adview]; +[[MobileTracking sharedInstance] viewVideo:@"http://example.com/xxxxxx” ad:adview]; + +``` +``` +[[MobileTracking sharedInstance] viewVideo:@"http://example.com/xxxxxx” ad:adview videoPlayType:type]; ``` 可见性广告JS监测 ``` -[[MobileTracking sharedInstance] jsView:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201” ad:adview]; +[[MobileTracking sharedInstance] jsView:@"http://example.com/xxxxxx” ad:adview]; ``` 视频可见性广告JS监测 ``` -[[MobileTracking sharedInstance] jsViewVideo:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201” ad:adview]; +[[MobileTracking sharedInstance] jsViewVideo:@"http://example.com/xxxxxx” ad:adview]; ``` @@ -71,7 +76,7 @@ SDK 会自动下载远程的配置文件,使用最新的配置文件进行参 通过调用以下的代码进行点击的监测,参数为第三方公司的监测地址 ``` -[[MobileTracking sharedInstance] click:@"http://vxyz.admaster.com.cn/v/a17298,b81949763,c3194,i0,m201"]; +[[MobileTracking sharedInstance] click:@"http://example.com/xxxxxx"]; ``` #### 5、进入后台时调用 @@ -111,8 +116,5 @@ SDK 的测试有两个方面: 1. 参数是否齐全,URL 拼接方式是否正确 2. 请求次数和第三方监测平台是否能对应上 -针对第一点,使用 Admaster SDK 测试平台进行测试和验证,登入 http://developer.admaster.com.cn/, 根据页面上的提示进行调用, 页面会实时显示出服务器接收到的信息,如果和本地的设备相关信息一致,则表示测试通过。 - -针对第二点,建议使用第三方监测系统的正式环境进行测试,主要对比媒体自身广告系统监测数据和第三方监测数据数量上的差异。 - +请联系第三方监测平台完成测试