Authored by 王钱钧

修改上传的数据格式

... ... @@ -10,7 +10,6 @@
#import "YHError.h"
extern NSString * const JsonKeyData;
extern NSString * const JsonKeyDataTypeDevice;
extern NSString * const JsonKeyDataTypeStatus;
extern NSString * const JsonKeyDataTypeEvents;
... ...
... ... @@ -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];
... ...