アプリの人からSDK無いサービスの場合にOAuthどうしようという相談を受けて解決したのでメモ
問題はwebでのOAuthであればcallbackURLに普通にアクセスできるが、iOSアプリだとサーバーではないので戻りが取れないという事
解決手順(雑)
- 認証画面開くブラウザをsafariではなくweb viewに設定する
- oauthAPIに対してリクエストを送信する
- ユーザが特定(Twitter,GitHub)のoauthページでパスワード入力などで認証を行う
- 本来はここでサービスに登録したcallbackUrlにリダイレクトするがweb view側でリダイレクトを検知した場合、その処理をキャンセルしリダイレクトしようとしたURLを取得する
- 大抵はcallbackURLの中にcodeやtokenというパラメータが付与されているのでそのコードを使ってaccess_tokenを取得するAPIにリクエストする
もっと良い解決方法があるのかもしれない
web viewじゃなくてアプリ内safariの方法とかあったりするのかどうなのか
SDKが提供されているサービスは素直にそっち使ったほうが良い