美文网首页
『ios』token机制保活

『ios』token机制保活

作者: butterflyer | 来源:发表于2018-12-20 15:10 被阅读100次

    token保活机制。
    如何查看用户是否是活跃状态?这里我们可能就会用到token,比如后台给token设置的存活时间为10分钟,那么我们就可以在后台开个线程每5分钟去更新下token,从而一直保活。当app在后台的时候,杀死计时器,这样当token失效的时候,用户也就变为了不活跃状态。

    对于刷新token的接口的调用要考虑下面几种情况,才能写的更加全面。

    1. 在app处于后台的时候杀死计时器,在app处于活跃状态的时候再打开计时器。
    
    2.我们需要保存上一次刷新token的时间,并拿上一次的时间跟这次调用接口的时间进行比较,如果时间大于300秒则去调用接口。
    
    3.在我们打开计时器之前,需要判断上一次记录的时间与当前时间,如果小于300秒,则记录下距离300秒差多少,比如差30秒,则开启一个30秒执行一次的计时器。当计时器执行了一次,关闭之前的计时器,再重新开启一个300秒的计时器,去轮询app。
    
    4.我们需要还需要注意的是,当用户登录的时候,要重新开始计时器轮询,并开始时间从0开始算,不能用之前的计时器。
    

    上面就是我考虑到的所有情况。
    下面是对计时器操作的代码部分,

    - (void)startRefrershTokenWithFire:(BOOL)immediately {//开始刷新token 重启计时器
    
        NSInteger timeInterval = kToken_Refresh_Time;
       if ([TVMTokenVerifyModel getCheckTimeSeconds]>0) {//这种情况是针对在进程被杀死或者是e切换到后台去,由于计时器被销毁,重新开启计时器如果还按300秒不合理,应该按d300秒减去当前时间距离上次执行时间的时间差
            timeInterval = [TVMTokenVerifyModel getCheckTimeSeconds];
        }
        
        if (self.timer_refresh_token) {
            [self.timer_refresh_token invalidate];
            self.timer_refresh_token = nil;
        }
        NSDictionary *userInfo = @{@"timeInterval":[NSString stringWithFormat:@"%ld",timeInterval]};
        self.timer_refresh_token = [MSWeakTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(refrershTokenAction:) userInfo:userInfo repeats:YES dispatchQueue:dispatch_get_main_queue()];
        if (immediately == YES&&timeInterval == kToken_Refresh_Time) {//当第一进入app或者当时间为300秒时,立刻执行计时器
            [self.timer_refresh_token fire];
        }
       
    }
    - (void)stopRefrershToken {//关闭计时器
        if (self.timer_refresh_token) {
            [self.timer_refresh_token invalidate];
            self.timer_refresh_token = nil;
        }
    }
    
    #pragma mark --算出在杀死进程或者暂停计时器的情况下,重新从开始计时器,计时时间   如果300-时间差大于0代表需要重置时间计时器
    +(NSInteger)getCheckTimeSeconds{
        NSUserDefaults *muserdef = [NSUserDefaults standardUserDefaults];
        id lasttime = [muserdef valueForKey:kToken_Check_LastTime_KEY];
        NSString *currenttime = [NSString stringWithFormat:@"%0.f", [[NSDate date] timeIntervalSince1970]];
        NSInteger SurplusSeconds = kToken_Refresh_Time-(currenttime.integerValue - [lasttime integerValue]);
        return SurplusSeconds;
    }
    

    相关文章

      网友评论

          本文标题:『ios』token机制保活

          本文链接:https://www.haomeiwen.com/subject/pipykqtx.html