AccountManagerから取得したauthtokenを使用するとFusion Tablesへのアップロードに失敗する件

ユーザの認証情報をAccountManagerに変更した時から、時々「Fusion Tablesへのアップロードに失敗する」という報告を受けるようになりました。
手元にある端末で確認してみると、4台中1台だけがどうしてもうまくアップロードできません。エラーはcreate table時に401。
その後、原因がわからないまま1ヶ月程度過ぎた頃、またアップロードを試してみると、先日うまくアップロード出来ていた他の端末もことごとくエラーcreate table時に401が出ていることを確認。

なんだろうねぇ。何気にと思いググって情報がみたら見つかりました。
http://d.hatena.ne.jp/yellow_73/20110819
まさにこれ。この問題です。

端末に保存されているtokenの賞味期限が切れているっぽい。
401が発生したらAccountManager#invalidateAuthToken()を呼んでauthtokenを破棄した上でもう一回最初から認証のやり直しをすることでうまくアップロード出来るようになりました。

Google DocsやGoogle Calendarにも似たような仕組みで認証かけてデータアップロードしているのに、こちらではそんな状況に陥ったことがない。なんでだろう?Fusion Tablesはtokenの賞味期限が他サービスよりもかなり短くせっていされているのか?と思いました。実際のところわかりませんが。

AccountManagerのgetAuthToken()をReflectionでヤッてみた」で書いたとおり、私のアプリは1.6もサポートしているので、AccountManagerを普通に使うことができない。というわけで、これまたReflectionの登場。前回の記事読めばReflectionのパターンはわかりますよね。ということで省略。


コメント

このブログの人気の投稿

Joinノードを使う(その1)

Execノードを使う

Joinノードを使う(その4)