如何在 swift header 中传递 OAuth。 Twitter Api(获取趋势标签)

How to pass OAuth in swift header. Twitter Api (Get trending hashtags)

如何以编程方式在 swift header 中通过 Twitter API(获取趋势标签)传递此 OAuth?

屏幕截图

我建议您使用 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 中的打开 URLs。 在 iOS 早于 iOS 13 你需要添加:

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

在iOS13,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 部分复制的,但我添加了一些我自己的亮点。