

Xcode 7.1、Swift 7.1、Fabric Twitter 1.13.1です。

FabricのTwitterKitを使い、TwitterのREST APIで「POST
statuses/update」をコールしていますが、成功しません。コードは以下です。

[code]

        let client = TWTRAPIClient()
        var clientError : NSError?
        let endPoint = "https://api.twitter.com/1.1/statuses/update.json"
    
        let params = ["status" : "testTweet"]
    
        let request = client.URLRequestWithMethod("POST", URL: endPoint, parameters: params, error: &clientError)
    
        client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in
            if (connectionError == nil) {
                print("sucess");
            }
            else {
                print("Error: \(connectionError)")
            }
        }
    
[/code]

下記のようなエラーが出てしまいます。

[code]

    Optional(Error Domain=TwitterAPIErrorDomain Code=220 
    "Request failed: forbidden (403)" 
    
    UserInfo={NSLocalizedFailureReason=Twitter API error :
     Your credentials do not allow access to this resource. (code 220), 
     NSErrorFailingURLKey=https://api.twitter.com/1.1/statuses/update.json,
     NSLocalizedDescription=Request failed: forbidden (403)})
    
[/code]

Twitterアプリケーションの権限を疑い、調べてみましたが、「Read & Write」となっており正しいように見えます。  
なお、GET statuses/show/:id のコールには成功しています。

もしどなたか原因に心当たりがあれば、教えていただいてもよろしいでしょうか？


CC BY-SA 3.0
2015-11-15T13:44:47.677
18851
2016-08-01T06:00:52.377
13266
question
swift twitter twitter-fabric
Swift TwitterKitでREST APIを使った投稿が失敗する


エラーメッセージから認証周りの問題であると考えられます。

ツイッターへのアクセスには以下の4つが必要です(質問内容から察するにおそらく既に作ってあると思います)。

  1. Consumer Key
  2. Consumer Key Secret
  3. Access Token
  4. Access Token Secret

これらの認証情報を TwitterKit に設定するためにまずは

<https://docs.fabric.io/ios/twitter/twitterkit-setup.html>

に書いてある

[code]

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

という部分で 1 と 2 を登録します。

この部分を AppDelegate 等に書いていますでしょうか？ 書いていなかったら書いてください。

さらに

<https://docs.fabric.io/ios/twitter/authentication.html#using-existing-tokens>

に書いてある `logInWithExistingAuthToken:authTokenSecret:completion:` というメソッドを使って 3
と 4 を登録します。

このメソッドの completion ブロック内でツイートするコードを書いてあげるとツイートできると思います。


CC BY-SA 3.0
2016-03-17T00:10:20.610
23213
2016-03-17T00:10:20.610
14823
18851
answer