iOS 前端记录api访问异常 并回传服务器

    很多时候,用户会反馈网络访问异常。但那时候其实服务器访问都正常,并没有看到什么异常报错。故无法排查这些异常问题。还有很多时候,很多用户的这些异常无法及时的反馈给运营,导致,可能流失了很多用户。所以运营要求前端可以捕捉到用户的访问异常报错,整合成数据供他们分析。

   我们的项目,网络访问用的AFNetworking的框架。于是想到,可以在访问error时,前端记录这些访问异常的接口url,参数,报错时间,报错内容以及状态码。用来统计具体错误的相关详细信息。等到用户的app跟服务器的网络访问正常时,再将这些错误信息一并传给服务器。

[managerPOST:urlStrparameters:paramssuccess:^(NSURLSessionDataTask*_Nonnulltask,id_NonnullresponseObject) {

success(responseObject);

}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {

//再异常报错回包的地方,去保存相关数据

[selfsaveError:errorwithUrl:urlStr];

[[manageroperationQueue]cancelAllOperations];

failure(error);

}];

2.+(void)saveError:(NSError*)error

withUrl:(NSString*)url{

NSDate*date = [NSDatedate];

NSTimeZone*zone = [NSTime ZonesystemTimeZone];

NSIntegerinterval = [zone secondsFromGMTForDate: date];

NSDate*localeDate = [date dateByAddingTimeInterval: interval];

NSString* time=[[SliderViewControllersharedSliderController].formatterstringFromDate:localeDate];

NSMutableArray*array=[NSMutableArrayarrayWithArray:[YcfViewgetNSUserDefaultsObject:ERROR_CONNECT_MESSAGE]];

//将报错数据拼接好,插入保存进沙盒

NSDictionary* dic=[NSDictionarydictionaryWithObjectsAndKeys:time,@"errorTime",url,@"errorUrl",[NSStringstringWithFormat:@"%ld",(long)error.code],@"errorCode",[StaticgetCurrentNetWorkStatus],@"currentNetwork",[error.userInfoobjectForKey:@"NSLocalizedDescription"] ,@"errorDescrib",nil];

[arrayaddObject:dic];

[YcfView setErrorMessage:arrayTag:ERROR_CONNECT_MESSAGE];

}

数据记录好后,接下来就是传给服务器的时机选择了。因为很多时间,客户端与服务器的连接异常,但是很有可能是客户端本身是断网情况,这个时候回传服务器,也必将失败的。但是如果用户正在使用app时,将数据回传,会影响正常的数据访问。所以,将时机放在用户将app退到后台时,尝试将数据打包发给服务器,如果发送成功,即清空沙盒里的错误数据。如果发送失败,则继续将失败信息保存记录。等待下一次退到后台时,继续尝试发送。

-(void)sendErrorToServer{

NSDictionary* userDic=(NSDictionary*)[YcfViewgetNSUserDefaultsObject:USERDATA];

NSString*userID = [userDicobjectForKey:@"userId"];

NSString* userName=[userDicobjectForKey:@"uNickname"];

if([userIDintValue]==0) {

userID=@"10";

userName=@"未注册用户";

}

if(![[userDicallKeys]containsObject:@"uNickname"]) {

userID=@"10";

userName=@"未注册用户";

}

NSArray*array=(NSArray*)[YcfViewgetNSUserDefaultsObject:ERROR_CONNECT_MESSAGE] ;

if([arraycount]==0) {

return;

}

NSMutableDictionary* dic=[[NSMutableDictionaryalloc]init];

[dicsetObject:userNameforKey:@"userName"];

[dicsetObject:userIDforKey:@"userId"];

[dicsetObject:arrayforKey:@"errorList"];

[HttpToolspost4WithPath:SEND_ERROR_URLparams:dicsuccess:^(idJSON) {

if([HttpRequestDicisOkStatus:JSON]) {

[YcfView removeErrorList:ERROR_CONNECT_MESSAGE];

}else{

}

}failue:^(idError) {

}];

}

你可能感兴趣的:(iOS 前端记录api访问异常 并回传服务器)