...
|
...
|
@@ -34,7 +34,6 @@ |
|
|
|
|
|
#define kMinInterval 60
|
|
|
|
|
|
NSString * const JsonKeyData = @"data";
|
|
|
NSString * const JsonKeyDataTypeDevice = @"device";
|
|
|
NSString * const JsonKeyDataTypeStatus = @"status";
|
|
|
NSString * const JsonKeyDataTypeEvents = @"events";
|
...
|
...
|
@@ -52,7 +51,6 @@ NSString * const JsonKeyDataTypeErrors = @"errors"; |
|
|
@property (strong, nonatomic) NSTimer *timer;
|
|
|
@property (assign, nonatomic) NSTimeInterval currentInterval;
|
|
|
|
|
|
@property (strong, nonatomic) NSMutableDictionary *immediUploadDataDic;
|
|
|
@property (strong, nonatomic) NSMutableDictionary *immediUploadItemDic; // 用于立即发送策略下(device信息是相同的)
|
|
|
@property (strong, nonatomic) Reachability *reachability;
|
|
|
@property (strong, nonatomic) CLLocationManager *locationManager;
|
...
|
...
|
@@ -97,7 +95,6 @@ static dispatch_queue_t persisitingQueue; |
|
|
|
|
|
self.reachability = [Reachability reachabilityWithHostName:kAnalizedURL];
|
|
|
|
|
|
self.immediUploadDataDic = [[NSMutableDictionary alloc]initWithCapacity:1];
|
|
|
self.immediUploadItemDic = [[NSMutableDictionary alloc]initWithCapacity:4];
|
|
|
persisitingQueue = dispatch_queue_create("com.yoho.analytics.persisiting", NULL);
|
|
|
|
...
|
...
|
@@ -159,10 +156,6 @@ static dispatch_queue_t persisitingQueue; |
|
|
// 设置status
|
|
|
[self.immediUploadItemDic setObject: [[NSMutableArray alloc]initWithObjects:self.currentStatus.jsonDictionary, nil] forKey:JsonKeyDataTypeStatus];
|
|
|
|
|
|
// 封装成data
|
|
|
[self.immediUploadDataDic setObject:self.immediUploadItemDic forKey:JsonKeyData];
|
|
|
|
|
|
|
|
|
/*
|
|
|
检查发送模式
|
|
|
*/
|
...
|
...
|
@@ -259,27 +252,21 @@ static dispatch_queue_t persisitingQueue; |
|
|
//无本地持久化数据
|
|
|
if (!collectData) {
|
|
|
collectData = [[NSMutableDictionary alloc]init];
|
|
|
NSMutableDictionary *items = [[NSMutableDictionary alloc]init];
|
|
|
|
|
|
//直接添加 immediUploadDataDic 内容(里面包含 device 信息)
|
|
|
[items addEntriesFromDictionary:self.immediUploadItemDic];
|
|
|
[collectData addEntriesFromDictionary:self.immediUploadItemDic];
|
|
|
|
|
|
//组合event信息
|
|
|
if (event.jsonDictionary) {
|
|
|
NSMutableArray *events = [[NSMutableArray alloc]initWithObjects:event.jsonDictionary,nil];
|
|
|
self.allEventsCount = [events count];
|
|
|
[items setObject:events forKey:JsonKeyDataTypeEvents];
|
|
|
[collectData setObject:events forKey:JsonKeyDataTypeEvents];
|
|
|
}
|
|
|
|
|
|
[collectData setObject:items forKey:JsonKeyData];
|
|
|
|
|
|
|
|
|
} else { // 持久化文件不为空
|
|
|
|
|
|
// 含有event信息
|
|
|
NSMutableDictionary *items = [collectData objectForKey:JsonKeyData];
|
|
|
|
|
|
// 检查当前session与本地文件中最近存储的session是否相同
|
|
|
NSMutableArray *status = [items objectForKey:JsonKeyDataTypeStatus];
|
|
|
NSMutableArray *status = [collectData objectForKey:JsonKeyDataTypeStatus];
|
|
|
if ([status count]) {
|
|
|
|
|
|
NSMutableDictionary *tempStatus = [status lastObject];
|
...
|
...
|
@@ -288,27 +275,26 @@ static dispatch_queue_t persisitingQueue; |
|
|
[status addObject:self.currentStatus.jsonDictionary];
|
|
|
|
|
|
// 更新items中status
|
|
|
[items setObject:status forKey:JsonKeyDataTypeStatus];
|
|
|
[collectData setObject:status forKey:JsonKeyDataTypeStatus];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if ([items.allKeys containsObject:JsonKeyDataTypeEvents]) {
|
|
|
NSMutableArray *oldEvents = [items objectForKey:JsonKeyDataTypeEvents];
|
|
|
if ([collectData.allKeys containsObject:JsonKeyDataTypeEvents]) {
|
|
|
NSMutableArray *oldEvents = [collectData objectForKey:JsonKeyDataTypeEvents];
|
|
|
if (!oldEvents) {
|
|
|
oldEvents = [[NSMutableArray alloc]init];
|
|
|
}
|
|
|
[oldEvents addObject:event.jsonDictionary];
|
|
|
self.allEventsCount = [oldEvents count];
|
|
|
[items setObject:oldEvents forKey:JsonKeyDataTypeEvents];
|
|
|
[collectData setObject:oldEvents forKey:JsonKeyDataTypeEvents];
|
|
|
|
|
|
} else {
|
|
|
NSMutableArray *newEvents = [[NSMutableArray alloc]initWithObjects:event.jsonDictionary, nil];
|
|
|
self.allEventsCount = [newEvents count];
|
|
|
[items setObject:newEvents forKey:JsonKeyDataTypeEvents];
|
|
|
[collectData setObject:newEvents forKey:JsonKeyDataTypeEvents];
|
|
|
}
|
|
|
|
|
|
[collectData setObject:items forKey:JsonKeyData];
|
|
|
|
|
|
}
|
|
|
|
|
|
BOOL success = [collectData writeToFile:self.eventFileName atomically:YES];
|
...
|
...
|
@@ -359,26 +345,22 @@ static dispatch_queue_t persisitingQueue; |
|
|
- (void)writeToFile:(YHError *)errorData
|
|
|
{
|
|
|
NSMutableDictionary *collectData = [[NSMutableDictionary alloc]initWithContentsOfFile:self.eventFileName];
|
|
|
NSMutableDictionary *items = nil;
|
|
|
if (!collectData) {
|
|
|
collectData = [[NSMutableDictionary alloc]init];
|
|
|
items = [[NSMutableDictionary alloc]init];
|
|
|
//直接添加 immediUploadDataDic 内容(里面包含 device 信息)
|
|
|
[items addEntriesFromDictionary:self.immediUploadItemDic];
|
|
|
[collectData addEntriesFromDictionary:self.immediUploadItemDic];
|
|
|
|
|
|
//组合error信息
|
|
|
if (errorData.jsonDictionary) {
|
|
|
NSMutableArray *errors = [[NSMutableArray alloc]initWithObjects:errorData.jsonDictionary,nil];
|
|
|
[items setObject:errors forKey:JsonKeyDataTypeErrors];
|
|
|
[collectData setObject:errors forKey:JsonKeyDataTypeErrors];
|
|
|
}
|
|
|
|
|
|
|
|
|
} else { // 持久化文件不为空
|
|
|
|
|
|
items = [collectData objectForKey:JsonKeyData];
|
|
|
|
|
|
// 检查当前session与本地文件中最近存储的session是否相同
|
|
|
NSMutableArray *status = [items objectForKey:JsonKeyDataTypeStatus];
|
|
|
NSMutableArray *status = [collectData objectForKey:JsonKeyDataTypeStatus];
|
|
|
if ([status count]) {
|
|
|
|
|
|
NSMutableDictionary *tempStatus = [status lastObject];
|
...
|
...
|
@@ -387,25 +369,24 @@ static dispatch_queue_t persisitingQueue; |
|
|
[status addObject:self.currentStatus.jsonDictionary];
|
|
|
|
|
|
// 更新items中status
|
|
|
[items setObject:status forKey:JsonKeyDataTypeStatus];
|
|
|
[collectData setObject:status forKey:JsonKeyDataTypeStatus];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// 更新error信息
|
|
|
if ([items.allKeys containsObject:JsonKeyDataTypeErrors]) {
|
|
|
NSMutableArray *oldErrors = [items objectForKey:JsonKeyDataTypeErrors];
|
|
|
if ([collectData.allKeys containsObject:JsonKeyDataTypeErrors]) {
|
|
|
NSMutableArray *oldErrors = [collectData objectForKey:JsonKeyDataTypeErrors];
|
|
|
if (!oldErrors) {
|
|
|
oldErrors = [[NSMutableArray alloc]init];
|
|
|
}
|
|
|
[oldErrors addObject:errorData.jsonDictionary];
|
|
|
[items setObject:oldErrors forKey:JsonKeyDataTypeErrors];
|
|
|
[collectData setObject:oldErrors forKey:JsonKeyDataTypeErrors];
|
|
|
} else {
|
|
|
NSMutableArray *newErrors = [[NSMutableArray alloc]initWithObjects:errorData.jsonDictionary, nil];
|
|
|
[items setObject:newErrors forKey:JsonKeyDataTypeErrors];
|
|
|
[collectData setObject:newErrors forKey:JsonKeyDataTypeErrors];
|
|
|
}
|
|
|
}
|
|
|
[collectData setObject:items forKey:JsonKeyData];
|
|
|
[collectData writeToFile:self.eventFileName atomically:YES];
|
|
|
|
|
|
}
|
...
|
...
|
@@ -429,8 +410,12 @@ static dispatch_queue_t persisitingQueue; |
|
|
options:0
|
|
|
error:&error];
|
|
|
|
|
|
if (jsonData) {
|
|
|
[urlRequest setHTTPBody:jsonData];
|
|
|
NSMutableData *body = [NSMutableData data];
|
|
|
[body appendData:[[NSString stringWithFormat:@"data="]dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
[body appendData:jsonData];
|
|
|
|
|
|
if (body) {
|
|
|
[urlRequest setHTTPBody:body];
|
|
|
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:NO];
|
|
|
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
|
|
|
[connection start];
|
...
|
...
|
@@ -462,7 +447,7 @@ static dispatch_queue_t persisitingQueue; |
|
|
{
|
|
|
if (event) {
|
|
|
[self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:event.jsonDictionary, nil] forKey:JsonKeyDataTypeEvents];
|
|
|
[self postWithJsonData:self.immediUploadDataDic];
|
|
|
[self postWithJsonData:self.immediUploadItemDic];
|
|
|
}
|
|
|
}
|
|
|
|
...
|
...
|
@@ -470,7 +455,7 @@ static dispatch_queue_t persisitingQueue; |
|
|
{
|
|
|
if (error) {
|
|
|
[self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:error.jsonDictionary, nil] forKey:JsonKeyDataTypeErrors];
|
|
|
[self postWithJsonData:self.immediUploadDataDic];
|
|
|
[self postWithJsonData:self.immediUploadItemDic];
|
|
|
}
|
|
|
}
|
|
|
|
...
|
...
|
@@ -483,12 +468,16 @@ static dispatch_queue_t persisitingQueue; |
|
|
|
|
|
[urlRequest setValue:[NSString stringWithFormat:@"%@", [YHNetworkUserAgent userAgent]] forHTTPHeaderField:@"User-Agent"];
|
|
|
NSError *error;
|
|
|
|
|
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data
|
|
|
options:0
|
|
|
error:&error];
|
|
|
|
|
|
if (jsonData) {
|
|
|
[urlRequest setHTTPBody:jsonData];
|
|
|
//配置body
|
|
|
NSMutableData *body = [NSMutableData data];
|
|
|
[body appendData:[[NSString stringWithFormat:@"data="]dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
[body appendData:jsonData];
|
|
|
if (body) {
|
|
|
[urlRequest setHTTPBody:body];
|
|
|
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:NO];
|
|
|
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
|
|
|
[connection start];
|
...
|
...
|
|