【问题标题】:How to pass OAuth in swift header. Twitter Api (Get trending hashtags)如何在 swift 标头中传递 OAuth。 Twitter Api(获取热门话题标签)
【发布时间】:2020-04-11 17:45:23
【问题描述】:

如何以编程方式在 swift 标头中使用 Twitter API(获取趋势主题标签)传递此 OAuth?

屏幕截图

【问题讨论】:

    标签: ios swift oauth header postman


    【解决方案1】:

    我建议您使用 oAuth 库来为您处理所有这些。我在我的一个项目中使用OAuthSwift,它运行良好。如果你想使用它,你需要:

    1. 安装它。我建议您使用CocoaPods,因此您需要创建一个名为Podfile 的文本文件(如果您现在没有)并添加此文本:
    source 'https://github.com/CocoaPods/Specs.git'
    platform :ios, '10.0'
    use_frameworks!
    
    target 'YourAppTarget' do
        pod 'OAuthSwift', '~> 2.0.0'
    end
    
    

    然后调用:

    pod install
    

    如果您没有安装CocoaPods,请检查CocoaPods website

    1. 设置 URL 方案。在目标的信息选项卡中将项目添加到URL Types。您应该将 oauth-swift 替换为您的应用程序名称。

    2. 在 AppDelegate 中处理打开 URL。 在 iOS 13 之前的 iOS 中,您需要添加:

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

    在 iOS 13 上,UIKit 将通知UISceneDelegate 而不是UIApplicationDelegate,因此您需要在UISceneDelegate 中实现此方法:

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
            guard let url = URLContexts.first?.url else {
                return
            }
            if (url.host == "oauth-callback") {
                OAuthSwift.handle(url: url)
            }
    }
    
    1. 那么您就可以授权了。您可以将此代码放在按下登录按钮后调用的函数中。此代码假定self 是一个视图控制器。
    // create an instance and retain it
    oauthswift = OAuth1Swift(
        consumerKey:    "********",
        consumerSecret: "********",
        requestTokenUrl: "https://api.twitter.com/oauth/request_token",
        authorizeUrl:    "https://api.twitter.com/oauth/authorize",
        accessTokenUrl:  "https://api.twitter.com/oauth/access_token"
    )
    oauthswift.authorizeURLHandler = SafariURLHandler(viewController: self, oauthSwift: oauthswift)
    // authorize
    let handle = oauthswift.authorize(
        withCallbackURL: URL(string: "oauth-swift://oauth-callback/twitter")!) { result in
        switch result {
        case .success(let (credential, response, parameters)):
          print(credential.oauthToken)
          print(credential.oauthTokenSecret)
          print(parameters["user_id"])
          // Do your request
        case .failure(let error):
          print(error.localizedDescription)
        }             
    }
    

    请记住,URL(string: "oauth-swift://oauth-callback/twitter") 中的 oauth-swift 应该与第 2 步中的 url 方案匹配。还要记住保留 oauthswift,这样它就不会很快释放自己。您可以将其作为属性添加到您的视图控制器。

    1. 如果您想通过调用从 API 获取一些数据,您应该签署您的请求:
    oauthswift.client.get("https://api.linkedin.com/v1/people/~") { result in
        switch result {
        case .success(let response):
            let dataString = response.string
            print(dataString)
        case .failure(let error):
            print(error)
        }
    }
    

    请记住,这个唱歌应该在授权成功后调用(在步骤4中标记为// Do your request)。

    希望您能够将此库添加到您的应用中。如果您有任何问题,请告诉我。

    此答案中的代码是从库的 How to 部分复制的,但我自己添加了一些亮点。

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多