I am using Alamofire to integrate API calls, handling error code and specially status code error like 401 and 403. I have also created the getRefreshToken() function, if error comes it will refresh the token.
Problem I am facing about Alamofire.retryCount and repeat the request in the right way? I have seen different references but I cannot figure out How I integrate in my main method.
Updated: added getRefreshToken() code.
My Code:
@objc private func getDataFromWeb(params:NSMutableDictionary,
callback:@escaping (_ success:Bool, _ result:Any?)->(Bool)) -> Void {
var method = HTTPMethod.get
var encoding = URLEncoding.default as ParameterEncoding
if(params["Method"] as! String == "POST"){
method = HTTPMethod.post
encoding = Alamofire.JSONEncoding.default
}
Alamofire.request(url,
method:method,
parameters:pr,
encoding:encoding,
headers:[ "Accept":"application/json", "Authorization":"Bearer \(token ?? "")"])
.downloadProgress(closure: { (progress) in
//progress closure
})
.validate(statusCode: 200..<300)
.response { response in
print(response.error?.localizedDescription)
var code = response.response?.statusCode
if code == 401 || code == 403{
self.getRefreshToken() // calling refresh token method
} else {
if(callback(response.data?.count != 0, response.data)){
}
}
}
}
getRefreshToken Function:
func getRefreshToken() {
DataProvider.main.serviceLogin(username:User, password:Pass, firmNo: FirmId , callback:{success, result in
do{
if(success){
let model = try JSONDecoder().decode(Login.self, from: result as! Data)
if model.isSuccess == true {
DataProvider.main.token = model.token
}
return true
} else{
return false
}
}catch let e {
print(e)
return false
}
})
}
References:
https://stackoverflow.com/questions/58496713/retry-the-old-request-with-new-refresh-token-in-swift-alamofire
https://stackoverflow.com/questions/52287882/right-way-to-refresh-the-token