EvernoteがOAuthに移行するので,いまさら・・・移行作業を行っていたら,久々に地雷を踏んだので報告.

Evernote SDKは,https://github.com/evernote/evernote-sdk-iosのgithubからダウンロードできる.
よくできていて,OAuthの面倒くさい,Web周りのお世話の面倒も見てくるできるSDKだ.
OAuthの認証の処理の流れは,以下.

  1. EvernoteSessionをクラスメソッドで初期化
  2. 認証を開始
  3. 認証が出来てない場合,cosumer keyとsecret keyを使ってプレ認証?し,OAuthの認証ページURLを取得
  4. WebViewを開く
  5. Evernoteへのログインページを開く
  6. ユーザがログイン
  7. ユーザがアクセスを承認
  8. WebViewがサーバとやりとりするURLの中からtokenを抜き取る
  9. ウマー

となる.
作ると面倒くさいが,中身だけ見ると処理は結構単純なのだが,ここにバグというか,謎仕様が.
私の環境だと,アクセスを承認した後に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さん早く直してください.