Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
GMPhobos
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
GMPhobos
Commits
c606fc11
Commit
c606fc11
authored
Mar 06, 2020
by
井庆林
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
..
parent
0323d362
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
127 additions
and
178 deletions
+127
-178
GMViewController.m
Example/GMPhobos/GMViewController.m
+15
-8
Podfile
Example/Podfile
+1
-0
Podfile.lock
Example/Podfile.lock
+1
-1
GMPhotoTest.m
Example/Tests/GMPhotoTest.m
+50
-51
NewPhobos.h
GMPhobos/Classes/NewPhobos.h
+5
-15
NewPhobos.m
GMPhobos/Classes/NewPhobos.m
+12
-39
Phobos.h
GMPhobos/Classes/Phobos.h
+6
-17
Phobos.m
GMPhobos/Classes/Phobos.m
+9
-36
PhobosDataManager.h
GMPhobos/Classes/PhobosDataManager.h
+8
-2
PhobosDataManager.m
GMPhobos/Classes/PhobosDataManager.m
+17
-9
PhobosSendManager.m
GMPhobos/Classes/PhobosSendManager.m
+3
-0
No files found.
Example/GMPhobos/GMViewController.m
View file @
c606fc11
...
@@ -58,19 +58,26 @@ NSString *const MockCityId = @"beijing";
...
@@ -58,19 +58,26 @@ NSString *const MockCityId = @"beijing";
[
dict
setObject
:
@""
forKey
:
@"extra_param"
];
[
dict
setObject
:
@""
forKey
:
@"extra_param"
];
[
dict
setObject
:
@""
forKey
:
@"referrer_tab_name"
];
[
dict
setObject
:
@""
forKey
:
@"referrer_tab_name"
];
[
dict
setObject
:
@
(
0
)
forKey
:
@"is_push"
];
[
dict
setObject
:
@
(
0
)
forKey
:
@"is_push"
];
[
Phobos
track
:
@"page_view"
attributes
:
dict
];
//
[Phobos track:@"page_view" attributes:dict];
NSArray
*
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
//
NSArray *array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
//
[
Phobos
track
:
@"page_view"
attributes
:
dict
];
//
[Phobos track:@"page_view" attributes:dict];
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
//
array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
[
dict
setObject
:[
PhobosUtil
currentTime
]
forKey
:
@"in"
];
[
dict
setObject
:[
PhobosUtil
currentTime
]
forKey
:
@"in"
];
[
dict
setObject
:[
PhobosUtil
currentTime
]
forKey
:
@"out"
];
[
dict
setObject
:[
PhobosUtil
currentTime
]
forKey
:
@"out"
];
[
Phobos
track
:
@"page_view"
attributes
:
dict
sendNow
:
YES
];
[
Phobos
track
:
@"page_view"
attributes
:
dict
sendNow
:
YES
];
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
//
array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
[
Phobos
track
:
@"test"
attributes
:
dict
];
[
Phobos
track
:
@"test"
attributes
:
dict
sendNow
:
YES
];
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
[
Phobos
track
:
@"test2"
attributes
:
dict
sendNow
:
YES
];
[
Phobos
track
:
@"test3"
attributes
:
dict
sendNow
:
YES
];
[
Phobos
track
:
@"test4"
attributes
:
dict
sendNow
:
YES
];
[
Phobos
track
:
@"test3"
attributes
:
dict
sendNow
:
YES
];
[
Phobos
track
:
@"test4"
attributes
:
dict
sendNow
:
YES
];
[
Phobos
track
:
@"test3"
attributes
:
dict
sendNow
:
YES
];
[
Phobos
track
:
@"test4"
attributes
:
dict
sendNow
:
YES
];
// array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
}
}
...
...
Example/Podfile
View file @
c606fc11
...
@@ -8,6 +8,7 @@ inhibit_all_warnings!
...
@@ -8,6 +8,7 @@ inhibit_all_warnings!
target
'GMPhobos_Example'
do
target
'GMPhobos_Example'
do
pod
'GMPhobos'
,
:path
=>
'../'
pod
'GMPhobos'
,
:path
=>
'../'
# pod 'GMPhobos', :git => 'git@git.wanmeizhensuo.com:gengmeiios/GMPhobos.git', :branch => 'jql/coreData'
target
'GMPhobos_Tests'
do
target
'GMPhobos_Tests'
do
inherit!
:search_paths
inherit!
:search_paths
end
end
...
...
Example/Podfile.lock
View file @
c606fc11
...
@@ -33,6 +33,6 @@ SPEC CHECKSUMS:
...
@@ -33,6 +33,6 @@ SPEC CHECKSUMS:
MJExtension: 635f2c663dcb1bf76fa4b715b2570a5710aec545
MJExtension: 635f2c663dcb1bf76fa4b715b2570a5710aec545
TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed
TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed
PODFILE CHECKSUM:
4db0de045b595396507d6bad04e4823b02c3061d
PODFILE CHECKSUM:
abbb682362e2d6dbd228843955b17f6796b958b0
COCOAPODS: 1.8.4
COCOAPODS: 1.8.4
Example/Tests/GMPhotoTest.m
View file @
c606fc11
...
@@ -10,6 +10,7 @@
...
@@ -10,6 +10,7 @@
#import <GMPhobos/Phobos.h>
#import <GMPhobos/Phobos.h>
#import "GMPhobosController.h"
#import "GMPhobosController.h"
#import <GMCache/GMCache.h>
#import <GMCache/GMCache.h>
#import <MJExtension/MJExtension.h>
NSString
*
const
MockAppName
=
@"gengmei_test"
;
NSString
*
const
MockAppName
=
@"gengmei_test"
;
NSString
*
const
MockChannelId
=
@"AppStore"
;
NSString
*
const
MockChannelId
=
@"AppStore"
;
...
@@ -25,7 +26,7 @@ NSString *const MockCityId = @"beijing";
...
@@ -25,7 +26,7 @@ NSString *const MockCityId = @"beijing";
-
(
void
)
setUp
{
-
(
void
)
setUp
{
[
super
setUp
];
[
super
setUp
];
[[
NSUserDefaults
standardUserDefaults
]
set
Object
:
@
(
YES
)
forKey
:
PhobosGray
];
[[
NSUserDefaults
standardUserDefaults
]
set
Bool
:
YES
forKey
:
PhobosGray
];
[
Phobos
clientWithAppName
:
MockAppName
channelId
:
MockChannelId
];
[
Phobos
clientWithAppName
:
MockAppName
channelId
:
MockChannelId
];
Phobos
.
sharedClient
.
serverAPI
=
@"http://log.test.igengmei.com/log/collect"
;
Phobos
.
sharedClient
.
serverAPI
=
@"http://log.test.igengmei.com/log/collect"
;
Phobos
.
sharedClient
.
logEnabled
=
NO
;
// 调试打Log模式,看情况开启
Phobos
.
sharedClient
.
logEnabled
=
NO
;
// 调试打Log模式,看情况开启
...
@@ -39,8 +40,7 @@ NSString *const MockCityId = @"beijing";
...
@@ -39,8 +40,7 @@ NSString *const MockCityId = @"beijing";
-
(
void
)
tearDown
{
-
(
void
)
tearDown
{
// Put teardown code here. This method is called after the invocation of each test method in the class.
// Put teardown code here. This method is called after the invocation of each test method in the class.
[
super
tearDown
];
[
super
tearDown
];
[
Phobos
removeAllNormalPhobosData
];
[
Phobos
removeAllPhobosData
];
[
Phobos
removeAllImmediatelyPhobosData
];
}
}
/**
/**
...
@@ -50,14 +50,14 @@ NSString *const MockCityId = @"beijing";
...
@@ -50,14 +50,14 @@ NSString *const MockCityId = @"beijing";
*/
*/
-
(
void
)
testClientWithUserId
{
-
(
void
)
testClientWithUserId
{
[
self
setUp
];
[
self
setUp
];
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
[
Phobos
.
sharedClient
setUserId
:
MockUserId
];
[
Phobos
.
sharedClient
setUserId
:
MockUserId
];
[
Phobos
.
sharedClient
setCurrentCityId
:
MockCityId
];
[
Phobos
.
sharedClient
setCurrentCityId
:
MockCityId
];
[
Phobos
track
:
MockEventId
];
[
Phobos
track
:
MockEventId
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
NSDictionary
*
dict
=
[
array
objectAtIndex
:
0
];
NSDictionary
*
dict
=
[
array
.
firstObject
.
data
mj_JSONObject
];
[
self
verfiyDict
:
dict
];
[
self
verfiyDict
:
dict
];
XCTAssertTrue
([[
dict
objectForKey
:
@"user_id"
]
isEqualToString
:
MockUserId
]
,
@"Invalid user_id value"
);
XCTAssertTrue
([[
dict
objectForKey
:
@"user_id"
]
isEqualToString
:
MockUserId
]
,
@"Invalid user_id value"
);
}
}
...
@@ -70,9 +70,9 @@ NSString *const MockCityId = @"beijing";
...
@@ -70,9 +70,9 @@ NSString *const MockCityId = @"beijing";
-
(
void
)
testTrackEventWithoutAttr
{
-
(
void
)
testTrackEventWithoutAttr
{
[
Phobos
track
:
MockEventId
];
[
Phobos
track
:
MockEventId
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
NSDictionary
*
dict
=
[
array
objectAtIndex
:
0
];
NSDictionary
*
dict
=
[
array
.
firstObject
.
data
mj_JSONObject
];
[
self
verfiyDict
:
dict
];
[
self
verfiyDict
:
dict
];
}
}
...
@@ -86,9 +86,9 @@ NSString *const MockCityId = @"beijing";
...
@@ -86,9 +86,9 @@ NSString *const MockCityId = @"beijing";
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
NSDictionary
*
dict
=
[
array
objectAtIndex
:
0
];
NSDictionary
*
dict
=
[
array
.
firstObject
.
data
mj_JSONObject
];
[
self
verfiyDict
:
dict
];
[
self
verfiyDict
:
dict
];
//验证Param的值是否正确
//验证Param的值是否正确
...
@@ -102,13 +102,13 @@ NSString *const MockCityId = @"beijing";
...
@@ -102,13 +102,13 @@ NSString *const MockCityId = @"beijing";
* @since <#version number#>
* @since <#version number#>
*/
*/
-
(
void
)
testTrackEventWithAttrAndSendNow
{
-
(
void
)
testTrackEventWithAttrAndSendNow
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
// Given
// Given
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
// When
// When
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
// Then
// Then
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
0
,
@"array should be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
0
,
@"array should be empty"
);
}
}
/**
/**
...
@@ -125,7 +125,7 @@ NSString *const MockCityId = @"beijing";
...
@@ -125,7 +125,7 @@ NSString *const MockCityId = @"beijing";
// When
// When
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
!=
0
,
@"array shouldn't
be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array should
be empty"
);
}
}
/**
/**
...
@@ -139,16 +139,13 @@ NSString *const MockCityId = @"beijing";
...
@@ -139,16 +139,13 @@ NSString *const MockCityId = @"beijing";
// 因为实时埋点是异步删除,所以这个位置暂时延时取数据,待优化 TODO
// 因为实时埋点是异步删除,所以这个位置暂时延时取数据,待优化 TODO
dispatch_after
(
dispatch_time
(
DISPATCH_TIME_NOW
,
(
int64_t
)(
0
.
25
*
NSEC_PER_SEC
)),
dispatch_get_main_queue
(),
^
{
dispatch_after
(
dispatch_time
(
DISPATCH_TIME_NOW
,
(
int64_t
)(
0
.
25
*
NSEC_PER_SEC
)),
dispatch_get_main_queue
(),
^
{
NSArray
*
array
=
[
Phobos
immediatelyPhobosForServerAPI
];
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
(
array
.
count
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
dispatch_after
(
dispatch_time
(
DISPATCH_TIME_NOW
,
(
int64_t
)(
0
.
25
*
NSEC_PER_SEC
)),
dispatch_get_main_queue
(),
^
{
dispatch_after
(
dispatch_time
(
DISPATCH_TIME_NOW
,
(
int64_t
)(
0
.
25
*
NSEC_PER_SEC
)),
dispatch_get_main_queue
(),
^
{
NSArray
*
array
=
[
Phobos
immediatelyPhobosForServerAPI
];
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
(
array
.
count
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
array
=
[
Phobos
normalPhobosDataForServerAPI
];
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
0
,
@"array shouldn't be empty"
);
});
});
});
});
}
}
...
@@ -159,14 +156,14 @@ NSString *const MockCityId = @"beijing";
...
@@ -159,14 +156,14 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4
* @since 1.1.4
*/
*/
-
(
void
)
testTrackEventWithDoubleAttrAndNoSendNow
{
-
(
void
)
testTrackEventWithDoubleAttrAndNoSendNow
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
//
//
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
1
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
1
,
@"array shouldn't be empty"
);
// PhobosCacheKey超过50条数据会自动上报,模拟此情况
// PhobosCacheKey超过50条数据会自动上报,模拟此情况
for
(
int
i
=
0
;
i
<
50
;
i
++
)
{
for
(
int
i
=
0
;
i
<
50
;
i
++
)
{
...
@@ -174,12 +171,12 @@ NSString *const MockCityId = @"beijing";
...
@@ -174,12 +171,12 @@ NSString *const MockCityId = @"beijing";
}
}
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
1
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
1
,
@"array shouldn't be empty"
);
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
2
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
2
,
@"array shouldn't be empty"
);
}
}
/**
/**
...
@@ -188,7 +185,7 @@ NSString *const MockCityId = @"beijing";
...
@@ -188,7 +185,7 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4
* @since 1.1.4
*/
*/
-
(
void
)
testTrackEventWithSendNowAndNoSendNowOne
{
-
(
void
)
testTrackEventWithSendNowAndNoSendNowOne
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
sendNowAttr
=
@{
@"attr"
:
@"track_attr_send_now"
};
NSDictionary
*
sendNowAttr
=
@{
@"attr"
:
@"track_attr_send_now"
};
...
@@ -196,28 +193,28 @@ NSString *const MockCityId = @"beijing";
...
@@ -196,28 +193,28 @@ NSString *const MockCityId = @"beijing";
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
}
}
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
30
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
30
,
@"array shouldn't be empty"
);
// PhobosCacheKey超过50条数据会自动上报,模拟此情况
// PhobosCacheKey超过50条数据会自动上报,模拟此情况
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
3
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
NO
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
30
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
1
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
3
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
3
1
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
1
,
@"array shouldn't be empty"
);
}
}
/**
/**
...
@@ -226,34 +223,34 @@ NSString *const MockCityId = @"beijing";
...
@@ -226,34 +223,34 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4
* @since 1.1.4
*/
*/
-
(
void
)
testTrackEventWithSendNowAndNoSendNowTwo
{
-
(
void
)
testTrackEventWithSendNowAndNoSendNowTwo
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
sendNowAttr
=
@{
@"attr"
:
@"track_attr_send_now"
};
NSDictionary
*
sendNowAttr
=
@{
@"attr"
:
@"track_attr_send_now"
};
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
1
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
1
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
2
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
2
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
3
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
1
,
@"array shouldn't be empty"
);
}
}
/**
/**
...
@@ -262,24 +259,24 @@ NSString *const MockCityId = @"beijing";
...
@@ -262,24 +259,24 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4
* @since 1.1.4
*/
*/
-
(
void
)
testTrackEventWithSendNowAndNoSendNowThree
{
-
(
void
)
testTrackEventWithSendNowAndNoSendNowThree
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
//
//
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
1
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
1
,
@"array shouldn't be empty"
);
// PhobosCacheKey超过50条数据会自动上报,模拟此情况
// PhobosCacheKey超过50条数据会自动上报,模拟此情况
for
(
int
i
=
0
;
i
<
50
;
i
++
)
{
for
(
int
i
=
0
;
i
<
50
;
i
++
)
{
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
}
}
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
1
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
1
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
2
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosData
Count
]
==
2
,
@"array shouldn't be empty"
);
}
}
-
(
void
)
verfiyDict
:
(
NSDictionary
*
)
dict
{
-
(
void
)
verfiyDict
:
(
NSDictionary
*
)
dict
{
...
@@ -323,20 +320,20 @@ NSString *const MockCityId = @"beijing";
...
@@ -323,20 +320,20 @@ NSString *const MockCityId = @"beijing";
[
controller
viewWillDisappear
:
true
];
[
controller
viewWillDisappear
:
true
];
[
self
paramUnNilCheck
];
[
self
paramUnNilCheck
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
!=
0
,
@"PhobosCacheKey 下面应该有数据"
);
XCTAssertTrue
(
array
.
count
!=
0
,
@"PhobosCacheKey 下面应该有数据"
);
NSDictionary
*
dic
=
array
[
0
][
@"params"
];
NSDictionary
*
dic
=
[
array
.
firstObject
mj_JSONObject
][
@"params"
];
XCTAssertTrue
([
dic
[
@"referrer_id"
]
isEqualToString
:
@"rreferrerIdTest"
],
@"referrerId至少使用默认的空字符串"
);
XCTAssertTrue
([
dic
[
@"referrer_id"
]
isEqualToString
:
@"rreferrerIdTest"
],
@"referrerId至少使用默认的空字符串"
);
}
}
-
(
void
)
paramUnNilCheck
{
-
(
void
)
paramUnNilCheck
{
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
!=
0
,
@"PhobosCacheKey 下面应该有数据"
);
XCTAssertTrue
(
array
.
count
!=
0
,
@"PhobosCacheKey 下面应该有数据"
);
NSDictionary
*
dic
=
array
[
0
][
@"params"
];
NSDictionary
*
dic
=
[
array
.
firstObject
mj_JSONObject
][
@"params"
];
XCTAssertTrue
(
dic
[
@"page_name"
]
!=
nil
,
@"page_name至少使用默认的空字符串"
);
XCTAssertTrue
(
dic
[
@"page_name"
]
!=
nil
,
@"page_name至少使用默认的空字符串"
);
XCTAssertTrue
([
dic
[
@"referer"
]
integerValue
]
>=
0
,
@"referer至少使用默认的空字符串"
);
XCTAssertTrue
([
dic
[
@"referer"
]
integerValue
]
>=
0
,
@"referer至少使用默认的空字符串"
);
XCTAssertTrue
(
dic
[
@"business_id"
]
!=
nil
,
@"business_id至少使用默认的空字符串"
);
XCTAssertTrue
(
dic
[
@"business_id"
]
!=
nil
,
@"business_id至少使用默认的空字符串"
);
...
@@ -352,8 +349,9 @@ NSString *const MockCityId = @"beijing";
...
@@ -352,8 +349,9 @@ NSString *const MockCityId = @"beijing";
}
}
// 该单元测试暂时不用,因为过滤代码暂时不用,所以不需要跑通
// 该单元测试暂时不用,因为过滤代码暂时不用,所以不需要跑通
/*
- (void)testCheckPVPhobos {
- (void)testCheckPVPhobos {
[
Phobos
removeAll
Normal
PhobosData
];
[Phobos removeAllPhobosData];
NSString *inDate = [PhobosUtil currentTime];
NSString *inDate = [PhobosUtil currentTime];
[NSThread sleepForTimeInterval:1];//模拟浏览页面,让out和in时间相差1s
[NSThread sleepForTimeInterval:1];//模拟浏览页面,让out和in时间相差1s
...
@@ -369,12 +367,12 @@ NSString *const MockCityId = @"beijing";
...
@@ -369,12 +367,12 @@ NSString *const MockCityId = @"beijing";
[dict setObject:@"" forKey:@"referrer_tab_name"];
[dict setObject:@"" forKey:@"referrer_tab_name"];
[dict setObject:@(0) forKey:@"is_push"];
[dict setObject:@(0) forKey:@"is_push"];
[Phobos track:@"page_view" attributes:dict];
[Phobos track:@"page_view" attributes:dict];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData
];
[NSThread sleepForTimeInterval:0.2];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue(array.count == 1, @"PhobosCacheKey 下面应该有数据");
XCTAssertTrue(array.count == 1, @"PhobosCacheKey 下面应该有数据");
[Phobos track:@"page_view" attributes:dict];
[Phobos track:@"page_view" attributes:dict];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
1
,
@"PhobosCacheKey 上条数据不应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosDataCount] == 2
, @"PhobosCacheKey 上条数据不应该发送");
[NSThread sleepForTimeInterval:2];//模拟浏览页面,让第二次浏览和上一次时间相差2s
[NSThread sleepForTimeInterval:2];//模拟浏览页面,让第二次浏览和上一次时间相差2s
...
@@ -383,14 +381,15 @@ NSString *const MockCityId = @"beijing";
...
@@ -383,14 +381,15 @@ NSString *const MockCityId = @"beijing";
[dict setObject:[PhobosUtil currentTime] forKey:@"out"];
[dict setObject:[PhobosUtil currentTime] forKey:@"out"];
[Phobos track:@"page_view" attributes:dict];
[Phobos track:@"page_view" attributes:dict];
[NSThread sleepForTimeInterval:0.2];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
2
,
@"PhobosCacheKey 上条数据应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosData
Count]== 2, @"PhobosCacheKey 上条数据应该发送");
[Phobos track:@"page_view" attributes:dict];
[Phobos track:@"page_view" attributes:dict];
[NSThread sleepForTimeInterval:0.2];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
2
,
@"PhobosCacheKey 上条数据不应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosData
Count] == 2, @"PhobosCacheKey 上条数据不应该发送");
[Phobos track:@"test" attributes:dict];
[Phobos track:@"test" attributes:dict];
[NSThread sleepForTimeInterval:0.2];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
3
,
@"PhobosCacheKey 上条数据应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosData
Count] == 3, @"PhobosCacheKey 上条数据应该发送");
}
}
*/
#pragma mark - 其它方法test
#pragma mark - 其它方法test
...
...
GMPhobos/Classes/NewPhobos.h
View file @
c606fc11
...
@@ -166,23 +166,13 @@ NS_ASSUME_NONNULL_BEGIN
...
@@ -166,23 +166,13 @@ NS_ASSUME_NONNULL_BEGIN
@interface
NewPhobos
(
UtilTest
)
@interface
NewPhobos
(
UtilTest
)
/** 获取所有非立即发送埋点数量 */
/** 获取所有非立即发送埋点数量 */
+
(
NSInteger
)
normalPhobos
Count
;
+
(
NSInteger
)
fetchToBeSendPhobosData
Count
;
/** 获取
所有非立即
发送埋点数据 */
/** 获取
待
发送埋点数据 */
+
(
NSArray
*
)
normal
PhobosData
;
+
(
NSArray
*
)
fetchToBeSend
PhobosData
;
/** 获取所有立即发送埋点数量 */
/** 清除待发送埋点数据缓存 */
+
(
NSUInteger
)
immediatelyPhobosCount
;
+
(
void
)
removeAllPhobosData
;
/** 获取所有立即发送埋点数据 */
+
(
NSArray
*
)
immediatelyPhobosData
;
/** 清除非立即发送埋点数据缓存 */
+
(
void
)
removeAllNormalPhobosData
;
/** 清除立即发送埋点数据缓存 */
+
(
void
)
removeAllImmediatelyPhobosData
;
@end
@end
...
...
GMPhobos/Classes/NewPhobos.m
View file @
c606fc11
...
@@ -386,15 +386,8 @@ static NSString *sdkVersion = @"1.4.0";
...
@@ -386,15 +386,8 @@ static NSString *sdkVersion = @"1.4.0";
NSDictionary
*
dataDict
=
[
_sharedClient
prepareDictionaryForEvent
:
eventName
attributes
:
attributes
];
NSDictionary
*
dataDict
=
[
_sharedClient
prepareDictionaryForEvent
:
eventName
attributes
:
attributes
];
@try
{
@try
{
NSData
*
JSON
=
[
PhobosUtil
encodeJSON
:
dataDict
];
NSData
*
JSON
=
[
PhobosUtil
encodeJSON
:
dataDict
];
[
PhobosDataManager
insertData
:
dataDict
sendAPI
:
currentAPI
immediately
:
sendNow
completion
:^
(
BOOL
contextDidSave
,
NSError
*
_Nullable
error
)
{
[
PhobosDataManager
insertData
:
dataDict
sendAPI
:
currentAPI
completion
:^
(
BOOL
contextDidSave
,
NSError
*
_Nullable
error
)
{
if
(
sendNow
)
{
[
self
disposeSendDataWithImmediately
:
sendNow
];
[
self
disposeSendDataWithImmediately
:
YES
];
}
else
{
NSArray
<
SendDataEntity
*>
*
fetchArray
=
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
NO
];
if
(
fetchArray
.
count
>
50
)
{
[
self
disposeSendDataWithImmediately
:
NO
];
}
}
}];
}];
}
@catch
(
NSException
*
exception
)
{
}
@catch
(
NSException
*
exception
)
{
NSAssert
(
NO
,
@"哎呀呀,VALUE不能为NSObject "
);
NSAssert
(
NO
,
@"哎呀呀,VALUE不能为NSObject "
);
...
@@ -405,8 +398,8 @@ static NSString *sdkVersion = @"1.4.0";
...
@@ -405,8 +398,8 @@ static NSString *sdkVersion = @"1.4.0";
* 处理发送数据
* 处理发送数据
*/
*/
+
(
void
)
disposeSendDataWithImmediately
:
(
BOOL
)
immediately
{
+
(
void
)
disposeSendDataWithImmediately
:
(
BOOL
)
immediately
{
NSArray
<
SendDataEntity
*>
*
entities
=
[
PhobosDataManager
fetch
DataEntitiesWithImmediately
:
immediately
];
NSArray
<
SendDataEntity
*>
*
entities
=
[
PhobosDataManager
fetch
ToBeSendDataEntities
];
if
(
entities
.
count
>
0
)
{
if
(
immediately
||
entities
.
count
>
5
0
)
{
[
PhobosDataManager
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusSending
completion
:
nil
];
[
PhobosDataManager
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusSending
completion
:
nil
];
[
PhobosSendManager
sendDataWithEntities
:
entities
completion
:
^
(
NSArray
<
SendDataEntity
*>
*
_Nonnull
finishEntities
,
NSInteger
code
)
{
[
PhobosSendManager
sendDataWithEntities
:
entities
completion
:
^
(
NSArray
<
SendDataEntity
*>
*
_Nonnull
finishEntities
,
NSInteger
code
)
{
if
(
code
==
200
)
{
if
(
code
==
200
)
{
...
@@ -425,37 +418,17 @@ static NSString *sdkVersion = @"1.4.0";
...
@@ -425,37 +418,17 @@ static NSString *sdkVersion = @"1.4.0";
@implementation
NewPhobos
(
UtilTest
)
@implementation
NewPhobos
(
UtilTest
)
/** 获取所有非立即发送埋点数量 */
/** 获取所有非立即发送埋点数量 */
+
(
NSInteger
)
normalPhobosCount
{
+
(
NSInteger
)
fetchToBeSendPhobosDataCount
{
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d"
,
PhobosDataSendStatusNormal
];
return
[
PhobosDataManager
fetchCountOfToBeSendEntities
];
return
[
PhobosDataManager
fetchCountOfEntitiesWithPredicate
:
predicate
];
}
/** 获取所有非立即发送埋点数据 */
+
(
NSArray
*
)
normalPhobosData
{
return
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
NO
];
}
}
/** 获取所有立即发送埋点数量 */
/** 获取待发送埋点数据 */
+
(
NSUInteger
)
immediatelyPhobosCount
{
+
(
NSArray
*
)
fetchToBeSendPhobosData
{
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
return
[
PhobosDataManager
fetchToBeSendDataEntities
];
return
[
PhobosDataManager
fetchCountOfEntitiesWithPredicate
:
predicate
];
}
/** 获取所有立即发送埋点数据 */
+
(
NSArray
*
)
immediatelyPhobosData
{
return
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
YES
];
}
/** 清除非立即发送埋点数据缓存 */
+
(
void
)
removeAllNormalPhobosData
{
NSArray
<
SendDataEntity
*>
*
fetchArray
=
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
NO
];
[
PhobosDataManager
deleteDataEntities
:
fetchArray
];
}
}
/** 清除立即发送埋点数据缓存 */
/** 清除待发送埋点数据缓存 */
+
(
void
)
removeAllImmediatelyPhobosData
{
+
(
void
)
removeAllPhobosData
{
NSArray
<
SendDataEntity
*>
*
fetchArray
=
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
YES
];
[
PhobosDataManager
deleteAllEntities
];
[
PhobosDataManager
deleteDataEntities
:
fetchArray
];
}
}
@end
@end
GMPhobos/Classes/Phobos.h
View file @
c606fc11
...
@@ -160,25 +160,14 @@ NS_ASSUME_NONNULL_BEGIN
...
@@ -160,25 +160,14 @@ NS_ASSUME_NONNULL_BEGIN
@interface
Phobos
(
UtilTest
)
@interface
Phobos
(
UtilTest
)
/** 获取
所有非立即
发送埋点数量 */
/** 获取
待
发送埋点数量 */
+
(
NSInteger
)
normalPhobos
Count
;
+
(
NSInteger
)
fetchToBeSendPhobosData
Count
;
/** 获取所有非立即发送埋点数据 */
/** 获取待发送埋点数据 */
+
(
NSArray
*
)
normalPhobosData
;
+
(
NSArray
*
)
fetchToBeSendPhobosData
;
/** 获取所有立即发送埋点数量 */
+
(
NSUInteger
)
immediatelyPhobosCount
;
/** 获取所有立即发送埋点数据 */
+
(
NSArray
*
)
immediatelyPhobosData
;
/** 清除非立即发送埋点数据缓存 */
+
(
void
)
removeAllNormalPhobosData
;
/** 清除立即发送埋点数据缓存 */
+
(
void
)
removeAllImmediatelyPhobosData
;
/** 清除待发送埋点数据缓存 */
+
(
void
)
removeAllPhobosData
;
@end
@end
NS_ASSUME_NONNULL_END
NS_ASSUME_NONNULL_END
GMPhobos/Classes/Phobos.m
View file @
c606fc11
...
@@ -212,47 +212,20 @@ static BOOL isGray = NO;
...
@@ -212,47 +212,20 @@ static BOOL isGray = NO;
@implementation
NewPhobos
(
UtilTest
)
@implementation
NewPhobos
(
UtilTest
)
/** 获取
所有非立即
发送埋点数量 */
/** 获取
待
发送埋点数量 */
+
(
NS
Integer
)
normalPhobos
Count
{
+
(
NS
UInteger
)
fetchToBeSendPhobosData
Count
{
return
isGray
?
[
NewPhobos
normalPhobos
Count
]
:
0
;
return
isGray
?
[
NewPhobos
fetchToBeSendPhobosData
Count
]
:
0
;
}
}
/** 获取
所有非立即
发送埋点数据 */
/** 获取
待
发送埋点数据 */
+
(
NSArray
*
)
normal
PhobosData
{
+
(
NSArray
*
)
fetchToBeSend
PhobosData
{
return
isGray
?
[
NewPhobos
normalPhobosData
]
:
nil
;
return
isGray
?
[
NewPhobos
fetchToBeSendPhobosData
]
:
@[]
;
}
}
/** 获取所有立即发送埋点数量 */
/** 清除待发送埋点数据缓存 */
+
(
NSUInteger
)
immediatelyPhobosCount
{
+
(
void
)
removeAllPhobosData
{
return
isGray
?
[
NewPhobos
immediatelyPhobosCount
]
:
0
;
}
/** 获取所有立即发送埋点数据 */
+
(
NSDictionary
*
)
immediatelyPhobosData
{
return
isGray
?
[
NewPhobos
immediatelyPhobosData
]
:
nil
;
}
/** 获取url的立即发送埋点数据 */
+
(
NSArray
*
)
immediatelyPhobosDataForURL
:
(
NSString
*
)
url
{
return
isGray
?
[
NewPhobos
immediatelyPhobosDataForURL
:
url
]
:
nil
;
}
+
(
NSUInteger
)
immediatelyPhobosCountForURL
:
(
NSString
*
)
url
{
return
isGray
?
[
NewPhobos
immediatelyPhobosCountForURL
:
url
]
:
0
;
}
/** 清除非立即发送埋点数据缓存 */
+
(
void
)
removeAllNormalPhobosData
{
if
(
isGray
)
{
[
NewPhobos
removeAllNormalPhobosData
];
}
}
/** 清除立即发送埋点数据缓存 */
+
(
void
)
removeAllImmediatelyPhobosData
{
if
(
isGray
)
{
if
(
isGray
)
{
[
NewPhobos
removeAll
Normal
PhobosData
];
[
NewPhobos
removeAllPhobosData
];
}
}
}
}
...
...
GMPhobos/Classes/PhobosDataManager.h
View file @
c606fc11
...
@@ -21,12 +21,18 @@ typedef NS_ENUM(NSInteger, PhobosDataSendStatus) {
...
@@ -21,12 +21,18 @@ typedef NS_ENUM(NSInteger, PhobosDataSendStatus) {
@interface
PhobosDataManager
:
NSObject
@interface
PhobosDataManager
:
NSObject
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchDataEntitiesWithImmediately
:(
BOOL
)
immediately
;
/** 获取待发送数据,包含待发送数据和发送失败数据 */
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchToBeSendDataEntities
;
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchDataEntitiesWithPredicate
:(
NSPredicate
*
)
searchFilter
;
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchDataEntitiesWithPredicate
:(
NSPredicate
*
)
searchFilter
;
+
(
NSUInteger
)
fetchCountOfToBeSendEntities
;
+
(
NSUInteger
)
fetchCountOfEntitiesWithPredicate
:(
NSPredicate
*
)
searchFilter
;
+
(
NSUInteger
)
fetchCountOfEntitiesWithPredicate
:(
NSPredicate
*
)
searchFilter
;
+
(
void
)
insertData
:(
NSDictionary
*
)
data
sendAPI
:(
NSString
*
)
sendAPI
immediately
:(
BOOL
)
immediately
completion
:(
MRSaveCompletionHandler
)
completion
;
+
(
void
)
insertData
:(
NSDictionary
*
)
data
sendAPI
:(
NSString
*
)
sendAPI
completion
:(
MRSaveCompletionHandler
)
completion
;
+
(
void
)
updateDataEntities
:(
NSArray
<
SendDataEntity
*>
*
)
entities
sendStatus
:(
PhobosDataSendStatus
)
sendStatus
completion
:(
MRSaveCompletionHandler
)
completion
;
+
(
void
)
updateDataEntities
:(
NSArray
<
SendDataEntity
*>
*
)
entities
sendStatus
:(
PhobosDataSendStatus
)
sendStatus
completion
:(
MRSaveCompletionHandler
)
completion
;
+
(
void
)
deleteDataEntities
:(
NSArray
<
SendDataEntity
*>
*
)
entities
;
+
(
void
)
deleteDataEntities
:(
NSArray
<
SendDataEntity
*>
*
)
entities
;
+
(
void
)
deleteAllEntities
;
@end
@end
...
...
GMPhobos/Classes/PhobosDataManager.m
View file @
c606fc11
...
@@ -25,16 +25,14 @@ static NSManagedObjectContext *Phobos_defaultContext;
...
@@ -25,16 +25,14 @@ static NSManagedObjectContext *Phobos_defaultContext;
NSManagedObjectModel
*
model
=
[[
NSManagedObjectModel
alloc
]
initWithContentsOfURL
:
modelURL
];
NSManagedObjectModel
*
model
=
[[
NSManagedObjectModel
alloc
]
initWithContentsOfURL
:
modelURL
];
[
NSManagedObjectModel
MR_setDefaultManagedObjectModel
:
model
];
[
NSManagedObjectModel
MR_setDefaultManagedObjectModel
:
model
];
[
MagicalRecord
setupAutoMigratingCoreDataStack
];
[
MagicalRecord
setupAutoMigratingCoreDataStack
];
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d"
,
PhobosDataSendStatusSending
];
NSArray
<
SendDataEntity
*>
*
entities
=
[
self
fetchDataEntitiesWithPredicate
:
predicate
];
[
self
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusError
completion
:
nil
];
});
});
}
}
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchDataEntitiesWithImmediately
:
(
BOOL
)
immediately
{
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchToBeSendDataEntities
{
NSPredicate
*
predicate
;
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
if
(
immediately
)
{
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
}
else
{
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d"
,
PhobosDataSendStatusNormal
];
}
return
[
self
fetchDataEntitiesWithPredicate
:
predicate
];
return
[
self
fetchDataEntitiesWithPredicate
:
predicate
];
}
}
...
@@ -42,18 +40,23 @@ static NSManagedObjectContext *Phobos_defaultContext;
...
@@ -42,18 +40,23 @@ static NSManagedObjectContext *Phobos_defaultContext;
return
[
SendDataEntity
MR_findAllWithPredicate
:
searchFilter
inContext
:[
NSManagedObjectContext
MR_defaultContext
]];
return
[
SendDataEntity
MR_findAllWithPredicate
:
searchFilter
inContext
:[
NSManagedObjectContext
MR_defaultContext
]];
}
}
+
(
NSUInteger
)
fetchCountOfToBeSendEntities
{
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
return
[
self
fetchCountOfEntitiesWithPredicate
:
predicate
];
}
+
(
NSUInteger
)
fetchCountOfEntitiesWithPredicate
:
(
NSPredicate
*
)
searchFilter
{
+
(
NSUInteger
)
fetchCountOfEntitiesWithPredicate
:
(
NSPredicate
*
)
searchFilter
{
return
[
SendDataEntity
MR_numberOfEntitiesWithPredicate
:
searchFilter
inContext
:[
NSManagedObjectContext
MR_defaultContext
]];
return
[
SendDataEntity
MR_numberOfEntitiesWithPredicate
:
searchFilter
inContext
:[
NSManagedObjectContext
MR_defaultContext
]];
}
}
+
(
void
)
insertData
:
(
NSDictionary
*
)
data
sendAPI
:
(
NSString
*
)
sendAPI
immediately
:
(
BOOL
)
immediately
completion
:
(
MRSaveCompletionHandler
)
completion
{
+
(
void
)
insertData
:
(
NSDictionary
*
)
data
sendAPI
:
(
NSString
*
)
sendAPI
completion
:
(
MRSaveCompletionHandler
)
completion
{
if
(
!
sendAPI
||
[
sendAPI
isEqualToString
:
@""
]
||
!
data
)
{
if
(
!
sendAPI
||
[
sendAPI
isEqualToString
:
@""
]
||
!
data
)
{
return
;
return
;
}
}
SendDataEntity
*
entity
=
[
SendDataEntity
MR_createEntity
];
SendDataEntity
*
entity
=
[
SendDataEntity
MR_createEntity
];
entity
.
data
=
[
data
mj_JSONData
];
entity
.
data
=
[
data
mj_JSONData
];
entity
.
api
=
sendAPI
;
entity
.
api
=
sendAPI
;
entity
.
status
=
immediately
?
PhobosDataSendStatusToBeSend
:
PhobosDataSendStatusNormal
;
entity
.
status
=
PhobosDataSendStatusToBeSend
;
entity
.
id
=
[
PhobosUtil
currentMMTime
];
entity
.
id
=
[
PhobosUtil
currentMMTime
];
[[
NSManagedObjectContext
MR_defaultContext
]
MR_saveWithOptions
:
MRSaveSynchronously
completion
:
completion
];
[[
NSManagedObjectContext
MR_defaultContext
]
MR_saveWithOptions
:
MRSaveSynchronously
completion
:
completion
];
}
}
...
@@ -76,4 +79,9 @@ static NSManagedObjectContext *Phobos_defaultContext;
...
@@ -76,4 +79,9 @@ static NSManagedObjectContext *Phobos_defaultContext;
}
}
}
}
+
(
void
)
deleteAllEntities
{
[
SendDataEntity
MR_truncateAll
];
[[
NSManagedObjectContext
MR_defaultContext
]
MR_saveOnlySelfAndWait
];
}
@end
@end
GMPhobos/Classes/PhobosSendManager.m
View file @
c606fc11
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
});
});
}
}
// TODO: 全量以后,一定时间需要清除下面逻辑
+
(
void
)
disposeOldData
{
+
(
void
)
disposeOldData
{
NSMutableArray
*
total
=
[
NSMutableArray
new
];
NSMutableArray
*
total
=
[
NSMutableArray
new
];
NSArray
*
normalDataArray
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosTempCacheKey
];
NSArray
*
normalDataArray
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosTempCacheKey
];
...
@@ -63,10 +64,12 @@
...
@@ -63,10 +64,12 @@
}];
}];
[
sendDataMap
enumerateKeysAndObjectsUsingBlock
:
^
(
NSString
*
api
,
NSArray
<
SendDataEntity
*>
*
entities
,
BOOL
*
_Nonnull
stop
)
{
[
sendDataMap
enumerateKeysAndObjectsUsingBlock
:
^
(
NSString
*
api
,
NSArray
<
SendDataEntity
*>
*
entities
,
BOOL
*
_Nonnull
stop
)
{
// TODO: 如果数据量过大,
NSMutableArray
*
sendDatas
=
[
NSMutableArray
new
];
NSMutableArray
*
sendDatas
=
[
NSMutableArray
new
];
[
entities
enumerateObjectsUsingBlock
:
^
(
SendDataEntity
*
obj
,
NSUInteger
idx
,
BOOL
*
_Nonnull
stop
)
{
[
entities
enumerateObjectsUsingBlock
:
^
(
SendDataEntity
*
obj
,
NSUInteger
idx
,
BOOL
*
_Nonnull
stop
)
{
[
sendDatas
addObject
:[
obj
.
data
mj_JSONObject
]];
[
sendDatas
addObject
:[
obj
.
data
mj_JSONObject
]];
}];
}];
if
(
sendDatas
.
count
>
0
)
{
if
(
sendDatas
.
count
>
0
)
{
[
self
sendDataArray
:
sendDatas
currentAPI
:
api
success
:^
(
NSInteger
code
)
{
[
self
sendDataArray
:
sendDatas
currentAPI
:
api
success
:^
(
NSInteger
code
)
{
if
(
completion
)
{
if
(
completion
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment