Toggle navigation
Toggle navigation
This project
Loading...
Sign in
ios
/
yh_analytics
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
王钱钧
10 years ago
Commit
4a24dee7cfceca15230e1deca8fa10e3397570fd
1 parent
0d7deaac
修改上传的数据格式
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
45 deletions
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h
View file @
4a24dee
...
...
@@ -10,7 +10,6 @@
#import "YHError.h"
extern
NSString
*
const
JsonKeyData
;
extern
NSString
*
const
JsonKeyDataTypeDevice
;
extern
NSString
*
const
JsonKeyDataTypeStatus
;
extern
NSString
*
const
JsonKeyDataTypeEvents
;
...
...
YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m
View file @
4a24dee
...
...
@@ -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
.
immediUpload
Data
Dic
];
[
self
postWithJsonData
:
self
.
immediUpload
Item
Dic
];
}
}
...
...
@@ -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
.
immediUpload
Data
Dic
];
[
self
postWithJsonData
:
self
.
immediUpload
Item
Dic
];
}
}
...
...
@@ -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
];
...
...
Please
register
or
login
to post a comment