Evernote SDK for iOSの罠
EvernoteがOAuthに移行するので,いまさら・・・移行作業を行っていたら,久々に地雷を踏んだので報告.
Evernote SDKは,https://github.com/evernote/evernote-sdk-iosのgithubからダウンロードできる.
よくできていて,OAuthの面倒くさい,Web周りのお世話の面倒も見てくるできるSDKだ.
OAuthの認証の処理の流れは,以下.
- EvernoteSessionをクラスメソッドで初期化
- 認証を開始
- 認証が出来てない場合,cosumer keyとsecret keyを使ってプレ認証?し,OAuthの認証ページURLを取得
- WebViewを開く
- Evernoteへのログインページを開く
- ユーザがログイン
- ユーザがアクセスを承認
- WebViewがサーバとやりとりするURLの中からtokenを抜き取る
- ウマー
となる.
作ると面倒くさいが,中身だけ見ると処理は結構単純なのだが,ここにバグというか,謎仕様が.
私の環境だと,アクセスを承認した後にtokenを取得できないのである.
困った.githubのissuesにも登録されていない・・・・!
というわけで,デバッグ大会に突入したのである.@setoh2000さん,ご協力ありがとうございました.
「結論」は,アカウント名にアンダースコアが入っていると,サーバの挙動が変わるため,現状のSDKではうまくいかないので,Evernote SDK for iOSに修正が必要.
これは,すでにissueに登録してあります.
Evernote SDKのやってることは,OAuthの認証の後に,特定のスキーマを持つURLへのアクセスを監視し,それを抜き取って,OAuthのtokenとしている.
その特定のスキーマとは,
en-CONSUMERKEY://responsehogehoge...
である.
しかし,これが飛んでこない.かわりに飛んでくるのは,
https://sandbox.evernote.com/Home.action?en-CONSUMERKEY://responsehogehoge...
こんなURLである.
それで,この特定のスキーマを持つURLへのアクセスを監視しているENOAuthViewControllerを改造し,https://sandbox.evernote.com/Home.action?en-CONSUMERKEY://を見つけ出すようにするとうまく動くようになった.
この問題はどうやら,既知らしいのだが,Evernoteが対応していないっぽい.→参考リンク
Evernoteさん早く直してください.