首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swifter:使用Twitter应用程序进行身份验证

Swifter:使用Twitter应用程序进行身份验证
EN

Stack Overflow用户
提问于 2020-05-23 05:00:08
回答 1查看 80关注 0票数 1

我使用Swifter通过SSO对用户进行身份验证。Swifter生成以下URL (删除密钥):

代码语言:javascript
复制
let url = URL(string:"twitterauth://authorize?consumer_key=[KEY]&consumer_secret=[SECRET]&oauth_callback=swifter-[KEY]")!

UIApplication.shared.open(url, options: [:], completionHandler: { (success) in

然而,当Twitter打开时,只有常见的应用程序显示,没有任何机会进行身份验证。这里是不是少了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-04-06 00:27:49

我将展示如何(在2021年)不需要每次都登录。请按照以下步骤操作(将YOURAPPNAME替换为您的应用程序名称):

  1. 在twitter门户上的身份验证设置下添加YOURAPPNAME://作为回调URL。为此,您需要启用3条腿的OAuth,并将其添加到回调URLS中。您还需要输入网站URL,但它可以是任何内容(我有https://www.google.com).

  1. 在您的播客文件中,确保您有行:

代码语言:javascript
复制
pod 'Swifter' , :git => 'https://github.com/mattdonnelly/Swifter.git'

不要只使用pod ' Swifter‘,因为还有另一个名为Swifter的项目,它不是mattdonnelly开发的,无法工作。

  1. 在项目浏览器中单击您的项目,选择信息选项卡。在底部,您将看到URL类型。将其展开并单击加号。在URL方案中输入YOURAPPNAME (如果您的应用程序名称是" demoApp“输入demoApp not demoApp://
  2. If您的应用程序代理尚未使用打开url功能(标准是no,但我的是因为我有谷歌登录,在我的情况下我不需要做任何事情)在您的应用程序代理中导入Swifter并添加此功能:

代码语言:javascript
复制
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        
    Swifter.handleOpenURL(url, callbackURL: URL(string: "YOURAPPNAME://")!)
        
    return true
}

  1. 在你的视图控制器中,你需要首先授权twitter,然后你可以做任何事情(tweet,lookup feed,等等)。您可以使用swifter.authorize来完成此操作,它会打开一个浏览器。对于那些希望在第一次之后不再需要它的人来说,这就是swifter.verifyAccountCredentials的用武之地。要查找CONSUMER_KEY和CONSUMER_SECRET,请转到twitter门户的密钥和令牌区域。

代码语言:javascript
复制
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")
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61963803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档