【发布时间】:2020-04-11 17:45:23
【问题描述】:
【问题讨论】:
标签: ios swift oauth header postman
【问题讨论】:
标签: ios swift oauth header postman
我建议您使用 oAuth 库来为您处理所有这些。我在我的一个项目中使用OAuthSwift,它运行良好。如果你想使用它,你需要:
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
设置 URL 方案。在目标的信息选项卡中将项目添加到URL Types。您应该将 oauth-swift 替换为您的应用程序名称。
在 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)
}
}
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,这样它就不会很快释放自己。您可以将其作为属性添加到您的视图控制器。
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 部分复制的,但我自己添加了一些亮点。
【讨论】: