初めに
今回はSwiftでtwitterapi叩こうと思います。
TwitterKitというのが主流だったらしいのですがサポート終了したということでSwifter使っていきます。
流れ
- cocoapodsでswifter入れる
- oauth認証のためのメソッドを呼ぶ
- safariで認証後アプリに戻ってくる。
やってみる
まずpodfileに以下を書き込んでpod installしっます
pod 'Swifter', :git => 'https://github.com/mattdonnelly/Swifter.git'
次にviewControllerに以下を書きます。
buttonを押した時でもViewdidloadの時でもお好きなタイミングで呼び出してください。
SFSafariViewControllerDelegateを準拠させておくとアプリ内でsafariを開けます。
ViewController
//twitterdeveloperで取得したapikeyとapisecretkeyを入れます。
let swifter = Swifter(consumerKey: "APIkey", consumerSecret: "ApiSecretKey")
//safariを開く。callbackURLがTwitterDeveloperのcallBackURLと違っていたりkeyが間違えたりしてるとerrorに飛ぶ。
swifter.authorize(withCallback: URL(string: "各々設定したcallbackURL")!, presentingFrom: self, success: {accessToken, response in
print(accessToken.key)
},failure: { error in
print(error)
})
Custom URL Scheme
次にCustomURLSchemeを設定します。
こいつを設定してあげるとそのリンクを開いたときにアプリに戻るかどうかというポップアップが出るようになります。
つまり
- safariを開く
- ユーザーがパスワードなどを使ってaouth認証する。
- 設定したcallBacURLに飛ぶ
- callBackURLをCustomURLSchemeに設定してあるのでアプリに戻ってくることができる。
という流れができます。
ということで、TARGETS->自分のアプリ->info->URLTypes->URLSchemesに設定したsampleと指定してあげましょう。
例えばcallBackURLをsample://と設定しているのなら、sampleの部分だけ書いてあげます。
これでcallBackURL://と叩かれたときにアプリに戻ってこれます。
info.plistのURLSchemesに設定してあげてもいいです。
最後にappdelegateに戻ってきた時の処理を書きます。
AppDelegate.swift
AppDelegate
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return Swifter.handleOpenURL(url, callbackURL: URL(string: "設定したcallBackURL")!)
}
これで一通り実装は終わりです。
躓きポイント
- AppDeveloper側でcallBackURLを設定しているかどうか。
- callbackURLがsample://だとしたらURLschemeはsampleだけになっているか
- apikeyが間違っていないか
以上です。
参考にしたサイト
https://qiita.com/noby111/items/532f3d806b19ab46433a
https://github.com/mattdonnelly/Swifter
https://qiita.com/k-boy/items/c83a0505d12cc8e7d4b9