【问题标题】:Getting single Tweet with TwitterKit/Fabric authentication failure使用 TwitterKit/Fabric 身份验证失败获取单个推文
【发布时间】:2015-12-05 14:53:33
【问题描述】:

我正在尝试检索一条推文,并通过 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 有关的问题?

【问题讨论】:

    标签: ios swift twitter twitter-fabric


    【解决方案1】:

    您必须先初始化 Fabric,然后再尝试使用它,这就是您在示例代码中所做的。

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

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

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

    【讨论】:

    • 我已经尝试使用 Fabric.io 中的密钥和秘密将您的代码添加到我的应用程序委托中,但仍然遇到相同的错误。任何想法? @马库斯
    • 我记得过去遇到过类似的错误。尝试清理 Xcode 项目(包括派生数据)并从模拟器/设备中删除应用程序。这可能是缓存问题,因此应该对此有所帮助。
    • 该问题确实是由无效密钥引起的。我通过重新运行 Fabric 提供的“在应用程序中包含推文”解决了这个问题。然后正确添加到 Info.plist 的键
    【解决方案2】:

    我使用内置选项“在应用程序中查看推文”的 Fabric 应用程序解决了这个问题,该选项位于与“添加登录按钮按钮”选项相同的菜单中。然后 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 返回false 并发生身份验证错误。我找不到validSession 到底是什么,但它可能比较了两组不同的键或类似的东西。

    【讨论】:

    • 这还会给你一个错误吗?您不再需要调用loginGuestWithCompletion,因为底层网络堆栈会自动执行此操作。
    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2013-07-13
    • 2020-08-28
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多