質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

401閲覧

TwitterKitでツイートできない

Galakuta09

総合スコア18

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

0クリップ

投稿2017/09/22 14:21

編集2017/09/24 03:18

iOS11からTwitterKitを使わないとツイートできなくなったので、インストールしました。
ツイートのためのウィンドウは表示されるのですが、ツイートボタンを押しても「ツイートを送信できません。」というダイアログが出て、一向にツイートできません。
イニシャルテキスト、URL、画像を追加しても追加しなくても状況は同じです。

ネットで検索すると同様の問題を抱えてる海外の人の質問が若干ありましたが、解決してる様子がありません。
特定の文字を使うとツイートがうまくいかないという情報がありましたが、テキストなしの画像だけでもうまくいきません。

《追記》試したところ、iPhone/iPadシミュレータではiOS11とiOS10.3の両方からツイートできました。要するに実機でのみ起きる現象のようです。

どこがいけないのか、そして解決にはどうしたらいいでしょうか?
または同じ現象が起こっている方がいたらコメントいただけると嬉しいです。

インストールしたファイル
TwitterKit3

  • TwitterCore.framework(ver3.0.1)
  • TwitterKit.framework(ver3.1.1)
  • TwitterKitResources.bundle

Info.plistに指示どおりコンシューマキーを含む項目を追加しました。

AppDelegateに以下を追加しました。

Swift

1func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 2 //TwitterKit初期設定 3 Twitter.sharedInstance().start(withConsumerKey: "コンシューマキー", 4 consumerSecret: "コンシューマシークレット") 5 6 return true 7 }

Swift

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

ツイート用のボタンには以下のように書いています。

Swift

