ios - texto - myspay
rastrear el uso de los datos enviados y recibidos a través de mi aplicación (2)
Hay varios métodos según la clase que está utilizando para descargar con AFNetworking
AFHTTPRequestOperation
por ejemplo tiene el siguiente método:
setDownloadProgressBlock:^(NSInteger bytesRead, NSInteger totalBytesRead, NSInteger totalBytesExpectedToRead)
Por el contrario, hay un método como este:
setUploadProgressBlock:^(NSInteger bytesWritten,long long totalBytesWritten,long long totalBytesExpectedToWrite)
Con esto, debe intentar realizar un seguimiento de todos sus datos cargados y descargados.
AFJSONRequestOperation
es una subclase de AFHTTPRequestOperation
, por lo que ese método debería funcionar en cualquier clase.
Y tenga en cuenta que solo enviar una "solicitud json" a un servidor web no significa que no esté descargando. Seguro que tienes que obtener el contenido, el json, que serían tus datos descargados.
Además, está cuestionando si [requestData length]
le indica el tamaño correcto enviado al servidor. Ese no es el tamaño exacto, porque dentro de su requestData no tiene los encabezados adicionales para la solicitud HTTP, por lo tanto, su tamaño será un poco más pequeño que los bytes originales enviados.
Cada vez que se ejecuta uno de los métodos anteriores, debe agregar el resultado de los bytes leídos y agregarlo a los bytes que leyó antes de que se ejecutara este método. Por supuesto, debe guardar los bytesRead actuales en coredata, por ejemplo, o cualquier otro almacén de persistencia.
¿Cómo rastrear el uso de los datos enviados y recibidos a través de mi aplicación?
Solo quiero registrar los bytes enviados y recibidos cuando mi aplicación se está ejecutando. Si puedo obtener información separada para WiFi y la red celular, sería genial, pero no es una prioridad.
Sé cómo encontrar el uso total del dispositivo - https://stackoverflow.com/a/8014012/427969
Además, sé que puedo usar Instruments para recopilar datos de actividad de red, pero quiero registrar estos datos en mi aplicación, así que necesito una forma programática para hacerlo.
Traté de buscar esto, pero todo lo que encuentro es el uso de la red del dispositivo y no el uso de una aplicación en particular.
La siguiente es la captura de pantalla de Configuración de Whatsapp -> Página de uso, que daría una mejor idea de lo que estoy tratando de hacer:
Estoy usando AFNetworking
para la solicitud y respuesta HTTP de la siguiente manera:
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];
He actualizado mi pregunta.
¿Alguien puede contestar por favor: es [requestData length]
la cantidad de bytes SEND para una solicitud?
Usé los métodos mencionados por Alexander de la siguiente manera:
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];