UIBezierpathDemo icon indicating copy to clipboard operation
UIBezierpathDemo copied to clipboard

你好,不知道如何联系你,有个关于YTKNetwork的请求问题

Open YuanJiaShuai opened this issue 6 years ago • 3 comments

token失效之后,请求刷新token方法之后继续请求之前的接口;请问你是如何处理的?

YuanJiaShuai avatar Apr 08 '18 06:04 YuanJiaShuai

凑合看。 这样能实现功能,但是不知道有没有别的问题。 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

HungryFour avatar Apr 09 '18 08:04 HungryFour

谢谢您的方法,我看你重新创建了两个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);
    }
}

YuanJiaShuai avatar Apr 09 '18 09:04 YuanJiaShuai

没事。 应该有更好的做法~ 但是功能应该都是满足的。


武建明 软件开发工程师

手机: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.

HungryFour avatar Apr 09 '18 11:04 HungryFour