有人可以向我解释如何使用Swifter for iOS成功授权Twitter(oAuth)。我正在尝试创建一个时间表。
let twitterAccount = Swifter(consumerKey: "CONSUMER-KEY", consumerSecret: "CONSUMER-SECRET")
然后我需要授权,而且我对如何这样做很困惑。
swifter.authorizeWithCallbackURL(callbackURL, success: {
(accessToken: SwifterCredential.OAuthAccessToken?, response: NSURLResponse) in
// ...
},
failure: {
(error: NSError) in
// ...
})
我收到错误提示'未解决的callbackURL标识符'这显然是因为我还没有对它进行定义,但是当我这样做时,它会在电话中说出额外的参数。还有更简单的授权方式吗?在此之后,我应该如何在get-home-timeline部分中获取用户screen-name / user-id。我知道我做了一件完全错误的事情,我对这一切都很陌生,所以任何帮助都会受到赞赏。
答案 0 :(得分:5)
也许你已经找到了答案,但我正在写这些仍在寻找它的人。
swifter.authorizeWithCallbackURL(NSURL(string: "swifter://success")!, success: {
(accessToken: SwifterCredential.OAuthAccessToken?, response: NSURLResponse) in
println("Access Token key \(accessToken?.key)")
println("userId\(accessToken?.userID)")
println("userName\(accessToken?.screenName)")
println("Access Token secret\(accessToken?.secret)")
//Save the values that you need in NSUserDefaults
},
failure: failureHandler)
您可以使用自己喜欢的任何callbackURL
。但是,要让您的应用响应此网址,您必须进行一些更改。在AppDelegate
类中添加以下内容。别忘了导入SwifteriOS
func application(application: UIApplication!, openURL url: NSURL!, sourceApplication: String!, annotation: AnyObject!) -> Bool {
Swifter.handleOpenURL(url)
return true
}
现在在Project Explorer中单击您的项目,选择info
选项卡。在底部,您会看到URL Types
。展开它并单击加号。在URL Schemes
输入您的callbackURL
计划。在此示例中,其swifter
和identifier
会写下您的应用标识符。
现在,在任何其他ViewController
之前,您需要先调用以下内容,然后才能调用任何需要身份验证的API。
required init(coder aDecoder: NSCoder) {
var oauthToken : String = NSUserDefaults.standardUserDefaults().valueForKey("oauth_token") as String
var oauthTokenSecret : String = NSUserDefaults.standardUserDefaults().valueForKey("oauth_secret") as String
self.swifter = Swifter(consumerKey: Twitter["consumerKey"]!, consumerSecret: Twitter["consumerSecret"]!, oauthToken: oauthToken, oauthTokenSecret: oauthTokenSecret)
super.init(coder: aDecoder)
}
在此之后,您可以发送消息,发布推文,创建友谊等。
答案 1 :(得分:1)
Swifter 有一些更新,但 Atifs 的回答仍然很棒。我将展示如何(在 2021 年)不需要每次都登录。请按照以下步骤操作(将 YOURAPPNAME 替换为您的应用名称):
在 twitter 开发者门户的身份验证设置下添加 YOURAPPNAME:// 作为回调 URL。为此,您需要启用 3-legged OAuth,并将其添加到回调 URL 中。您还需要输入网站 URL,但它可以是任何内容(我有 https://www.google.com)。还要确保(如果您想发推文)您在设置中更改应用的读写权限。
在你的 podfile 中,确保你有一行:
pod 'Swifter' , :git => 'https://github.com/mattdonnelly/Swifter.git'
不要只使用 pod 'Swifter',因为还有另一个名为 Swifter 的项目,它不是由 mattdonnelly 设计的,也不会工作。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
Swifter.handleOpenURL(url, callbackURL: URL(string: "YOURAPPNAME://")!)
return true
}
import Swifter
import AuthenticationServices
class ViewController: UIViewController, ASWebAuthenticationPresentationContextProviding {
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
return self.view.window!
}
var swifter: Swifter!
override func viewDidLoad() {
super.viewDidLoad()
if UserDefaults.standard.string(forKey: "twitterOAuthToken") == nil {
swifter = Swifter(consumerKey: CONSUMER_KEY, consumerSecret: CONSUMER_SECRET)
if let url = URL(string: "YOURAPPNAME://") {
swifter.authorize(withProvider: self, callbackURL: url) { (token, response) in
UserDefaults.standard.set(token?.key, forKey: "twitterOAuthToken")
UserDefaults.standard.set(token?.secret, forKey: "twitterOAuthSecret")
print("signed in!!")
}
}
} else {
swifter = Swifter(consumerKey: CONSUMER_KEY, consumerSecret: CONSUMER_SECRET, oauthToken: UserDefaults.standard.string(forKey: "twitterOAuthToken") ?? "", oauthTokenSecret: UserDefaults.standard.string(forKey: "twitterOAuthSecret") ?? "")
swifter.verifyAccountCredentials(includeEntities: nil, skipStatus: nil, includeEmail: nil) { (json) in
print("signed in!")
} failure: { (error) in
self.swifter = Swifter(consumerKey: CONSUMER_KEY, consumerSecret: CONSUMER_SECRET)
if let url = URL(string: "YOURAPPNAME://") {
self.swifter.authorize(withProvider: self, callbackURL: url) { (token, response) in
UserDefaults.standard.set(token?.key, forKey: "twitterOAuthToken")
UserDefaults.standard.set(token?.secret, forKey: "twitterOAuthSecret")
print("signed in!!")
}
}
}
}
let button = UIButton()
button.layer.backgroundColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)
button.frame = CGRect(x: 200, y:0, width: 200, height: 200)
button.center = view.center
button.addTarget(self, action: #selector(tweet), for: .touchUpInside)
view.addSubview(button)
}
@objc func tweet() {
swifter.postTweet(status: "wild") { (json) in
print("tweeted!")
} failure: { (error) in
print("tweet failed")
}
}
}