跟踪发送的数据的使用,并通过我的应用程序收到(track usage of data sent an

2019-08-07 17:39发布

如何跟踪发送,并通过我的应用程序接收到的数据的使用情况如何?

我只是想记录发送的字节数和我的应用程序运行时收到的。 如果我能得到的WiFi和蜂窝网络独立的信息那么这将是伟大的,但它不是一个优先事项。

我知道如何找到设备的总使用- https://stackoverflow.com/a/8014012/427969

另外,我知道我可以用仪器来收集网络活动数据,但我想记录这个数据在我的应用程序,所以需要一个纲领性的方式做到这一点。

我试图寻找这一切,但我觉得是设备的网络使用情况,而不是特定的应用程序的使用。

以下是WhatsApp的公司设置的截图 - >使用页面,该页面将给予什么,我试图做一个更好的主意:

我使用AFNetworking的HTTP请求和响应,如下所示:

NSData* requestData = [NSJSONSerialization dataWithJSONObject:info options: NSJSONWritingPrettyPrinted error:&error];
if(error != nil) {
    NSLog(@"Error: converting JSON: %@, %@", error, error.userInfo);
}

[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];

/*
    ################### ----------------- ###################
    WILL [requestData length] BE THE NUMBER OF BYTES SEND ???
    ################### ----------------- ###################
*/
NSLog(@"data bytes: %d", [requestData length]); 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL .....];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest: request                                                                                 
    success: ^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

    } failure: ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {

}];
[operation start];

我已经更新了我的问题。

可有人请回答:是[requestData length]字节的号码发送一个请求吗?

Answer 1:

有具体取决于您使用的是带有下载该类别中的几种方法AFNetworking

AFHTTPRequestOperation例如有以下方法:

setDownloadProgressBlock:^(NSInteger bytesRead, NSInteger totalBytesRead, NSInteger totalBytesExpectedToRead)

对于周围的其他方法,有这样的方法:

setUploadProgressBlock:^(NSInteger bytesWritten,long long totalBytesWritten,long long totalBytesExpectedToWrite)

有了这个的方法,你应该尽量保持你的所有的上传和下载数据的轨道。

AFJSONRequestOperation是的子类AFHTTPRequestOperation ,因此这些方法应该在任一类的工作。

而且请注意,仅发送“JSON请求”到一个Web服务器并不意味着你不下载。 为了确保你必须让内容 - JSON - 这将是下载数据。

而且你QRE质疑,如果[requestData length]告诉你向服务器发送适当的大小。 这不是确切大小,因为你内的RequestData你没有对HTTP请求的额外的头,所以你的尺寸会比发送的原始字节小一点点。

每当上述方法中的一个执行的字节读取并把它添加到被执行这个方法之前,先阅读字节你应该添加的结果。 为了确保您拥有永久保存当前bytesRead在coredata例如或任何其他持久性存储。



Answer 2:

我用亚历山大提到的方法如下:

AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest: request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // success
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // failure
}];

[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
    // bytes received - saved bytesRead variable to NSUserDefaults
}];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    // bytes sent - saved bytesWritten variable to NSUserDefaults
}];
[operation start];


文章来源: track usage of data sent and received through my app
标签: ios ios6