Saturday, May 31, 2014

二段階認証時の処理対応

GoogleDrive対応がやっつけ仕事だったので、二段階認証や認証でなにか問題があってエラーがおきたときに無限ループのような状態になってました。

05-30 19:44:35.425      333-335/? D/dalvikvm﹕ GC_CONCURRENT freed 865K, 11% free 14926K/16647K, paused 1ms+5ms
05-30 19:44:35.441    4161-4172/? I/GLSUser﹕ GLS error: BadAuthentication
05-30 19:44:35.441    4161-4172/? V/GoogleLoginService﹕ Returning error intent with: ComponentInfo{com.google.android.gsf.login/com.google.android.gsf.login.LoginActivity}
05-30 19:44:35.464  17779-17905/? E/MusicStreaming﹕ Received null auth token.
    android.accounts.AuthenticatorException: Received null auth token.
            at com.google.android.music.sync.google.MusicAuthInfo.getAuthToken(MusicAuthInfo.java:42)
            at com.google.android.music.sync.api.SignupClient.checkInviteStatus(SignupClient.java:86)
            at com.google.android.music.tutorial.SignupStatus$SignupCheckService.onHandleIntent(SignupStatus.java:308)
            at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.os.HandlerThread.run(HandlerThread.java:60)
05-30 19:44:35.464  17779-17905/? I/CheckMusicStoreAvail﹕ No verified accounts found
05-30 19:44:35.496  17779-17905/? I/CheckMusicStoreAvail﹕ Starting account signup check
05-30 19:44:35.558      186-213/? I/ActivityManager﹕ Displayed com.google.android.gms/.auth.login.ShowErrorActivity: +226ms
05-30 19:44:35.574  16430-16430/? D/OpenGLRenderer﹕ Flushing caches (mode 0)
05-30 19:44:35.605  16430-16430/? D/OpenGLRenderer﹕ Flushing caches (mode 0)
05-30 19:44:35.628    4161-4172/? I/GLSUser﹕ GLS error: BadAuthentication
05-30 19:44:35.636    4161-4172/? V/GoogleLoginService﹕ Returning error intent with: ComponentInfo{com.google.android.gsf.login/com.google.android.gsf.login.LoginActivity}

原因は、エラーが起きた時に、理由の含まれたExceptionを渡して再度ログインを試みるのですが、この際別のアプリに連携します。
二段階認証だとこの処理でブラウザアプリに連携しそこで認証コードを入力して戻るという処理なのですが、このとき新たにActivityが生成されるので、また認証処理を実行してしまうというループになっているようでした。
もどってきてもきちんと処理をうけとれるようにAndroidManifest.xmlでandroid:launchMode="singleInstance"にすることでとりあえずの処置をしました。
この認証処理は、OnStartとかで実装するのではなく、ボタンなどのトリガーで呼び出すように実装するのが正しのかとおもいます。

ちなみに、上記ログに関連する情報は下記にもあります。
http://stackoverflow.com/questions/12929569/error-while-trying-trying-to-use-oauth2-accountmanagerfuture-to-authenticate-w

修正したアプリはこちらにアップしました。

https://bitbucket.org/yokmama/just-player/downloads/JUSTPLAYER3_v1.0_053001.apk

いちおうGoogleDriveアプリと連携できたので、今後はStreaming処理に手を入れていく予定です。
今後のマイルストーンは以下のように進めます。

・ストリーミング処理の再構成
・ファイルキャッシュの導入
・画面フロー時の処理を見直し
・GogleDriveファイル選択画面のUIをリファクタリング
・イコライザー設定のバックアップ機能追加
・ブックマーク機能の検討
・その他クラウドへの対応

ちなみに、要望にありましたがBox.netは難しくないのでやりましょう。
SkyDrive(OneDrive)のほうはAndoridからアクセスできるかどうかから調査しないといけないので、できるとはまだ明言できないんだけども。



No comments:

Post a Comment