直したっていうか、直して、エミュレータでは、動いたけど、実機で動くかは、まだ確かめていない。
まず、PINコードがそのままでは取得できないぽい(?)
function get_request_verifier() を色々と直してやった。
まず function checkStatus() は削除。いらね。
if (loads==2) { ~ }を
if(loads==1){var t = setInterval(function(loads){if(loads==2){clearInterval(t);return;}},100);}こうした。
ログを見ていると、loads がインクリメントされるのが、2回なので、こうしないと動かないぽい。
これにともない、 checkStatus() はいらなくなった気がする。
あと、 loading というフラグもいらなくなった気がする。
で、
else if (loads==3) { ~ }がこうなった。
else if (loads==2) {
var pincode = webView.evalJS('window.document.body.innerHTML');
pincode = pincode.replace(/\s|\r\n|\r|\n|\t/gi,"").replace(/.*.<code>|<\/code>.*./gi,"").replace(/\s|\r\n|\r|\n|\t/gi,"");
cfg.request_verifier = pincode;
if (cfg.request_verifier!="") {
// my attempt at making sure the stupid webview dies
webView.stopLoading();
win.remove(webView);
get_access_token(callback);
setTimeout(function(){ //* TODO: check for ios vs android
win.close(); //* we close it after 3 seconds, which is more than enough time
}, 3000);
return true; // we are done here
}
}
PINを取得する部分は、どうしてもTwitterなどサービス側の仕様変更などに、
粒さに対応し、手を加えなくてはいけない気もする。
めんどくせーから正規表現でボリボリとむしってみた。
最後のreplace()は完全に蛇足だけど、心配性なの私。
赤字の部分は、
https://github.com/jpurcell/birdhouse/issues/16
ココを元に。
古い端末向けに、Windowが閉じるのを数秒待たないと、
W/MessageQueue( 337): Handler{4059ce70} sending message to a Handler on a dead threadこう言われて、AccessToken が取得できなくなってしまうぽい。
他は、requestToken 発行用のURLと authorizeURL 、 AccessToken 発行用の URL を init() のパラメタにして、
AccessToken 、AccessTokenSecret の保存先をあれやこれやしてみた。
まぁ、PINコード取得画面がサービス毎に違うだろうから、単純にはいかないだろうけど、
Tumblr と Flickr でも OAuth で認証させたいので、そこらへんもカリカリして、
ホゲホゲしたら、後は動かせるかなぁ~という感じ。
OAuth対応だけで一日かかったよ~。めんどくせ。
0 件のコメント:
コメントを投稿