UIBezierpathDemo
UIBezierpathDemo copied to clipboard
你好,不知道如何联系你,有个关于YTKNetwork的请求问题
token失效之后,请求刷新token方法之后继续请求之前的接口;请问你是如何处理的?
凑合看。 这样能实现功能,但是不知道有没有别的问题。 16年的代码。好久没维护了
#import <YTKNetwork/YTKNetwork.h>
@interface FFRequest : YTKRequest<YTKRequestDelegate>
/** 二次请求的成功处理 */ @property (nonatomic, copy, nullable) YTKRequestCompletionBlock cSuccessCompletionBlock;
/** 二次请求的错误处理 */ @property (nonatomic, copy, nullable) YTKRequestCompletionBlock cFailureCompletionBlock;
@end
#import "FFRequest.h" #import "FFTokenManager.h"
@interface FFRequest ()
@end
@implementation FFRequest
-
(instancetype)init{ self = [super init]; if (self) { self.delegate = self; } return self; }
-
(NSDictionary *)requestHeaderFieldValueDictionary{ return @{@"ACCESS-TOKEN":(KTO([FFTokenManager shareManager].accessToken))}; }
-
(void)requestFinished:(YTKBaseRequest *)request{ if (self.cSuccessCompletionBlock) { self.cSuccessCompletionBlock(request); } [[HUDManager shareManager] disMiss]; }
-
(void)requestFailed:(YTKBaseRequest *)request{
[[HUDManager shareManager] disMiss];
if (self.cFailureCompletionBlock) { self.cFailureCompletionBlock(request); }
/* invalid access_token失效 */ if ([request.responseHeaders[@"API-ERROR-DESC"] isEqualToString:@"invalid access_token"]) {
[[FFTokenManager shareManager] needRefreshTokenSuccess:^{ FFRequest *req = self; [req start]; } failure:^{ //刷新失败重新登录 }];
}else{ /* invalid refresh token重新登录 */ if ([request.responseHeaders[@"API-ERROR-DESC"] isEqualToString:@"invalid refresh token"]) { [FFRVCManager notLogin]; return; }
if ([request.responseHeaders[@"API-ERROR-DESC"] length]>0) { [SVProgressHUD showErrorWithStatus:request.responseHeaders[@"API-ERROR-DESC"]]; }else{ if (request.error) { [SVProgressHUD showErrorWithStatus:request.error.localizedDescription]; }else{ FFLog(@"网址为:%@的请求,请求报错,但错误原因未告知,所以此处不在UI显示",request.requestUrl); } }
} }
@end
谢谢您的方法,我看你重新创建了两个block,代替原有的block使用;如果是这样我需要改动的地方比较多,因为系统原本就有两个block,我直接替换使用;这是我现在使用的,很感谢您的提示~
- (void)requestFinished:(__kindof YTKBaseRequest *)request{
//使用系统回调
if(self.successCompletionBlock){
self.successCompletionBlock(request);
}
//token 失效
if([request.responseObject[@"code"] integerValue] == 40101){
//关闭融云
[[RCIM sharedRCIM] disconnect:NO];
[self updataToken];
}
}
- (void)requestFailed:(__kindof YTKBaseRequest *)request{
//使用系统回调
if(self.failureCompletionBlock){
self.failureCompletionBlock(request);
}
}
没事。 应该有更好的做法~ 但是功能应该都是满足的。
武建明 软件开发工程师
手机:18513006017 地址:北京市朝阳区朝外大街乙六号朝外SOHO A座6层603
在2018年04月9日 17:41,Super_Yuan[email protected] 写道:
谢谢您的方法,我看你重新创建了两个block,代替原有的block使用;如果是这样我需要改动的地方比较多,因为系统原本就有两个block,我直接替换使用;这是我现在使用的,很感谢您的提示~
-
(void)requestFinished:(__kindof YTKBaseRequest *)request{ //使用系统回调 if(self.successCompletionBlock){ self.successCompletionBlock(request); } //token 失效 if([request.responseObject[@"code"] integerValue] == 40101){ //关闭融云 [[RCIM sharedRCIM] disconnect:NO]; [self updataToken]; } }
-
(void)requestFailed:(__kindof YTKBaseRequest *)request{ //使用系统回调 if(self.failureCompletionBlock){ self.failureCompletionBlock(request); } }
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.