1@IBAction func actionBtn(_ sender: AnyObject) { 2 //Twitterログイン認証トークンの有無を確認 3 if Twitter.sharedInstance().sessionStore.hasLoggedInUsers() { 4 //ツイート 5 let composer = TWTRComposer() 6 //ツイートのウィンドウ表示 7 composer.show(from: self) { (result) in 8 if result == TWTRComposerResult.done { 9 print("ツイートされた") 10 } else { 11 print("ツイートできなかった") 12 } 13 } 14 } else { 15 //Twitterログイン処理 16 Twitter.sharedInstance().logIn(completion: { (session, error) in 17 if session != nil { 18 print("signed in as (String(describing: session?.userName))") 19 } else { 20 print("error: (String(describing: error?.localizedDescription))") 21 } 22 }) 23 } 24 }

エラーメッセージとして以下のものが出ます。
CredStore - performQuery - Error copying matching creds. Error=-25300, query={
class = inet;
"m_Limit" = "m_LimitAll";
ptcl = htps;
"r_Attributes" = 1;
sdmn = "https://api.twitter.com";
srvr = "api.twitter.com";
sync = syna;
}
[288:16606] Did encounter error sending Tweet: Error Domain=TWTRNetworkingErrorDomain Code=-1011 "Request failed: unauthorized (401)" UserInfo={NSLocalizedFailureReason=, TWTRNetworkingStatusCode=401, NSErrorFailingURLKey=https://api.twitter.com/1.1/statuses/update.json, NSLocalizedDescription=Request failed: unauthorized (401)}
[288:16606] [TwitterKit] Composer did fail: Error Domain=TWTRNetworkingErrorDomain Code=-1011 "Request failed: unauthorized (401)" UserInfo={NSLocalizedFailureReason=, TWTRNetworkingStatusCode=401, NSErrorFailingURLKey=https://api.twitter.com/1.1/statuses/update.json, NSLocalizedDescription=Request failed: unauthorized (401)}

seeker2017👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

同じ状況です。
Composer使わない方法でもやはり同じ結果でした。
なんなのでしょうねぇ.....できてる人もいるってのがなんとも。

投稿2017/09/25 09:13

seeker2017

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sachiko-kame

2017/09/25 12:48

ちなみにTwitterのCallback URLとかかくところの1番下にsettingとかあるのですが、そこは一回でもおされましたか?あと、もう一回登録したキーがあってるかappdelegateとplist確認してみるといいかもですかね?ちなみに私はそこアルファベット抜けてたりしたりもしたので汗
seeker2017

2017/09/25 14:04

Callback URLはios対象だと少なくとも.com程度は書かないともっと前の段階でエラーが出力されますね。 で、その下のSettingって部分がどこを指されてるのか理解できてないかもですが、 Settingsタブ画面では新規作成時以降何も触っていない状況で主に試しています。 key関連はコピペで何度もやり直したので可能性は低いと思っているんですが、そう言われると...ww 何か進展ございました?
sachiko-kame

2017/09/25 14:23

私は表示できたので、そこらへんかと思ってました。強いて言うなら、Callback URLは書かなくてもツイートできますが、自分のiphoneにアプリがないとできません。かくとなくてもなんらかの表示をしてくれるのですが、とりあえず、どこかにリダイレクトされてもと思ったのであえて無くしてしまいました。(>ω<) ちなみにsetting部分は写真で貼らさせていただきます!。上編集ありです。
sachiko-kame

2017/09/25 14:32

そんな、もししたらと少しコード違ったので上にコードと自分が思ったこと書いてみます!!
seeker2017

2017/09/25 14:39

大変貴重な情報ありがとうございます。 Twitterアプリの有無は散々インスト・アンインスト繰り返してテストはしているのですが、 callback絡めてのテストは行なっていませんね。 Organization name及びOrganization websiteはどちらも未設定=空ですね。 関係してなさそうと判断して絡めてのテストはしていませんが、関係ありそうですか?
sachiko-kame

2017/09/25 14:44 編集

いやOrganization name及びOrganization websiteは私も書いてないです。ちなみに実機で行っているかと思いますが、実機にツイッターのアプリは入っていますか?(>ω<)一回自分が書いたコードだけで試していただけましたか?
seeker2017

2017/09/25 14:49

はい。実機ですね。 複数の端末&9.x~11.xでTwitterアプリは入れてたのを削除して確認、再度インストールしてテストしてますが、 状況変わらずですね.... ただ、この方法で出来たとしてもエンドユーザーにこれを強いるのは難しいかなと思ったりしています....
sachiko-kame

2017/09/25 14:51

そうなんですね(/ω\)とりあえず行うところまでできたらその先が見えるかもと思ったのですが、力不足でごめんさい(/ω\)
seeker2017

2017/09/25 14:58

ちなみにlogin処理はhasLoggedInUsersがfalseの場合だけ行っています。 send後にログアウト処理は現時点では行っていませんが、hasLoggedInUsersでtrueの場合に一度logoutを強制的に行って再度ログインを行うテストはやってみました。 この辺りの処理で挙動変わりました? であればもう少し色々な組み合わせ試してみます。
seeker2017

2017/09/25 14:59

ああああああ! いえいえ、とんでもないです。 大変貴重な情報です。助かりました!! 頂いた情報を元にもう一度見直してみたいと思います!!
sachiko-kame

2017/09/25 15:01 編集

変わりました。そこまで行っていないですが最初の判断あるのとないのでは私は自分の意図する挙動になりませんでした(/ω\) もう一度行ってみると言ってもらえて嬉しいです。なんとかできるようになれば嬉しいですが…。
seeker2017

2017/09/25 15:03

ありがとうございます! 試してみますね。 お付き合いありがとうございました。 またお呼び立てするかもですが何卒宜しくおねがいいたします。
sachiko-kame

2017/09/25 15:03

できますように(>ω<)できますように(>ω<)
sachiko-kame

2017/09/25 15:04

こちらこそよろしくお願いします。できると嬉しいです。(>ω<)こちらこそありがとうございました(>ω<)⭐️
seeker2017

2017/09/25 15:17

ありがとうございます! 頑張ります!w
sachiko-kame

2017/09/25 15:18

よろしくお願いします!!ヽ(´▽`)/????
Galakuta09

2017/09/25 16:24

seeker2017さんもコメントありがとうございます。 別に書いたとおり、mizunoさんの意見を参考に試したらツイートできるようになりました。 実機のTwitter公式アプリは入れてあります。 Callback URLはなんでもいいとのことだったので「https://example.com」とだけ入れてあります。 公式アプリを含め、普通にツイートできてるアプリも当然あるわけなので、何かうまくやる裏技みたいなものがあるんでしょうね? その辺りの情報がほとんどないのが不思議ですが。 一度だけログアウトをする手間をユーザーにかけさせるのはスマートじゃないですが、とりあえずまったくツイートできないという状態からは脱出できそうです。
sachiko-kame

2017/09/25 17:47

seeker2017様へ ずっと質問者様と思い勘違いコメント連発していました。本当にごめんんさい(>ω<) 今、気づきました。数々のご無礼お許し下さい(>ω<)
seeker2017

2017/09/25 22:31

おおおお!! 寝てる間に大きな進展!!果報は寝て待てと。www 早速後ほど試してみます。 お二方大変貴重な情報ありがとうございました。 mizuno様 いえいえ、とんでもないです。 本当に助かりました。感謝です!!
sachiko-kame

2017/09/25 23:57

seeker2017様 そういってもらえると嬉しいです(//∇//)⭐️ Galakuta09様 さっきコメントそっけなくなってしまいましたがちゃんとかきなおしましたo(▽`)o=з=з
Galakuta09

2017/09/27 07:13

seeker2017さんは試してみられたでしょうか? 別記のとおり、単純にログアウトすればツイートできるというものでもないようです。 試行錯誤しています。
seeker2017

2017/09/27 07:14

ちょーどかぶりましたね。w
seeker2017

2017/09/27 07:21

上記ですが、カスタマーキーとシークレットを更新して自分のアプリ修正後上書きで実行させるとTwitterKitが既に保存しているidとかの兼ね合いで認証画面でエラーが出る場合があります。 その場合は自分のアプリを一旦削除してクリーンインストール状態で実行させると問題なかったです。
Galakuta09

2017/09/27 07:52

キーの更新というのは、Keys and Access Tokensにある「Regenerate Consumer Key and Secret」ですね? 新しいキーをAppDelegateとInfo.plistに書き込んで試したら、エラーも出ずに一発でうまくいきました! つまりは、PermissionがRead and Writeに設定されているはずなのに、実際はRead onlyになっているので、Keyの作り直しをきっかけに正しいPermissionに変更されるということのようですね。 取り急ぎご報告まで。 Permissionの問題なら、直接Permissionを変更して戻してもいけるかもしれないので、試してみますね。 ありがとうございました。
seeker2017

2017/09/27 07:58

ですね。おっしゃる通りの状態なのではないかと。 パーミッション変更で正しく処理されるかは私は試していませんが、 もしそれでOKって事であればUIへの反映ミスが濃厚ですね。 何れにしてもTwitter側がやらかしてると。w こちらこそ色々とありがとうございました!
Galakuta09

2017/09/27 08:06

Permissionの設定変更だけでいけるかどうか試したら、いけました! 一度Read onlyにしてUpdate Settings。そしてRead and Writeに戻して再度Update Settings。 むろんキーは変更されないのでそのままです。 うまくいかない時のログイン画面を見てみたら、たしかに「メールの表示、ツイート、パスワードの表示………はできません。」になってますね。盲点でした。 これは完全にTwitter社のポカですね???? 原因がはっきりしたので、おそらく他のアプリもこれでいけると思います。助かりました。本当にどうもありがとうございます。
seeker2017

2017/09/27 08:10

いけましたか! では私も次回からはパーミッションの変更し直しだけは忘れないようにしておきます。 お疲れ様でした.....今日はうまい酒が飲めそうです。w ありがとうございました。
Galakuta09

2017/09/27 08:15

一度ほかのPermissionに変更しなくても、Update Settingsを押すだけでも正しいものに変更されました(笑) Twitter社は英語圏の文字数を280文字にするより、こっちの方を直して欲しいですね! ビール買ってきますww
seeker2017

2017/09/27 08:20

うわ。そんな..... たったそれだけに振り回された日数考えるとなんか腹たってきますね。w もう飲んでます!w
Galakuta09

2017/09/27 08:23

自分の方で起こった、ログアウトしたらうまくいったとか、二重ログインされたとかは原因がわかりませんが、そんなことでPermissionが変わっちゃったのならそれも問題ですね…(苦笑) なんだかなあ…。
seeker2017

2017/09/27 08:29

パーミッションの初期表示不具合が原因で、 普通はデベロッパ自身の過失と判断されるプロセスが複雑に行われた所為で複合的に色んな問題が発生したケースなのかもですね。 Twitter社からすると「そんな事すんなよ、ダメって書いてるじゃん」なんだろうけど こっちからすると「んじゃ肝心なところ間違えんなよ」です。w
sachiko-kame

2017/09/27 10:05

なんかにぎやかになってますね(//∇//)なんか色々あるみたいですね( ・∇・)水野は色々話せたり、色々教えてもらったりでたのしかったので今回はとてもやりとりが楽しかったです(//∇//) teratilでコメントのこの量のやりとりは自分的に初めてだったのでなんか幸せな気分です。 今頃お二方でビール????のんでるですかね笑 本当に色々ありがとうございました⭐️
seeker2017

2017/09/27 10:37

水野さん こちらこそ大変おせわになりました。 ぶっちゃけ先が見えない状況でしたので今回のタスクから落として実装延期する方針で考えていたんです。 ですがお二人とのやりとりでもう少し今やってみようと思ってようやく辿り着いた結果に奇妙な満足感が...ww 御察しの通り飲んでますよ。ww 今後とも宜しくお願いいたします。
sachiko-kame

2017/09/27 11:33

seeker2017さん 奇妙な満足感わら(//∇//) とてもいい響きだとおもいます⭐️ おー飲んでるんですね!今回のビールは美味しそうですね⭐️ こちらこそ今後ともよろしくお願いします。(//∇//) また、こうやって沢山やりとりできたら嬉しいですね????
guest

0

シェアがとりあえずできるようになったのでここに書かさせていただきます。
参考URL
参考URL

最初twitterkitを使うために登録した画面でCallback URLをかく。
info.plist文に

<key>LSApplicationQueriesSchemes</key> <array> <string>twitter</string> <string>twitterauth</string> </array>

を追加してクリーン、ビルドで投稿できました。(>ω<)

ちなみに投稿して思ったのですが、前回同じ投稿をするとツイートできないと言うこともありました。その場合前に行った同じ投稿を消すとまたツイートできるようになりました。

さらに違うアプリで実装してみたところCallback URLなしでもいけました。
あやふやでごめんさい。少しでも参考になれば嬉しいです。

settingのところ。
イメージ説明

Twitter.sharedInstance().logIn { session, error in if (session != nil) { var composer = TWTRComposer() composer.setText("") composer.show(from: self, completion: { result in if (result == .done) { //ここ通れば投稿が成功しているはず。 } else { } }) } }

ログインさせて、ツイートためす。

ここで初めてログインさせる感じかと。
シェアのみで行っているのでしたらおそらくログインは私は行われていなかったのでログインの有無は書いてないです。その代わりここでは書いてませんが、投稿後すぐにログアウトは行っています。(>ω<)

一回書き直してやってみてくれたら嬉しいです。

投稿2017/09/24 05:42

編集2017/09/25 14:40
sachiko-kame

総合スコア334

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Galakuta09

2017/09/25 16:15

mizunoさん、コメントありがとうございます。 結論から言うと、ツイートできるようになりました! 今までは未ログインだった場合のみログインさせ、次回からはログイン情報を使って直接composerでウィンドウを表示させてツイートを試し、うまくいきませんでした。 今回、まずはmizunoさんのコードを使い、ログイン情報があっても再度ログイン処理をしてツイートを試しましたが、うまくいきませんでした。 その際、ログイン情報がたまってしまうのか、ツイートのウィンドウ下にアカウント選択のボタンのようなものが表示されるので、ツイートができてもできなくてもcomposer.showのクロージャ内で「ログアウトするようにして試した」ところ、なんとツイートができました。 //Twitterログイン処理 Twitter.sharedInstance().logIn(completion: { (session, error) in if session != nil { print("ログインした。 (String(describing: session?.userName))") //ツイート let composer = TWTRComposer() composer.show(from: self) { (result) in if result == TWTRComposerResult.done { print("ツイートされた") //logout処理 let store = Twitter.sharedInstance().sessionStore if let userID = store.session()?.userID { store.logOutUserID(userID) } } else { print("ツイートできなかった") //logout処理 let store = Twitter.sharedInstance().sessionStore if let userID = store.session()?.userID { store.logOutUserID(userID) } } } } else { print("ログインエラー: (String(describing: error?.localizedDescription))") } }) その後は一番最初のコードに戻し、一回ごとにログインしないようにしましたが、そのままツイートができます。 そういえば、海外の質問フォーラム(Twitter公式だったかも?)で「一度ログアウトしたらうまくいくようになったよ」みたいな書き込みがあったのを覚えてます。(URL失念) 質問者による「うまくいきました」報告もなかったので、まさかと思って試さなかったんですが、本当にうまくいってしまったようです。 ただし、本来はツイート処理(できてもできなくても)の後にログアウトするコードなのに、ツイート処理時に影響したみたいな感じなんで不思議です。 ツイートするたびに毎回ログイン処理させるわけにはいかないので、最初の一度だけはログイン->ログアウト->ログインという処理をさせて、次回からは直接composerでツイートさせるようにしないといけないですね? そのあたりの処理は面倒ですし、TwitterKitのバグもしくはiOSとの相性が悪い点なので、早く直してもらいたいものです。 info.plistの記述は間違ってなかったのでいじってません。 まだ全面解決というわけではありませんが、とっても参考になりました。どうもありがとうございます。
sachiko-kame

2017/09/26 00:01 編集

よかったですヽ(´▽`)/✨逆に教えてもらう感じになりました。ありがとうございます⭐️さっきちょっと、質問者様と回答者様を勘違いしてちょっとまっしろでコメントそっけなくなってしまったと思い編集しましたo(▽`)o=з=з ちなみに、これで解決ならばと嫌でなければ、一回自分で回答欄に回答を書いてベストアンサーにされることをお勧めします。きっと悩んでる方が出てきた時、アンサーがあると嬉しい気持ちになるとおもうのでo(▽`)o=з=з って、まだ全面解決でなかったですね汗 ごめんなさい????
Galakuta09

2017/09/26 00:34

今度はツイートできない状態が再現できないと二度ログインで本当に回避できるのかがテストできないこともあるので、解決方法についてはもうちょっと吟味してみたいと思います(^^; あと、直前と全く同じ内容でツイートしようとするとツイートできないのは、連投スパム回避のためのツイッターの仕様ですね。
sachiko-kame

2017/09/26 03:59 編集

再現するのができないって難しいですよね(*´-`) 今回お二方が、コールバックURL入れている感じで自分もどこかへのリダイレクトとかあまりビビらないで入れればよかったのかと。(*´-`) あ、ただの独り言です。???? あと、スパムの件いわれてなっとくしました。教えて頂きありがとうございます(//∇//) 今回、色々勉強させていただきありがとうございました⭐️
Galakuta09

2017/09/27 07:06

一度ツイートできるようになると今度は不具合の再現ができないので、ダミーのアプリを作ってconsumerKeyを取り直して検証していますが、一度はツイートできるようになりました。 しかし一度ログアウトすれば次回から通るようになるという単純でもなく、いろいろ試しているうちにできるようになったので、さらにもう一度consumerKeyを取り直してやったところ、今度は通りません。 うまく行った際の思い当たる節としては、前述のとおりログイン情報がたまるというか、何かのはずみで同じツイッターアカウントで二重ログイン状態になり、それを一度ログアウトし、再度ログインしたらうまくいくようになったっぽいです。 これもログアウトせずにログインすれば再現できるというものでもなく、どういうきっかけでできるのかがわかりません。 確実にツイートできる状態にできるよう、試行錯誤中です。
sachiko-kame

2017/09/27 10:12

なんだかんだコメントみてると答え到着ぽかったのでよかったです( ͒ ु•·̫• ू ͒) seeker2017さんのコメントにもかいていますが、本当に素敵な時間をありがとうございました(//∇//) 私は、色々やってもすぐつまづくので、またつまづいた時はここのコメントとかみさせて頂きます\(*>▽<)人(・○<*)ノ 本当に本当にありがとうございました⭐️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問