iOS11からはSocial.frameworkによるツイートができなくなり、代わりにTwitterKitが推奨されています。
今回はTwitterKitを使って投稿する方法を試してみます。
iOS11でSocial.frameworkを使った時の挙動
下のようにテキストをツイートする実装をしました。
import UIKit import Social class ViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let c = SLComposeViewController(forServiceType: SLServiceTypeTwitter)! c.setInitialText("ついーと") present(c, animated: true, completion: nil) } }
上のコードを動かしたところ、無事に投稿する事ができました。
もしかすると、iOS10以前でTwitter連携したセッションが残っていたのかもしれません。
iOS11のシミュレータで上を試したら、画面に何も表示されませんでした。
TwitterKitで投稿する
準備
最初にTwitterのDeveloperページでアプリを登録します。
アプリを作ったら、ConsumerKeyとConsumerSecretを取得します。
それを使って以下のようにTwitterKitを初期化します。
Twitter.sharedInstance().start(withConsumerKey: "XXXXX", consumerSecret: "XXXXX")
次にCocoaPodsでTwitterKitをインストールします。
target 'MyApp' do use_frameworks! pod 'TwitterKit' end
続けてAppDelegateに下のようなメソッドを追加します。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { if Twitter.sharedInstance().application(app, open: url, options: options) { return true } return true }
最後にInfo.plistを修正します。
LSApplicationQueriesSchemesにTwitterのスキーマを登録してください。
Info.plistのURL typesにも値をセットします。
XXXXXのところは、自分のConsumerKeyを入れます。
ログイン周り
ログインしているかどうかはhasLoggedInUsers
メソッドで確認します。
if Twitter.sharedInstance().sessionStore.hasLoggedInUsers() {
}
ログインはlogInメソッドで行う事ができます。
Twitter.sharedInstance().logIn { success, error in
print(success)
print(error)
}
ユーザーがTwitterアプリをインストールしてない場合は下のようなエラーになります。
Desktop applications only support the oauth_callback value 'oob'
投稿する
投稿処理は以下の通りです。
Social.framework同様に画像やURLの添付もできます。
let composer = TWTRComposer() composer.setText("てきすと") composer.show(from: self) { result in if (result == .done) { print("OK") } else { print("NG") } }