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
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
126 additions
and
177 deletions
+126
-177
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
+49
-50
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";
[
dict
setObject
:
@""
forKey
:
@"extra_param"
];
[
dict
setObject
:
@""
forKey
:
@"referrer_tab_name"
];
[
dict
setObject
:
@
(
0
)
forKey
:
@"is_push"
];
[
Phobos
track
:
@"page_view"
attributes
:
dict
];
NSArray
*
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
[
Phobos
track
:
@"page_view"
attributes
:
dict
];
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
//
[Phobos track:@"page_view" attributes:dict];
//
NSArray *array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
//
//
[Phobos track:@"page_view" attributes:dict];
//
array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
[
dict
setObject
:[
PhobosUtil
currentTime
]
forKey
:
@"in"
];
[
dict
setObject
:[
PhobosUtil
currentTime
]
forKey
:
@"out"
];
[
Phobos
track
:
@"page_view"
attributes
:
dict
sendNow
:
YES
];
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
//
array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
[
Phobos
track
:
@"test"
attributes
:
dict
];
array
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosCacheKey
];
[
Phobos
track
:
@"test"
attributes
:
dict
sendNow
:
YES
];
[
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!
target
'GMPhobos_Example'
do
pod
'GMPhobos'
,
:path
=>
'../'
# pod 'GMPhobos', :git => 'git@git.wanmeizhensuo.com:gengmeiios/GMPhobos.git', :branch => 'jql/coreData'
target
'GMPhobos_Tests'
do
inherit!
:search_paths
end
...
...
Example/Podfile.lock
View file @
c606fc11
...
...
@@ -33,6 +33,6 @@ SPEC CHECKSUMS:
MJExtension: 635f2c663dcb1bf76fa4b715b2570a5710aec545
TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed
PODFILE CHECKSUM:
4db0de045b595396507d6bad04e4823b02c3061d
PODFILE CHECKSUM:
abbb682362e2d6dbd228843955b17f6796b958b0
COCOAPODS: 1.8.4
Example/Tests/GMPhotoTest.m
View file @
c606fc11
...
...
@@ -10,6 +10,7 @@
#import <GMPhobos/Phobos.h>
#import "GMPhobosController.h"
#import <GMCache/GMCache.h>
#import <MJExtension/MJExtension.h>
NSString
*
const
MockAppName
=
@"gengmei_test"
;
NSString
*
const
MockChannelId
=
@"AppStore"
;
...
...
@@ -25,7 +26,7 @@ NSString *const MockCityId = @"beijing";
-
(
void
)
setUp
{
[
super
setUp
];
[[
NSUserDefaults
standardUserDefaults
]
set
Object
:
@
(
YES
)
forKey
:
PhobosGray
];
[[
NSUserDefaults
standardUserDefaults
]
set
Bool
:
YES
forKey
:
PhobosGray
];
[
Phobos
clientWithAppName
:
MockAppName
channelId
:
MockChannelId
];
Phobos
.
sharedClient
.
serverAPI
=
@"http://log.test.igengmei.com/log/collect"
;
Phobos
.
sharedClient
.
logEnabled
=
NO
;
// 调试打Log模式,看情况开启
...
...
@@ -39,8 +40,7 @@ NSString *const MockCityId = @"beijing";
-
(
void
)
tearDown
{
// Put teardown code here. This method is called after the invocation of each test method in the class.
[
super
tearDown
];
[
Phobos
removeAllNormalPhobosData
];
[
Phobos
removeAllImmediatelyPhobosData
];
[
Phobos
removeAllPhobosData
];
}
/**
...
...
@@ -50,14 +50,14 @@ NSString *const MockCityId = @"beijing";
*/
-
(
void
)
testClientWithUserId
{
[
self
setUp
];
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
[
Phobos
.
sharedClient
setUserId
:
MockUserId
];
[
Phobos
.
sharedClient
setCurrentCityId
:
MockCityId
];
[
Phobos
track
:
MockEventId
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
NSDictionary
*
dict
=
[
array
objectAtIndex
:
0
];
NSDictionary
*
dict
=
[
array
.
firstObject
.
data
mj_JSONObject
];
[
self
verfiyDict
:
dict
];
XCTAssertTrue
([[
dict
objectForKey
:
@"user_id"
]
isEqualToString
:
MockUserId
]
,
@"Invalid user_id value"
);
}
...
...
@@ -70,9 +70,9 @@ NSString *const MockCityId = @"beijing";
-
(
void
)
testTrackEventWithoutAttr
{
[
Phobos
track
:
MockEventId
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
NSDictionary
*
dict
=
[
array
objectAtIndex
:
0
];
NSDictionary
*
dict
=
[
array
.
firstObject
.
data
mj_JSONObject
];
[
self
verfiyDict
:
dict
];
}
...
...
@@ -86,9 +86,9 @@ NSString *const MockCityId = @"beijing";
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
==
1
,
@"array is empty"
);
NSDictionary
*
dict
=
[
array
objectAtIndex
:
0
];
NSDictionary
*
dict
=
[
array
.
firstObject
.
data
mj_JSONObject
];
[
self
verfiyDict
:
dict
];
//验证Param的值是否正确
...
...
@@ -102,13 +102,13 @@ NSString *const MockCityId = @"beijing";
* @since <#version number#>
*/
-
(
void
)
testTrackEventWithAttrAndSendNow
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
// Given
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
// When
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
// 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";
// When
[
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";
// 因为实时埋点是异步删除,所以这个位置暂时延时取数据,待优化 TODO
dispatch_after
(
dispatch_time
(
DISPATCH_TIME_NOW
,
(
int64_t
)(
0
.
25
*
NSEC_PER_SEC
)),
dispatch_get_main_queue
(),
^
{
NSArray
*
array
=
[
Phobos
immediatelyPhobosForServerAPI
];
XCTAssertTrue
(
array
.
count
==
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
[
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
(),
^
{
NSArray
*
array
=
[
Phobos
immediatelyPhobosForServerAPI
];
XCTAssertTrue
(
array
.
count
==
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
[
Phobos
track
:
MockEventId
attributes
:
attr
sendNow
:
YES
];
array
=
[
Phobos
normalPhobosDataForServerAPI
];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
0
,
@"array shouldn't be empty"
);
XCTAssertTrue
([
Phobos
fetchToBeSendPhobosDataCount
]
==
0
,
@"array shouldn't be empty"
);
});
});
}
...
...
@@ -159,14 +156,14 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4
*/
-
(
void
)
testTrackEventWithDoubleAttrAndNoSendNow
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
//
[
NSThread
sleepForTimeInterval
:
0
.
2
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
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条数据会自动上报,模拟此情况
for
(
int
i
=
0
;
i
<
50
;
i
++
)
{
...
...
@@ -174,12 +171,12 @@ NSString *const MockCityId = @"beijing";
}
[
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
];
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
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";
* @since 1.1.4
*/
-
(
void
)
testTrackEventWithSendNowAndNoSendNowOne
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
sendNowAttr
=
@{
@"attr"
:
@"track_attr_send_now"
};
...
...
@@ -196,28 +193,28 @@ NSString *const MockCityId = @"beijing";
[
Phobos
track
:
MockEventId
attributes
:
attr
];
}
[
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条数据会自动上报,模拟此情况
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
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
];
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
];
[
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
];
[
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";
* @since 1.1.4
*/
-
(
void
)
testTrackEventWithSendNowAndNoSendNowTwo
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
NSDictionary
*
sendNowAttr
=
@{
@"attr"
:
@"track_attr_send_now"
};
[
Phobos
track
:
MockEventId
attributes
:
sendNowAttr
sendNow
:
YES
];
[
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
];
[
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
:
sendNowAttr
sendNow
:
YES
];
[
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
];
[
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
];
[
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";
* @since 1.1.4
*/
-
(
void
)
testTrackEventWithSendNowAndNoSendNowThree
{
[
Phobos
removeAll
Normal
PhobosData
];
[
Phobos
removeAllPhobosData
];
NSDictionary
*
attr
=
@{
@"attr"
:
@"track_attr"
};
//
[
Phobos
track
:
MockEventId
attributes
:
attr
];
[
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条数据会自动上报,模拟此情况
for
(
int
i
=
0
;
i
<
50
;
i
++
)
{
[
Phobos
track
:
MockEventId
attributes
:
attr
];
}
[
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
];
[
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
{
...
...
@@ -323,20 +320,20 @@ NSString *const MockCityId = @"beijing";
[
controller
viewWillDisappear
:
true
];
[
self
paramUnNilCheck
];
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
XCTAssertTrue
(
array
.
count
!=
0
,
@"PhobosCacheKey 下面应该有数据"
);
NSDictionary
*
dic
=
array
[
0
][
@"params"
];
NSDictionary
*
dic
=
[
array
.
firstObject
mj_JSONObject
][
@"params"
];
XCTAssertTrue
([
dic
[
@"referrer_id"
]
isEqualToString
:
@"rreferrerIdTest"
],
@"referrerId至少使用默认的空字符串"
);
}
-
(
void
)
paramUnNilCheck
{
[
NSThread
sleepForTimeInterval
:
0
.
2
];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<
SendDataEntity
*>
*
array
=
[
Phobos
fetchToBeSendPhobosData
];
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
[
@"referer"
]
integerValue
]
>=
0
,
@"referer至少使用默认的空字符串"
);
XCTAssertTrue
(
dic
[
@"business_id"
]
!=
nil
,
@"business_id至少使用默认的空字符串"
);
...
...
@@ -352,8 +349,9 @@ NSString *const MockCityId = @"beijing";
}
// 该单元测试暂时不用,因为过滤代码暂时不用,所以不需要跑通
/*
- (void)testCheckPVPhobos {
[
Phobos
removeAll
Normal
PhobosData
];
[Phobos removeAllPhobosData];
NSString *inDate = [PhobosUtil currentTime];
[NSThread sleepForTimeInterval:1];//模拟浏览页面,让out和in时间相差1s
...
...
@@ -369,12 +367,12 @@ NSString *const MockCityId = @"beijing";
[dict setObject:@"" forKey:@"referrer_tab_name"];
[dict setObject:@(0) forKey:@"is_push"];
[Phobos track:@"page_view" attributes:dict];
NSArray
*
array
=
[
Phobos
normalPhobosDataForServerAPI
];
NSArray
<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData
];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue(array.count == 1, @"PhobosCacheKey 下面应该有数据");
[Phobos track:@"page_view" attributes:dict];
XCTAssertTrue
([
Phobos
normalPhobosCount
]
==
1
,
@"PhobosCacheKey 上条数据不应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosDataCount] == 2
, @"PhobosCacheKey 上条数据不应该发送");
[NSThread sleepForTimeInterval:2];//模拟浏览页面,让第二次浏览和上一次时间相差2s
...
...
@@ -383,14 +381,15 @@ NSString *const MockCityId = @"beijing";
[dict setObject:[PhobosUtil currentTime] forKey:@"out"];
[Phobos track:@"page_view" attributes:dict];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
2
,
@"PhobosCacheKey 上条数据应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosData
Count]== 2, @"PhobosCacheKey 上条数据应该发送");
[Phobos track:@"page_view" attributes:dict];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
2
,
@"PhobosCacheKey 上条数据不应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosData
Count] == 2, @"PhobosCacheKey 上条数据不应该发送");
[Phobos track:@"test" attributes:dict];
[NSThread sleepForTimeInterval:0.2];
XCTAssertTrue
([
Phobos
normalPhobos
Count
]
==
3
,
@"PhobosCacheKey 上条数据应该发送"
);
XCTAssertTrue([Phobos
fetchToBeSendPhobosData
Count] == 3, @"PhobosCacheKey 上条数据应该发送");
}
*/
#pragma mark - 其它方法test
...
...
GMPhobos/Classes/NewPhobos.h
View file @
c606fc11
...
...
@@ -166,23 +166,13 @@ NS_ASSUME_NONNULL_BEGIN
@interface
NewPhobos
(
UtilTest
)
/** 获取所有非立即发送埋点数量 */
+
(
NSInteger
)
normalPhobos
Count
;
+
(
NSInteger
)
fetchToBeSendPhobosData
Count
;
/** 获取
所有非立即
发送埋点数据 */
+
(
NSArray
*
)
normal
PhobosData
;
/** 获取
待
发送埋点数据 */
+
(
NSArray
*
)
fetchToBeSend
PhobosData
;
/** 获取所有立即发送埋点数量 */
+
(
NSUInteger
)
immediatelyPhobosCount
;
/** 获取所有立即发送埋点数据 */
+
(
NSArray
*
)
immediatelyPhobosData
;
/** 清除非立即发送埋点数据缓存 */
+
(
void
)
removeAllNormalPhobosData
;
/** 清除立即发送埋点数据缓存 */
+
(
void
)
removeAllImmediatelyPhobosData
;
/** 清除待发送埋点数据缓存 */
+
(
void
)
removeAllPhobosData
;
@end
...
...
GMPhobos/Classes/NewPhobos.m
View file @
c606fc11
...
...
@@ -386,15 +386,8 @@ static NSString *sdkVersion = @"1.4.0";
NSDictionary
*
dataDict
=
[
_sharedClient
prepareDictionaryForEvent
:
eventName
attributes
:
attributes
];
@try
{
NSData
*
JSON
=
[
PhobosUtil
encodeJSON
:
dataDict
];
[
PhobosDataManager
insertData
:
dataDict
sendAPI
:
currentAPI
immediately
:
sendNow
completion
:^
(
BOOL
contextDidSave
,
NSError
*
_Nullable
error
)
{
if
(
sendNow
)
{
[
self
disposeSendDataWithImmediately
:
YES
];
}
else
{
NSArray
<
SendDataEntity
*>
*
fetchArray
=
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
NO
];
if
(
fetchArray
.
count
>
50
)
{
[
self
disposeSendDataWithImmediately
:
NO
];
}
}
[
PhobosDataManager
insertData
:
dataDict
sendAPI
:
currentAPI
completion
:^
(
BOOL
contextDidSave
,
NSError
*
_Nullable
error
)
{
[
self
disposeSendDataWithImmediately
:
sendNow
];
}];
}
@catch
(
NSException
*
exception
)
{
NSAssert
(
NO
,
@"哎呀呀,VALUE不能为NSObject "
);
...
...
@@ -405,8 +398,8 @@ static NSString *sdkVersion = @"1.4.0";
* 处理发送数据
*/
+
(
void
)
disposeSendDataWithImmediately
:
(
BOOL
)
immediately
{
NSArray
<
SendDataEntity
*>
*
entities
=
[
PhobosDataManager
fetch
DataEntitiesWithImmediately
:
immediately
];
if
(
entities
.
count
>
0
)
{
NSArray
<
SendDataEntity
*>
*
entities
=
[
PhobosDataManager
fetch
ToBeSendDataEntities
];
if
(
immediately
||
entities
.
count
>
5
0
)
{
[
PhobosDataManager
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusSending
completion
:
nil
];
[
PhobosSendManager
sendDataWithEntities
:
entities
completion
:
^
(
NSArray
<
SendDataEntity
*>
*
_Nonnull
finishEntities
,
NSInteger
code
)
{
if
(
code
==
200
)
{
...
...
@@ -425,37 +418,17 @@ static NSString *sdkVersion = @"1.4.0";
@implementation
NewPhobos
(
UtilTest
)
/** 获取所有非立即发送埋点数量 */
+
(
NSInteger
)
normalPhobosCount
{
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d"
,
PhobosDataSendStatusNormal
];
return
[
PhobosDataManager
fetchCountOfEntitiesWithPredicate
:
predicate
];
}
/** 获取所有非立即发送埋点数据 */
+
(
NSArray
*
)
normalPhobosData
{
return
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
NO
];
+
(
NSInteger
)
fetchToBeSendPhobosDataCount
{
return
[
PhobosDataManager
fetchCountOfToBeSendEntities
];
}
/** 获取所有立即发送埋点数量 */
+
(
NSUInteger
)
immediatelyPhobosCount
{
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
return
[
PhobosDataManager
fetchCountOfEntitiesWithPredicate
:
predicate
];
}
/** 获取所有立即发送埋点数据 */
+
(
NSArray
*
)
immediatelyPhobosData
{
return
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
YES
];
}
/** 清除非立即发送埋点数据缓存 */
+
(
void
)
removeAllNormalPhobosData
{
NSArray
<
SendDataEntity
*>
*
fetchArray
=
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
NO
];
[
PhobosDataManager
deleteDataEntities
:
fetchArray
];
/** 获取待发送埋点数据 */
+
(
NSArray
*
)
fetchToBeSendPhobosData
{
return
[
PhobosDataManager
fetchToBeSendDataEntities
];
}
/** 清除立即发送埋点数据缓存 */
+
(
void
)
removeAllImmediatelyPhobosData
{
NSArray
<
SendDataEntity
*>
*
fetchArray
=
[
PhobosDataManager
fetchDataEntitiesWithImmediately
:
YES
];
[
PhobosDataManager
deleteDataEntities
:
fetchArray
];
/** 清除待发送埋点数据缓存 */
+
(
void
)
removeAllPhobosData
{
[
PhobosDataManager
deleteAllEntities
];
}
@end
GMPhobos/Classes/Phobos.h
View file @
c606fc11
...
...
@@ -160,25 +160,14 @@ NS_ASSUME_NONNULL_BEGIN
@interface
Phobos
(
UtilTest
)
/** 获取
所有非立即
发送埋点数量 */
+
(
NSInteger
)
normalPhobos
Count
;
/** 获取
待
发送埋点数量 */
+
(
NSInteger
)
fetchToBeSendPhobosData
Count
;
/** 获取所有非立即发送埋点数据 */
+
(
NSArray
*
)
normalPhobosData
;
/** 获取所有立即发送埋点数量 */
+
(
NSUInteger
)
immediatelyPhobosCount
;
/** 获取所有立即发送埋点数据 */
+
(
NSArray
*
)
immediatelyPhobosData
;
/** 清除非立即发送埋点数据缓存 */
+
(
void
)
removeAllNormalPhobosData
;
/** 清除立即发送埋点数据缓存 */
+
(
void
)
removeAllImmediatelyPhobosData
;
/** 获取待发送埋点数据 */
+
(
NSArray
*
)
fetchToBeSendPhobosData
;
/** 清除待发送埋点数据缓存 */
+
(
void
)
removeAllPhobosData
;
@end
NS_ASSUME_NONNULL_END
GMPhobos/Classes/Phobos.m
View file @
c606fc11
...
...
@@ -212,47 +212,20 @@ static BOOL isGray = NO;
@implementation
NewPhobos
(
UtilTest
)
/** 获取
所有非立即
发送埋点数量 */
+
(
NS
Integer
)
normalPhobos
Count
{
return
isGray
?
[
NewPhobos
normalPhobos
Count
]
:
0
;
/** 获取
待
发送埋点数量 */
+
(
NS
UInteger
)
fetchToBeSendPhobosData
Count
{
return
isGray
?
[
NewPhobos
fetchToBeSendPhobosData
Count
]
:
0
;
}
/** 获取
所有非立即
发送埋点数据 */
+
(
NSArray
*
)
normal
PhobosData
{
return
isGray
?
[
NewPhobos
normalPhobosData
]
:
nil
;
/** 获取
待
发送埋点数据 */
+
(
NSArray
*
)
fetchToBeSend
PhobosData
{
return
isGray
?
[
NewPhobos
fetchToBeSendPhobosData
]
:
@[]
;
}
/** 获取所有立即发送埋点数量 */
+
(
NSUInteger
)
immediatelyPhobosCount
{
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
{
/** 清除待发送埋点数据缓存 */
+
(
void
)
removeAllPhobosData
{
if
(
isGray
)
{
[
NewPhobos
removeAll
Normal
PhobosData
];
[
NewPhobos
removeAllPhobosData
];
}
}
...
...
GMPhobos/Classes/PhobosDataManager.h
View file @
c606fc11
...
...
@@ -21,12 +21,18 @@ typedef NS_ENUM(NSInteger, PhobosDataSendStatus) {
@interface
PhobosDataManager
:
NSObject
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchDataEntitiesWithImmediately
:(
BOOL
)
immediately
;
/** 获取待发送数据,包含待发送数据和发送失败数据 */
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchToBeSendDataEntities
;
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchDataEntitiesWithPredicate
:(
NSPredicate
*
)
searchFilter
;
+
(
NSUInteger
)
fetchCountOfToBeSendEntities
;
+
(
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
)
deleteDataEntities
:(
NSArray
<
SendDataEntity
*>
*
)
entities
;
+
(
void
)
deleteAllEntities
;
@end
...
...
GMPhobos/Classes/PhobosDataManager.m
View file @
c606fc11
...
...
@@ -25,16 +25,14 @@ static NSManagedObjectContext *Phobos_defaultContext;
NSManagedObjectModel
*
model
=
[[
NSManagedObjectModel
alloc
]
initWithContentsOfURL
:
modelURL
];
[
NSManagedObjectModel
MR_setDefaultManagedObjectModel
:
model
];
[
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
{
NSPredicate
*
predicate
;
if
(
immediately
)
{
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
}
else
{
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d"
,
PhobosDataSendStatusNormal
];
}
+
(
NSArray
<
SendDataEntity
*>
*
)
fetchToBeSendDataEntities
{
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
return
[
self
fetchDataEntitiesWithPredicate
:
predicate
];
}
...
...
@@ -42,18 +40,23 @@ static NSManagedObjectContext *Phobos_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
{
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
)
{
return
;
}
SendDataEntity
*
entity
=
[
SendDataEntity
MR_createEntity
];
entity
.
data
=
[
data
mj_JSONData
];
entity
.
api
=
sendAPI
;
entity
.
status
=
immediately
?
PhobosDataSendStatusToBeSend
:
PhobosDataSendStatusNormal
;
entity
.
status
=
PhobosDataSendStatusToBeSend
;
entity
.
id
=
[
PhobosUtil
currentMMTime
];
[[
NSManagedObjectContext
MR_defaultContext
]
MR_saveWithOptions
:
MRSaveSynchronously
completion
:
completion
];
}
...
...
@@ -76,4 +79,9 @@ static NSManagedObjectContext *Phobos_defaultContext;
}
}
+
(
void
)
deleteAllEntities
{
[
SendDataEntity
MR_truncateAll
];
[[
NSManagedObjectContext
MR_defaultContext
]
MR_saveOnlySelfAndWait
];
}
@end
GMPhobos/Classes/PhobosSendManager.m
View file @
c606fc11
...
...
@@ -26,6 +26,7 @@
});
}
// TODO: 全量以后,一定时间需要清除下面逻辑
+
(
void
)
disposeOldData
{
NSMutableArray
*
total
=
[
NSMutableArray
new
];
NSArray
*
normalDataArray
=
[
GMCache
fetchObjectAtDocumentPathWithkey
:
PhobosTempCacheKey
];
...
...
@@ -63,10 +64,12 @@
}];
[
sendDataMap
enumerateKeysAndObjectsUsingBlock
:
^
(
NSString
*
api
,
NSArray
<
SendDataEntity
*>
*
entities
,
BOOL
*
_Nonnull
stop
)
{
// TODO: 如果数据量过大,
NSMutableArray
*
sendDatas
=
[
NSMutableArray
new
];
[
entities
enumerateObjectsUsingBlock
:
^
(
SendDataEntity
*
obj
,
NSUInteger
idx
,
BOOL
*
_Nonnull
stop
)
{
[
sendDatas
addObject
:[
obj
.
data
mj_JSONObject
]];
}];
if
(
sendDatas
.
count
>
0
)
{
[
self
sendDataArray
:
sendDatas
currentAPI
:
api
success
:^
(
NSInteger
code
)
{
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