ios - OAuthSwift (1) 连接

标签 ios swift oauth oauth-1.0a

我正在尝试创建一个客户端(在私有(private) Pod 中)来连接到 Garmin API (OAuth1),但在执行此操作时遇到一些问题。我正在使用 OAuthSwift 和 OAuthSwiftAlamofire

首先我试图获得所有授权,

let oauthswift = OAuth1Swift(
        consumerKey:    "*****************",
        consumerSecret: "****************",
        requestTokenUrl: "http://connectapitest.garmin.com/oauth-service-1.0/oauth/request_token",
        authorizeUrl:    "http://connecttest.garmin.com/oauthConfirm",
        accessTokenUrl:  "http://connectapitest.garmin.com/oauth-service-1.0/oauth/access_token"
    )

oauthswift.authorizeURLHandler = SafariURLHandler(viewController: self, oauthSwift: oauthswift)

let _ = oauthswift.authorize(
        withCallbackURL: URL(string: "https://www.****.co/api/v2/garminCallback")!,
        success: { credential, response, parameters in
            print("Success")
            print(credential.oauthToken)
            print(credential.oauthTokenSecret)
            print(credential.oauthVerifier)
    },
        failure: { error in
            print("Error")
            print(error.localizedDescription)
    })

AppDelegate:

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    if (url.host == "oauth-callback") {
        OAuthSwift.handle(url: url)
    }
    return true
}

所以,这部分代码在 safari 中打开 garmin 的连接页面,我使用我的帐户 mail/pwd 进行连接,仅此而已。回调永远不会成功,或者永远不会失败。所以我无法访问我的凭据。就像authorize(withCallBackURL...) 不要等待callBack,永远不会获取URL 中的信息(如oauth-identifier)。

我不明白为什么,如果你有想法,谢谢。

最佳答案

我正在分享对我有用的代码

    // create an instance of oAuth and retain it
    let oauthSwift =  OAuth1Swift(
        consumerKey:    "*******",
        consumerSecret: "*******",
        requestTokenUrl: "https://connectapi.garmin.com/oauth-service/oauth/request_token",
        authorizeUrl: "https://connect.garmin.com/oauthConfirm",
        accessTokenUrl: "https://connectapi.garmin.com/oauth-service/oauth/access_token"
    )

    // add safari as authorized URL Handler
    oauthSwift.authorizeURLHandler = SafariURLHandler(viewController: self, oauthSwift: oauthSwift)
    
    // set redirection URL
    guard let redirectURL = URL(string: "oauth-swift://garmin-callback") else { return }
    
    // add callback url to authorized url
    oauthSwift.addCallbackURLToAuthorizeURL = true
      // authorized the request
    oauthSwift.authorize(withCallbackURL: redirectURL, success: { (credentials, response, parameters) in
        print(response)
    }, failure: { (error) in
        print(error)
    })

//授权调用已改为下面

        oauthSwift.addCallbackURLToAuthorizeURL = true
    oauthSwift.authorize(withCallbackURL: redirectURL)  { result in
        switch result {
        case .success(let (req, response, res)):
            print("response=", response ?? "no")
            print("req=", req ?? "no")
            print("res=", res ?? "no")
            print("dataString=",response?.dataString())
            if let secrect = res["oauth_token_secret"] as? String{
                self.garminAccessTokenSecret = secrect
            }
            if let token = res["oauth_token"] as? String{
                self.garminAccessToken = token
            }
        case .failure(let error):
            print(error.description)
        }
    }

关于ios - OAuthSwift (1) 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41768212/

相关文章:

ios - 在 Web View 中点击应用程序 url 方案后如何返回应用程序

ios - Epub 字体修改不起作用

swift - UILocalNotification 不触发 iOS 8.4

api - 使用 Chrome 身份验证 token xoxc- 访问 Slack API

php - 创建一个以 API 为中心的应用程序,我自己的疑惑

java - Spring Oauth2 隐式流程

ios - 使用 AutoLayout 添加带有内容的 UIViewController 时,内容动画不起作用

android - Opentok 存档问题?

c++ - 使用 C++ 编写的算法实时处理数据

iphone - iPad 和 MapKit - 无法拖动可拖动标记