获取 TwitterKit/Fabric 身份验证失败的单个推文

Getting single Tweet with TwitterKit/Fabric authentication failure

我正在尝试检索一条推文并通过 TwitterKit 中提供的 TWTRTweetView 在我的应用程序中显示它。我遵循了 this Fabric guide 并得到了以下代码。

import UIKit
import TwitterKit


class SingleTweetViewController: UIViewController{


@IBOutlet weak var plainView: UIView!

override func viewDidLoad(){
    super.viewDidLoad()

    Twitter.sharedInstance().logInGuestWithCompletion { session, error in
        if let validSession = session {
            Twitter.sharedInstance().APIClient.loadTweetWithID("4831830029115392") { tweet, error in
                if let t = tweet {
                    let tweetView = TWTRTweetView(tweet: tweet)
                    tweetView.showActionButtons = true
                    self.plainView.addSubview(tweetView)
                } else {
                    println("Failed to load Tweet: \(error?.localizedDescription)")
                }
            }

        } else {
            println("Unable to login as guest: \(error.localizedDescription)")
            println(error?.localizedFailureReason)
        }
    }
}

由于身份验证失败,代码生成了这两个错误。

Unable to login as guest: Request failed: forbidden (403)
Optional("Twitter API error : Unable to verify your credentials (code 99)")

值得一提的是,该应用通过this guide后添加的登录按钮成功登录Twitter。有谁知道如何修复此错误?我在这里遗漏了一些代码还是与 Fabric 相关的问题?

您必须在尝试使用 Fabric 之前对其进行初始化,这正是您在示例代码中所做的。

对于初始化,请按照 the Fabric documentation site 中的说明进行操作。本质上,您已经将以下行添加到您的应用程序委托中(除了导入 TwitterKit 之外):

Twitter.sharedInstance().startWithConsumerKey("your_key", consumerSecret: "your_secret")
Fabric.with([Twitter.sharedInstance()])

然后从 fabric.io 复制并粘贴您的消费者密钥和机密。 Fabric 应该会自动为您生成这些。

我使用内置于 "View tweet in application" 选项的 Fabric 应用程序解决了这个问题,该选项位于与 "Add login button button" 选项相同的菜单中。 Fabric 应用程序然后将正确的身份验证密钥插入到 Info.plist 文件中。 Fabric 应用程序提供的代码似乎与 Fabric docs 上给出的代码做同样的事情,但结果因您使用的代码而异。两个代码示例如下所示:

来自 Fabric 文档的代码:

Twitter.sharedInstance().logInGuestWithCompletion { session, error in
  if let validSession = session {
    Twitter.sharedInstance().APIClient.loadTweetWithID("20") { tweet, error in
      if let t = tweet {
        self.tweetView.configureWithTweet(t)
      } else {
        println("Failed to load Tweet: \(error.localizedDescription)")
      }
    }
  } else {
     println("Unable to login as guest: \(error.localizedDescription)")
  }
}

来自 Fabric 应用程序的代码:

Twitter.sharedInstance().logInGuestWithCompletion { (session, error) in
        Twitter.sharedInstance().APIClient.loadTweetWithID("20") { (tweet, error) in
            self.view.addSubview(TWTRTweetView(tweet: tweet))
        }
    }

运行 第一个代码会给出身份验证错误,而第二个代码会毫无问题地加载推文。 if 语句 if let validSession = session returns a false 并且发生身份验证错误。我找不到 validSession 到底是什么,但它可能比较了两组不同的键或类似的东西。