iOS 데이터 에스컬레이션 모듈 패키징 시나리오

14311 단어
우리의 업무가 갈수록 무거워지고 데이터에 대한 요구도 점점 높아지기 때문에 업무 코드에 대량의 데이터 보고 코드를 삽입해야 하고 대부분은 풀 코드이다.
그래서 사람의 효율을 높이고 결합을 낮추며 업무 코드를 간소화하는 등 목적을 위해 드디어!나는 이 부분의 코드를 재구성했다.

기초 틀


여기에서:
  • YGtracking을 베이스 클래스로 합니다.타사 SDK 초기화, 이벤트 전송, 타사 캡슐화 방법
  • YGtracking Enum은 매거진 정의 클래스로서 주요 기능은 매거진을 정의하는 것이다
  • YGtrackingBaseModel은 데이터의 기초 클래스를 정의하고 모든 다른 데이터 정의 모델은 이를 계승한다.주요 기능, 즉 에스컬레이션에 필요한 파라미터를 정의하고 외부 파라미터에 따라 이벤트 이름을 정의하고 데이터를 포맷하며 에스컬레이션 플랫폼을 구분한다(현재 우리는 Talking과 신책 두 플랫폼이 있다)
  • 2. 사용 방법


    외부 사용법은 간단한데 다음과 같이 요약할 수 있다.
  • 모델 만들기
  • 모델 할당 데이터(업무에 필요한 보고 매개 변수)
  • 에스컬레이션 플랫폼 정의
  • 에스컬레이션 이벤트 정의
  • 에스컬레이션 매개변수 정의
  • 에스컬레이션 시작
  • 예를 들면 다음과 같습니다.
    //      model
    YGTrackingModel(YGTrackingPlayActionModel)
    // model         
    ygTrackingModel.plan = self.plan;
    ygTrackingModel.course = self.course;
    ygTrackingModel.playTime = self.actualPlayingTime;
    ygTrackingModel.actionType = YGTrackingPlayActionTypeFinish;
    //    
    YGTrackingGo
    

    외부 호출은 업무와 관련된 매개 변수에만 관심을 가지면 되며, 다른 일은 모델에 봉인되어 진행됩니다

    3. 코드 실현


    YGTracking.h

    #import 
    
    #import "SensorsAnalyticsSDK.h"
    #import 
    #import "YGTrackingEnum.h"
    #import "TalkingData.h"
    
    #pragma mark - model.h
    #import "YGTrackingClickSearchResultModel.h"
    #import "YGTrackingShareEndActionModel.h"
    #import "YGTrackingEvaluateActionModel.h"
    #import "YGTrackingDownloadActionModel.h"
    #import "YGTrackingClickGeneralModel.h"
    #import "YGTrackingWatchActionModel.h"
    #import "YGTrackingShareActionModel.h"
    #import "YGTrackingPageGeneralModel.h"
    #import "YGTrackingPlayActionModel.h"
    #import "YGTrackingShareModel.h"
    #import "YGTrackingOldAdModel.h"
    #import "YGTrackVideoAdModel.h"
    #import "YGTrackingDealModel.h"
    #import "YGTrackingBaseModel.h"
    #import "YGTrackingPostModel.h"
    #import "YGTrackingAdModel.h"
    
    ///    model  
    #define YGTrackingModel(A) A *ygTrackingModel = [[A alloc]init];
    ///   model    
    #define YGTrackingGo [YGTracking trackModel:ygTrackingModel];
    
    
    @interface YGTracking : NSObject
    
    /**
          SDK
     */
    + (void)registTrackSDK;
    
    /**
         webview    
     */
    + (BOOL)showUpWebView:(id)webView WithRequest:(NSURLRequest *)request;
    
    
    /**
       model  
     */
    + (void)trackModel:(YGTrackingBaseModel *)model;
    
    /**
           
     */
    + (void)trackEvent:(NSString *)event property:(NSDictionary *)property supportPlatform:(YGAdTrackingPlatform)supportPlatform;
    
    @end
    

    YGTracking.m

    #import "YGTracking.h"
    #import "NSString+YGAddition.h"
    
    @implementation YGTracking
    /**
          SDK
     */
    + (void)registTrackSDK {
        // TalkingData
        [TalkingData backgroundSessionEnabled];
        [TalkingData sessionStarted:kYGTalkingDataKey withChannelId:@"AppStore"];
        [TalkingData setLogEnabled:NO];
    
        //   SDK   
        [SensorsAnalyticsSDK sharedInstanceWithServerURL:kYGSensorsReportURL
                                            andDebugMode:SensorsAnalyticsDebugOff];
    
        //        
        [[SensorsAnalyticsSDK sharedInstance] registerSuperProperties:@
         {
         @"PlatformType": @"iOS"
        }];
        //          ,         AutoTrack   
        [[SensorsAnalyticsSDK sharedInstance] enableAutoTrack:SensorsAnalyticsEventTypeAppStart];
        [[SensorsAnalyticsSDK sharedInstance]trackInstallation:@"AppInstall"];
        //     H5
        [[SensorsAnalyticsSDK sharedInstance] enableLog:NO];
        NSLog(@"    :%@", [[SensorsAnalyticsSDK sharedInstance]libVersion]);
    }
    
    /**
         webview    
     */
    + (BOOL)showUpWebView:(id)webView WithRequest:(NSURLRequest *)request {
        return [[SensorsAnalyticsSDK sharedInstance]showUpWebView:webView WithRequest:request];
    }
    
    /**
       model  
     */
    + (void)trackModel:(YGTrackingBaseModel *)model {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSString *event = [model enventName];
            NSDictionary *property = [model trackParam];
            if (![event formatNull]
                || !IS_DICTIONARY(property)) {
                return;
            }
            if ([model supportPlatform] & YGAdTrackingPlatformSensor) {
                [[SensorsAnalyticsSDK sharedInstance]track:event withProperties:property];
            }
            if ([model supportPlatform] & YGAdTrackingPlatformTD) {
                [TalkingData trackEvent:event label:@"" parameters:property];
            }
        });
    }
    
    /**
           
     */
    + (void)trackEvent:(NSString *)event property:(NSDictionary *)property supportPlatform:(YGAdTrackingPlatform)supportPlatform {
        if (![event formatNull]
            || !IS_DICTIONARY(property)) {
            return;
        }
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            if (supportPlatform & YGAdTrackingPlatformSensor) {
                [[SensorsAnalyticsSDK sharedInstance]track:event withProperties:property];
            }
            if (supportPlatform & YGAdTrackingPlatformTD) {
                [TalkingData trackEvent:event label:@"" parameters:property];
            }
        });
    }
    
    @end
    

    YGTrackingBaseModel.h

    #import 
    @interface YGTrackingBaseModel : NSObject
    /**
              
     */
    - (YGAdTrackingPlatform)supportPlatform;
    /**
          
     */
    - (NSString *)enventName;
    /**
             dic
     */
    - (NSDictionary *)trackParam;
    @end
    

    YGTrackingBaseModel.m

    #import "YGTrackingBaseModel.h"
    
    @implementation YGTrackingBaseModel
    /**
              
     */
    - (YGAdTrackingPlatform)supportPlatform {
        return 0;
    }
    /**
          
     */
    - (NSString *)enventName {
        return @"";
    }
    /**
             dic
     */
    - (NSDictionary *)trackParam {
        return nil;
    }
    @end
    

    현재 이 기본 클래스*YGtrackingBaseModel*은 일부 허함수를 실현하기 위해 존재하고 함수 실현은 주로 하위 클래스에 있으며 다음은 하위 클래스를 예로 붙인다.


    YGTrackingAdModel.h

    #import "YGTrackingBaseModel.h"
    @interface YGTrackingAdModel : YGTrackingBaseModel
    ///       YGAdTrackingModelType   /  。。。
    @property(nonatomic, assign)YGAdTrackingModelType modelType;
    ///       YGAdTrackingType   /  /  
    @property(nonatomic, assign)YGAdTrackingType trackingType;
    ///     id
    @property(nonatomic, copy)NSString *adID;
    ///        (     )
    @property(nonatomic, assign)YGOpenLinkType adType;
    ///        (  /  。。。)
    @property(nonatomic, assign)YGAdResourceType adResourceType;
    ///          
    @property(nonatomic, assign)NSInteger pageID;
    ///          id/  id
    @property(nonatomic, copy)NSString *referID;
    ///         id
    @property(nonatomic, copy)NSString *contentID;
    ///    
    @property(nonatomic, assign)NSInteger index;
    @end
    

    YGTrackingAdModel.m

    #import "YGTrackingAdModel.h"
    
    @implementation YGTrackingAdModel
    /**
              
     */
    - (YGAdTrackingPlatform)supportPlatform {
        if (self.trackingType == YGAdTrackingTypeClick) {
            return YGAdTrackingPlatformSensor | YGAdTrackingPlatformTD;
        }
        return YGAdTrackingPlatformTD;
    }
    /**
          
     */
    - (NSString *)enventName {
        if (self.modelType == YGAdTrackingTypeRecommend) {
            if (self.trackingType == YGAdTrackingTypeDisplay) {
                return @"view_operation_recommend";
            }
            if (self.trackingType == YGAdTrackingTypeClick) {
                return @"click_operation_recommend";
            }
            if (self.trackingType == YGAdTrackingTypeClose) {
                return @"close_operation_recommend";
            }
        }
        
        if (self.modelType == YGAdTrackingTypeOpenScreen) {
            if (self.trackingType == YGAdTrackingTypeDisplay) {
                return @"view_operation_open_screen";
            }
            if (self.trackingType == YGAdTrackingTypeClick) {
                return @"click_operation_open_screen";
            }
            
        }
    
        if (self.modelType == YGAdTrackingTypeTips) {
            if (self.trackingType == YGAdTrackingTypeDisplay) {
                return @"view_operation_tips";
            }
            if (self.trackingType == YGAdTrackingTypeClick) {
                return @"click_operation_tips";
            }
            if (self.trackingType == YGAdTrackingTypeClose) {
                return @"close_operation_tips";
            }
        }
        
        if (self.modelType == YGAdTrackingTypeTips) {
            if (self.trackingType == YGAdTrackingTypeDisplay) {
                return @"view_operation_banner";
            }
            if (self.trackingType == YGAdTrackingTypeClick) {
                return @"click_operation_banner";
            }
            if (self.trackingType == YGAdTrackingTypeClose) {
                return @"close_operation_banner";
            }
        }
        return @"";
    }
    /**
             dic
     */
    - (NSDictionary *)trackParam {
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        [params setValue:self.adID forKey:@"ad_id"];
        [params setValue:@(self.adType) forKey:@"ad_type"];
        [params setValue:@(self.adResourceType) forKey:@"ad_resource_type"];
        [params setValue:@(self.pageID) forKey:@"page_id"];
        [params setValue:[NSString stringWithFormat:@"%@_%@", @(self.pageID), self.referID] forKey:@"refer_id"];
        [params setValue:self.contentID forKey:@"contentid"];
        [params setValue:@(self.index) forKey:@"frame"];
        return params;
    }
    @end
    

    후속으로 시간 증가 필드든 이벤트 이름 교체든 같은 원본 행위 증가 사건이든 상응하는 모델을 직접 수정하면 된다. 업무 코드에 대한 수정이 비교적 적다. 특히 과정이나 광고와 관련된 사건처럼 자체 데이터가 모델에 보고된 참여수는 과정 모델이나 광고 자체 모델이고 업무 코드는 거의 변경할 필요가 없다.
    또한 스레드 변경, 데이터 에스컬레이션 플랫폼 교체 등 모든 작업을 중앙 집중식으로 수행할 수 있습니다.
    향후 Dell 데이터 에스컬레이션 작업은 더욱 효율적이고 선명해지며, 비즈니스 행동으로 데이터를 구동하는 동시에 이 부분의 개발 효율성도 크게 향상시킬 것으로 믿습니다.
    전재 대상:https://juejin.im/post/5c3d7308f265da615b71ae70

    좋은 웹페이지 즐겨찾기