标签: alamofire-request

Alamofire 自动刷新令牌并在 iOS Swift 4 中重试之前的 API 调用

现在我正在 Swift 4 中开发一个 iOS 应用程序。这里我使用 Alamofire 来集成 API 调用。我需要集成正确的方法来自动刷新身份验证令牌并重试之前的 API 调用。成功登录后,我将存储身份验证令牌。因此,登录后,在每个 API 中,我都会在标头部分附加令牌。如果令牌过期,我将收到 401。那时我需要自动刷新身份验证令牌并再次调用相同的 API。我怎样才能做到这一点?我检查了 Stackoverflow,但没有得到任何解决方案。

这是我的 API 调用,

import Foundation
import Alamofire
import SwiftyJSON

class LoveltyAPI {

    let loveltyURL = Bundle.main.object(forInfoDictionaryKey: "APIUrlString") as! String  // Main URL
    let buildVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String  //infoDictionary?["CFBundleShortVersionString"] as AnyObject
    weak var delegate:LoveltyProtocol?  

    func get_profile(app_user_id:String, token:String) {
        let urlString = "\(loveltyURL)\(get_profile_string)?app_user_id=\(app_user_id)"
        let headers = ["Content-Type":"application/json","X-Requested-With":"XMLHttpRequest", "Authentication":"Token \(token)"]
        Alamofire.request(urlString, method: .get, encoding: JSONEncoding.default, headers: headers).responseJSON { response in
            switch response.result {
            case …
Run Code Online (Sandbox Code Playgroud)

ios swift alamofire alamofire-request

7
推荐指数
2
解决办法
9888
查看次数

将 Alamofire 完成处理程序转换为异步/等待 | 斯威夫特 5.5,*

我有当前有效的功能。我将它与完成处理程序一起使用:

func getTokenBalances(completion: @escaping (Bool) -> Void) {
    guard let url = URL(string: "someApiUrlFromLostandFound") else {
        print("Invalid URL")
        completion(false)
        return
    }
    
    AF.request(url, method: .get).validate().responseData(completionHandler: { data in
        do {
            guard let data = data.data else {
                print("Response Error:", data.error as Any)
                completion(false)
                return
            }
            
            let apiJsonData = try JSONDecoder().decode(TokenBalanceClassAModel.self, from: data)
            DispatchQueue.main.async {
                self.getTokenBalancesModel = apiJsonData.data.items
                completion(true)
            }
        } catch {
            print("ERROR:", error)
            completion(false)
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

如何将其转换为 swift 5.5 的新 async/await 功能?

这是我尝试过的:

func getTokenBalances3() async {
    let url …
Run Code Online (Sandbox Code Playgroud)

swift alamofire alamofire-request swiftui alamofire5

7
推荐指数
2
解决办法
1万
查看次数

通用类型“DataResponse”专门使用太少的类型参数(得到 1,但预期为 2)

更新到 Alamofire 4.5 破坏了语法。我应该如何重新格式化我的代码以使其正常工作?

我拥有的:

func getAllBeacons(completionHandler: @escaping ([BeaconModel]) -> ()) {
        let URL = "https://testwebapi.knowe.net/Knowe.Beacon.WebApi/beacon/GetAllByLanguage"
        let preferredLanguage = NSLocale.preferredLanguages[0]
        print(UIDevice.current.modelName)
        AF.request(URL, method: .post, parameters: ["SearchValue": preferredLanguage, "IosModelName": UIDevice.current.modelName]).responseArray { (response: DataResponse<[BeaconModel]>) in
            let beaconArray = response.result.value
            completionHandler(beaconArray!)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有什么:

func getAllBeacons(completionHandler: @escaping ([BeaconModel]) -> ()) {
        let URL = "https://testwebapi.knowe.net/Knowe.Beacon.WebApi/beacon/GetAllByLanguage"
        let preferredLanguage = NSLocale.preferredLanguages[0]
        print(UIDevice.current.modelName)
        Alamofire.request(URL, method: .post, parameters: ["SearchValue": preferredLanguage, "IosModelName": UIDevice.current.modelName]).responseArray { (response: DataResponse<[BeaconModel]>) in
            let beaconArray = response.result.value
            completionHandler(beaconArray!)
        }
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我在模拟器上运行该代码时,该代码有效,但在我的物理 iPhone 上却无效。后者给了我一个错误:模块“Alamofire”没有名为“请求”的成员

这个项目是分配给我的,不知道用的是什么版本的Alamofire和Alamofireobjectmapper。最好的情况是降级到以前的版本,但我不知道哪些版本将与以前的语法兼容。 …

xcode cocoapods swift alamofire alamofire-request

6
推荐指数
1
解决办法
2936
查看次数

HTTP-GET 方法在浏览器中与 POSTMAN 桌面应用程序中返回不同的结果?

我正在构建一个 iOS 应用程序,我需要运行 HTTP 请求并处理响应正文。

问题是,当我在 Postman / Alamofire (swift) 与 Browser / Postman-chrome-extension 中进行测试时,我的 request-url 没有给出相同的响应正文。我需要知道为什么!?

这是网址:

https://www.google.com/search?tbs=sbi:AMhZZivGExkvmpguEZhe42DkT_1rMlcib7qBIztMPGfETwnezLiPyUSkqWXCvkcNvYoMmGZUT6OZrP27vhKRuaEWMFjjIQNdxDTmtkHYapxOICPAwLiP7BF6CRWnP-AGa5-Skoq jt6yKiQ8NGSJTJs5tADelkjneEVMDLMMbg6OuEhxorXiOpFlKX5kr3NDb6z8MAbdjkGGkJdEAzfvloCgJiojx6FeKlyy1fLAYns5faQjLlUjRYoD0nErpyoDaiKrlIVr4VQF_18KFxxm4xnX2UNQmLvHvaB UT3xbYofqMS49r2Yp0wJRVCLSc-rIzRCZscc8CnV4hHv

当在浏览器中测试时,它给我一个谷歌搜索结果,其中包含视觉上相似的图像。

当在 POSTMAN 或我的 swift 代码中测试时,它返回默认的空白谷歌屏幕。

非常感谢任何帮助!

networking postman alamofire postman-native-app alamofire-request

6
推荐指数
1
解决办法
3391
查看次数

如何使用 alamofire 重试失败的请求?

在没有连接的情况下,我将失败的请求附加到队列管理器(包含数组)

我正在呈现一个带有重试按钮的自定义弹出窗口。当按下重试按钮时,我想重试在无连接状态下无法发送的请求。可能有多个请求。

当我尝试retryRequestAlamofireSession类中的方法时,请求的任务状态保持在 initilazed 或 finish 状态,但必须恢复才能成功发送请求,我该如何解决这种情况?

拦截器接口.swift

    public func didGetNoInternetConnection() {
    let viewModel = AppPopupViewModel(title: L10n.AppPopUp.areYouOffline, description: L10n.AppPopUp.checkInternetConnection, image: Images.noInternetConnection.image, firstButtonTitle: L10n.General.tryAgain, secondButtonTitle: nil, firstButtonAction: { [weak self] in
        guard let self = self else { return }
        DispatchQueue.main.async {
            self.retry()
        }
    }, secondButtonAction: nil, dismissCompletion: nil, dimColor: Colors.appGray.color.withAlphaComponent(0.8), showCloseButton: true, customView: nil)
    DispatchQueue.main.async {
        AppPopupManager.show(with: viewModel, completion: nil)
    }
}

private func retry() {
    
    guard let head = NetworkRequestStorage.shared.head else {
        return
    }
    let …
Run Code Online (Sandbox Code Playgroud)

ios swift alamofire alamofire-request alamofire5

6
推荐指数
0
解决办法
1175
查看次数