anz blog

TwitterKitを使って連携すると期待している通りに動かない

2018-04-30 #Swift #TwitterKit

TwitterKitをつかってTwitter連携処理をかくとそれ自体は簡単にできるのだけれど、
ただ、アプリを再起動したときに再度連携が必要になってしまって...
どうやって保存するの??とかって思ってありゃこりゃしてしまったので、そこら辺の話。

TwitterKitつかって連携するとアプリ再起動時にまた連携が必要なんだが!?

です

環境

  • TwitterKit v3.3.0

TwitterKitとは

Twitterのありゃこりゃをよしなにしてくれる良い奴(笑)
提供している機能以外にも、REST APIを自分でも一応たたけます

問題

TwitterKitをとおして連携処理を実行すると、
自動でTwitter公式アプリが立ち上がって、連携画面に遷移して連携ができると...。
ユーザが連携を許可するとアプリにもどってきて、以降は許可された権限に従っていろいろできるようになりますと...。

ココらへんの連携まわりが、お手軽に実装できていいのだけれど...
いったんアプリを終了して、も1回起動すると未連携状態に戻ってしまって...
起動するたびに連携しないといけないんだが!?!?っていう問題が発生

コード

実装している連携まわりをざっくりかくと

TWTRTwitter.sharedInstance().start(withConsumerKey: "Twitter Consumer Key", consumerSecret: "Twitter Consumer Secret")

if let session = TWTRTwitter.sharedInstance().sessionStore.session() {
    // 連携済み
} else {
    TWTRTwitter.sharedInstance().logIn { (session, error) in
        if let error = error {
            print(error)
        }
    }
}

もちろんAppDelegate.swiftの方には

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

を忘れずに...。
多分これだけで問題ないはず!(ですよね?
実際できるしこれで...
(アプリ再起動したら連携状態が維持できないだけで。。

解決?

他のアプリも同じようにできているので...なんで?とかおもって、
ちょっとCocoapodsでTwitterKitいれみたのです。
(このプロジェクトはCarthageで入れてた)

コードを一ミリも変更していないのに、期待している通り動いた。
ちゃんとアプリ再起動しても連携状態を保持していた...。

コードを変更せずにまたCarthageで入れた方にもどして、連携周りやりなおすとやっぱり保持されない

なにこれ????😇
ついったーさん??なにこれ???????

ってことで、なんかよくわからんけど、Carthageでいれるのやめたほうがいいかも....

さんぷる

サンプルプロジェクトあげてみたので、暇な人で気になる人はお試しあれ

  • git cloneしてプロジェクト起動後BuildSettingにConsumerKeyとConsumerSecret設定
  • masterブランチ:CarthageでTwitterKitいれたもの
  • podsブランチ:CocoapodsでTwitterKitいれたもの
    • どっちもまるっと上げてるので、carthage updateとかpod installとかしなくてもイケるはず

なにかコードレベルで不手際があれば是非おしえてほしいです..🙏

つかれた....