【问题标题】:iOS TWTRComposer Request failed: unauthorized (401)iOS TWTRComposer 请求失败:未经授权 (401)
【发布时间】:2017-11-13 10:51:28
【问题描述】:

使用以下代码和我尝试过的许多其他变体,我总是收到未经授权的错误。我正在使用 CocoaPods 使用 TwitterKit 3.0。我已经设置了 plist,配置了我的 twitter 应用程序,并且代码如下:

// In didFinishLaunchingWithOptions
Twitter.sharedInstance().start(withConsumerKey:"XX", consumerSecret:"YYY")

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
    return Twitter.sharedInstance().application(app, open: url, options: options)
}

// In response to a click
Twitter.sharedInstance().logIn { session, error in
    if session != nil { // Log in succeeded
        let composer = TWTRComposer()

        composer.setText(tweetText)

        composer.show(from: self.navigationController!) { result in
            if (result == .done) {
                print("Successfully composed Tweet")
            } else {
                print("Cancelled composing")
            }
        }
    }
}

“发送推文时遇到错误:错误 Domain=TWTRNetworkingErrorDomain Code=-1011 "请求失败: 未经授权的 (401)" UserInfo={NSLocalizedFailureReason=, TWTRNetworkingStatusCode=401, NSErrorFailingURLKey=https://api.twitter.com/1.1/statuses/update.json, NSLocalizedDescription=请求失败:未授权 (401)"

【问题讨论】:

  • 你解决过这个问题吗?我遇到了完全相同的问题!太令人沮丧了。
  • 我也有同样的问题。你修好了吗?

标签: ios twitterkit


【解决方案1】:

在 TwitterKit 3.3.0 中,basically

虽然 Twitter Kit 不会在你的 应用程序,它必须设置为有效的 URL,应用程序才能使用 SDK。

即使当您尝试创建 Twitter app 时,它并没有说它是强制性的 - 它就是如果您想要下面的流程将起作用

不这样做会破坏整个流程,并且不会自动发生任何事情:

如果设备上未安装 Twitter,它会自动回退到通过 Web 视图使用 OAuth(第一个用户使用 SFSafariViewController,后续其他用户使用 UIWebView。)

如果你没有有 callback_url 会有什么效果:

只有当用户安装了 Twitter 应用程序时,我们才能撰写推文或登录 - 其余的都行不通。

当 Twitter 应用未安装时:

  • 使用composer.show(from: self) { (result) in 时,您将获得.cancelled
  • 使用TWTRTwitter.sharedInstance().logIn(completion: { (session, error) in 时,您将获得Request failed: unauthorized (401)

一般说明:

  • 如果 API 密钥/秘密无效,TwitterKit 执行的任何操作都会导致应用崩溃

  • 确保单例start("key", "secret") 方法和项目plist 具有值:twitterkit-{API KEY} 具有same 键,否则您的应用将崩溃。

【讨论】:

    【解决方案2】:

    如果按照 Twitter 的设置说明进行操作后仍无法正常工作,请尝试重新生成使用者密钥。这解决了我的问题。

    【讨论】:

      【解决方案3】:

      我也面临同样的问题。我使用 Twitter、FB 和 Google 登录。 URLSchemes的plist序列中的问题

      我首先添加了 twitter Schemes,它起作用了

      我的前任——

       <key>CFBundleURLTypes</key>
              <array>
                  <dict>
                      <key>CFBundleURLSchemes</key>
                      <array>
                          <string>twitterkit-xxxx</string>
                      </array>
                  </dict>
                  <dict>
                      <key>CFBundleURLSchemes</key>
                      <array>
                          <string>fbxxxxx</string>
                      </array>
                  </dict>
                  <dict>
                      <key>CFBundleTypeRole</key>
                      <string>Editor</string>
                      <key>CFBundleURLSchemes</key>
                      <array>
                          <string>com.googleusercontent.apps.xxxx-xxxx</string>
                      </array>
                  </dict>
              </array>
      

      【讨论】:

        【解决方案4】:

        使用TWTRComposer时无需登录。 SDK 将使用 Twitter 应用程序中的当前会话(如果有),或者以智能方式回退。我无法说明您的登录失败的原因,但我建议您直接删除它以解决问题。

        let composer = TWTRComposer()
        
        composer.setText(tweetText)
        
        composer.show(from: self.navigationController!) { (result in
            if (result == .done) {
                print("Successfully composed Tweet")
            } else {
                print("Cancelled composing")
            }
        }
        

        你说你已经设置好了一切,但如果你错过了一个步骤,我会给你一个安装清单:

        • 初始化 Twitter 工具包

          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
              Twitter.sharedInstance().start(withConsumerKey:"xxx", consumerSecret:"xxx")
          
              return true
           }
          
        • 配置 Info.Plist

          // Info.plist
          <key>CFBundleURLTypes</key>
          <array>
            <dict>
              <key>CFBundleURLSchemes</key>
              <array>
                <string>twitterkit-<consumerKey></string>
              </array>
            </dict>
          </array>
          <key>LSApplicationQueriesSchemes</key>
          <array>
              <string>twitter</string>
              <string>twitterauth</string>
          </array>
          

        如果您仍有问题,请务必通过https://apps.twitter.com/ 检查您的应用状态。有多种方法可以限制甚至停用您的应用程序密钥。如果是这种情况,应用名称下方会出现一个红色标签。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-30
          • 2012-11-27
          • 2018-04-23
          • 1970-01-01
          • 2012-05-03
          相关资源
          最近更新 更多