Re^2: Twitter oAuth Implementation for Titanium Mobile

バグがあったので修正しました。
mogya/oauth-adapter – GitHub
.bbpBox{background:url(http://a1.twimg.com/a/1295051201/images/themes/theme13/bg.gif) #B2DFDA;padding:20px;}

@mogya While executing Timer, received script error. ‘Result of expression ‘URL’ [undefined] is not an object. at oauth.js (line 453)’でした!Sat Jan 15 12:55:06 via web


一番最初、アプリケーションを起動してoAuth認証を通した直後にAPIを呼び出すと(=僕のブログコード通りに書くとw)、上記エラーになる不具合を修正しました。

ただ、またもや互換性が保てなくて、oAuthAdapter.send()の戻り値を使うのが無理になりました。申し訳ない。
sendから戻ってきたからといってAPI呼び出しが完了して戻り値が入っていることは保証できないので、その代わりにonSuccessコールバックを利用してください。

初期化部分も含めたコード全体は、readmeで見ることができます。

How to start

  • 新しくプロジェクトを作る
  • Resources/libディレクトリを作って、oAuthAdapter.jsと、oauth.js,sha1.jsを入れる
  • readmeのコードをapp.jsにべったり上書きする
  • ‘YOUR CONSUMER SECRET’,’YOUR CONSUMER KEY’,部分を自分のキーに置き換える。SECRETが先であることに注意
  • Launchすると、oAuth認証が立ち上がり、その後勝手につぶやき、タイムラインをデバッグコンソールに出力します。

解説

 Davidの書いたoAuthAdapterには、sendを呼び出した時点でoAuth認証が完了していなかったら、呼出をいったん保留して、認証後に再呼び出ししてくれるという機能が付いています。
 上記エラーは、この再呼出部分のコードを修正するのを忘れていたことが原因だったので、これは修正しました。

 ところが、そういう非同期の呼び出しが起こる以上、関数の戻り値にAPIの戻り値が入っていることは保証できなくなりました。(というか、最初から保証できなかったのですけど、僕が気づいていませんでした。)

 あと、全然別件なのですけど、Davidの書いたoAuthAdapterでは、sendの引数にtitleとpSuccessMessageを渡して、API呼び出しが成功すると、かならずポップアップが出る仕様になっています。update_statusならともかく、タイムラインを更新したり、バックグラウンドでユーザー情報を取得したりする場合、この仕様はちょっとありえません。

 二つの問題をバッサリ片付けるアイデアとして、titleとpSuccessMessageの使用を廃止して、代わりにonSuccessコールバックを採用することにしました。onSuccessコールバック関数の中でダイアログを出せば、従来と同じ挙動をすることができます。