Skip to content

Commit 6439b81

Browse files
committed
backgroud upload
1 parent 159a332 commit 6439b81

File tree

8 files changed

+55
-13
lines changed

8 files changed

+55
-13
lines changed

QiniuSDK/Http/QNSessionManager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
timeout:(UInt32)timeout
1212
urlConverter:(QNUrlConvert)converter
1313
upStatsDropRate:(float)dropRate
14-
dns:(QNDnsManager*)dns;
14+
dns:(QNDnsManager*)dns
15+
enableBg:(BOOL)bg;
1516

1617
- (void) multipartPost:(NSString *)url
1718
withData:(NSData *)data

QiniuSDK/Http/QNSessionManager.m

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,21 @@ - (instancetype)initWithProxy:(NSDictionary *)proxyDict
9292
timeout:(UInt32)timeout
9393
urlConverter:(QNUrlConvert)converter
9494
upStatsDropRate:(float)dropRate
95-
dns:(QNDnsManager*)dns {
95+
dns:(QNDnsManager*)dns
96+
enableBg:(BOOL)bg{
9697
if (self = [super init]) {
97-
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
9898
if (proxyDict != nil) {
99-
configuration.connectionProxyDictionary = proxyDict;
10099
_noProxy = NO;
101100
}
102101
else {
103102
_noProxy = YES;
104103
}
105-
_httpManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
106-
_httpManager.responseSerializer = [AFHTTPResponseSerializer serializer];
104+
if (bg) {
105+
_httpManager = [QNSessionManager sharedBgHttpManagerWithProxy:proxyDict];
106+
}else{
107+
_httpManager = [QNSessionManager httpManagerWithProxy:proxyDict];
108+
}
109+
107110
_timeout = timeout;
108111
_converter = converter;
109112
_dns = dns;
@@ -113,8 +116,37 @@ - (instancetype)initWithProxy:(NSDictionary *)proxyDict
113116
return self;
114117
}
115118

119+
+ (AFHTTPSessionManager*) httpManagerWithProxy:(NSDictionary *)proxyDict{
120+
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
121+
if (proxyDict != nil) {
122+
configuration.connectionProxyDictionary = proxyDict;
123+
}
124+
125+
AFHTTPSessionManager *httpManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
126+
httpManager.responseSerializer = [AFHTTPResponseSerializer serializer];
127+
return httpManager;
128+
}
129+
130+
+ (AFHTTPSessionManager*) sharedBgHttpManagerWithProxy:(NSDictionary *)proxyDict{
131+
static AFHTTPSessionManager *httpManager = nil;
132+
static dispatch_once_t onceToken;
133+
dispatch_once(&onceToken, ^{
134+
NSURLSessionConfiguration *configuration = nil;
135+
configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[QNUserAgent sharedInstance].id];
136+
if (proxyDict != nil) {
137+
configuration.connectionProxyDictionary = proxyDict;
138+
}
139+
140+
httpManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
141+
httpManager.responseSerializer = [AFHTTPResponseSerializer serializer];
142+
[httpManager setDidFinishEventsForBackgroundURLSessionBlock:^(NSURLSession *session) {}];
143+
});
144+
145+
return httpManager;
146+
}
147+
116148
- (instancetype)init {
117-
return [self initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil];
149+
return [self initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil enableBg:NO];
118150
}
119151

120152
+ (QNResponseInfo *)buildResponseInfo:(NSHTTPURLResponse *)response

QiniuSDK/Http/QNStats.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ - (instancetype) initWithPushInterval: (int) interval
159159
#endif
160160

161161
// timer for push
162-
NSLog(@"interval %d", _pushInterval);
162+
// NSLog(@"interval %d", _pushInterval);
163163
_pushTimer = [NSTimer scheduledTimerWithTimeInterval:_pushInterval target:self selector:@selector(pushStats) userInfo:nil repeats:YES];
164164
[_pushTimer fire];
165165

QiniuSDK/Http/QNUserAgent.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@
1919

2020
static NSString *clientId(void) {
2121
#if __IPHONE_OS_VERSION_MIN_REQUIRED
22-
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
22+
NSString* s= [[[UIDevice currentDevice] identifierForVendor] UUIDString];
23+
if (s == nil ) {
24+
s = @"simulator";
25+
}
26+
return s;
2327
#else
2428
long long now_timestamp = [[NSDate date] timeIntervalSince1970] * 1000;
2529
int r = arc4random() % 1000;

QiniuSDK/Storage/QNConfiguration.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ typedef void (^QNConfigurationBuilderBlock)(QNConfigurationBuilder *builder);
7979

8080
@property (readonly) BOOL disableATS;
8181

82+
@property (readonly) BOOL enableBackgroundUpload;
83+
8284
@property (readonly) float upStatsDropRate;
8385

8486
+ (instancetype)build:(QNConfigurationBuilderBlock)block;
@@ -178,6 +180,7 @@ typedef void (^QNConfigurationBuilderBlock)(QNConfigurationBuilder *builder);
178180

179181
@property (assign) BOOL disableATS;
180182

183+
@property (assign) BOOL enableBackgroundUpload;
181184
/**
182185
* 上传统计随机上传的概率,1为全部上传,0为不上传,0.5为随机上传一半。默认0.3
183186
*/

QiniuSDK/Storage/QNConfiguration.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ - (instancetype)init {
109109
_converter = nil;
110110

111111
_disableATS = YES;
112+
113+
_enableBackgroundUpload = NO;
112114

113115
_upStatsRate = 0.3;
114116
}

QiniuSDK/Storage/QNUploadManager.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ - (instancetype)initWithConfiguration:(QNConfiguration *)config {
7171
_config = config;
7272
#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090)
7373
if (hasNSURLSession()) {
74-
_httpManager = [[QNSessionManager alloc] initWithProxy:config.proxy timeout:config.timeoutInterval urlConverter:config.converter upStatsDropRate:-1 dns:config.dns];
74+
_httpManager = [[QNSessionManager alloc] initWithProxy:config.proxy timeout:config.timeoutInterval urlConverter:config.converter upStatsDropRate:-1 dns:config.dns enableBg:config.enableBackgroundUpload];
7575
}
7676
else {
7777
_httpManager = [[QNHttpManager alloc] initWithTimeout:config.timeoutInterval urlConverter:config.converter upStatsDropRate:config.upStatsDropRate dns:config.dns];

QiniuSDKTests/QNSessionTest.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ - (void)testProxy {
9393
(NSString *)kCFStreamPropertyHTTPProxyPort : @8888,
9494
};
9595

96-
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:proxyDict timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil];
96+
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:proxyDict timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil enableBg:NO];
9797
NSData *data = [@"Hello, World!" dataUsingEncoding:NSUTF8StringEncoding];
9898
__block QNResponseInfo *testInfo = nil;
9999
[httpManager post:@"http://up123.qiniu.com" withData:data withParams:nil withHeaders:nil withStats:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) {
@@ -110,7 +110,7 @@ - (void)testUrlConvert {
110110
return [url stringByReplacingOccurrencesOfString:@"upnono" withString:@"up"];
111111
};
112112

113-
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:c upStatsDropRate:-1 dns:nil];
113+
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:c upStatsDropRate:-1 dns:nil enableBg:NO];
114114
NSData *data = [@"Hello, World!" dataUsingEncoding:NSUTF8StringEncoding];
115115
__block QNResponseInfo *testInfo = nil;
116116
[httpManager post:@"http://upnono.qiniu.com" withData:data withParams:nil withHeaders:nil withStats:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) {
@@ -129,7 +129,7 @@ - (void)testPostIp {
129129
QNResolver *resolver = [[QNResolver alloc] initWithAddres:@"114.114.115.115"];
130130
QNDnsManager *dns = [[QNDnsManager alloc] init:[NSArray arrayWithObject:resolver] networkInfo:[QNNetworkInfo normal]];
131131
[dns putHosts: @"upnonono.qiniu.com" ip: [QNZone zone0].up.ips[0]];
132-
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:dns];
132+
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:dns enableBg:NO];
133133
[httpManager post:@"http://upnonono.qiniu.com" withData:data withParams:nil withHeaders:nil withStats:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) {
134134
testInfo = info;
135135
} withProgressBlock:nil withCancelBlock:nil];

0 commit comments

Comments
 (0)