使用以下代码和我尝试过的其他一些变体,我总是会收到未经授权的错误。我使用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")
}
}
}
}
"发送Tweet时遇到错误:错误 Domain = TWTRNetworkingErrorDomain Code = -1011"请求失败: 未经授权(401)"的UserInfo = {NSLocalizedFailureReason =, TWTRNetworkingStatusCode = 401, NSErrorFailingURLKey = https://api.twitter.com/1.1/statuses/update.json, NSLocalizedDescription =请求失败:未授权(401)"
答案 0 :(得分:2)
如果在遵循Twitter的设置说明后它仍然无效,请尝试重新生成使用者密钥。这解决了我的问题。
答案 1 :(得分: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/检查您应用的状态。有多种方法可以限制甚至取消激活您的应用密钥。如果是这种情况,应用名称下方会有一个红色标签。
答案 2 :(得分:0)
我也面临同样的问题。我使用的是Twitter,FB和Google登录。 URLSchemes的plist序列中的问题
我首先添加了推文计划
我的前 -
<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>
答案 3 :(得分:0)
在TwitterKit 3.3.0中,basically:
虽然您的Twitter中的Twitter Kit不会请求回调网址 应用程序,必须将其设置为应用程序才能使用SDK的有效URL。
即使您尝试创建Twitter app时,也没有说它是强制性的 - 它如果您希望以下流量可以使用
如果不这样做将会破坏整个流程,并且不会自动发生任何事情:
如果设备上没有安装Twitter,它会自动回退以通过Web视图使用OAuth(对于第一个用户使用SFSafariViewController,为后续其他用户使用UIWebView。)
如果不拥有callback_url,将会有什么作用:
只有当用户安装了Twitter应用程序时,我们才能编写twit或登录 - 其余部分无效。
当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}
具有相同的键,否则您的应用会崩溃