4

使用以下代码和我尝试过的许多其他变体,我总是收到未经授权的错误。我正在使用使用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")
            }
        }
    }
}

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

4

4 回答 4

2

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

于 2017-11-11T20:27:31.483 回答
0

我也面临同样的问题。我使用 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>
于 2017-09-12T06:08:12.843 回答
0

在 TwitterKit 3.3.0 中,基本上

尽管 Twitter Kit 不会在您的应用中请求回调 URL,但它必须设置为有效的 URL,应用才能使用 SDK。

即使当你尝试创建一个Twitter 应用程序时,它也没有说它是强制性的——如果你想要下面的流程就可以了

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

如果设备上未安装 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}具有相同的键,否则您的应用程序将崩溃。

于 2018-03-04T13:47:27.850 回答
0

使用时无需登录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/检查您的应用程序的状态。有多种方法可以限制甚至停用您的应用程序密钥。如果是这种情况,应用名称下方将有一个红色标签。

于 2017-08-03T23:12:06.667 回答