#import <Foundation/Foundation.h>
@interface MYGAI : NSObject
@property (nonatomic,strong) id ga;
- (void)trackEventWithCategory:(NSString *)category
withAction:(NSString *)action
withLabel:(NSString *)label
withValue:(NSNumber *)value;
@end
#import "MYGAI.h"
@implementation MYGAI
- (id)init
{
self = [super init];
if (self) {
Class GAIClass = NSClassFromString(@"GAI");
id gaInstance = [GAIClass performSelector:@selector(sharedInstance)];
self.ga = [gaInstance valueForKey:@"defaultTracker"];
}
return self;
}
- (void)trackEventWithCategory:(NSString *)category
withAction:(NSString *)action
withLabel:(NSString *)label
withValue:(NSNumber *)value
{
if (self.ga) {
Class GAIBuilder = NSClassFromString(@"GAIDictionaryBuilder");
if (!GAIBuilder) {
NSLog(@"GA统计失败---------请确保您使用的GAI Lib版本是3.0以上!");
NSException *exception = [NSException exceptionWithName:@"GA统计失败" reason:@"请确保您使用的GAI Lib版本是3.0以上!" userInfo:nil];
@throw exception;
return;
}
SEL createEvent = NSSelectorFromString(@"createEventWithCategory:action:label:value:");
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[GAIBuilder methodSignatureForSelector:createEvent]];
[inv setSelector:createEvent];
[inv setTarget:GAIBuilder];
[inv setArgument:&category atIndex:2];
[inv setArgument:&action atIndex:3];
[inv setArgument:&label atIndex:4];
[inv setArgument:&value atIndex:5];
[inv invoke];
// id gaiBuilder = nil;
__weak id gaiBuilder = nil; //这个地方如果不加 __weak 会导致崩溃(我的项目是ARC的)
[inv getReturnValue:&gaiBuilder];
NSDictionary *dict = [gaiBuilder performSelector:@selector(build)];
SEL sendAction = NSSelectorFromString(@"send:");
NSInvocation *invView = [NSInvocation invocationWithMethodSignature:[self.ga methodSignatureForSelector:sendAction]];
[invView setSelector:sendAction];
[invView setTarget:self.ga];
[invView setArgument:&dict atIndex:2];
[invView invoke];
NSLog(@"-----GAsdk统计走完--");
}
else{
NSLog(@"---ga为空---gasdk统计失败");
}
}
@end