今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

GoogleAuthUtil.getToken()でGoogleAuthException: Unknown でドはまり中

Qiitaにあるコードとほぼ同じコードで動かそうとしてるわけで。

AndroidでのGoogle Account OAuth認証方法 - Qiita

    private static final String scope = "oauth2:" + Scopes.PLUS_LOGIN
                                                       + " " + YouTubeScopes.YOUTUBE;

    private void auth() {
        AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {
            @Override
            protected Boolean doInBackground(Void... params) {
                try {
                    authToken = GoogleAuthUtil.getToken(MainActivity.this, accountName, scope);
                } catch (UserRecoverableAuthException e) {
                    startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
                    e.printStackTrace();
                    return false;
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (GoogleAuthException e) {
                    e.printStackTrace();
                }
                return true;
            }
        };
        task.execute(new Void[0]);
    }


しかし、何度動かしても例外が発生。

10-20 00:24:15.648: W/System.err(6452): com.google.android.gms.auth.GoogleAuthException: Unknown
10-20 00:24:15.648: W/System.err(6452): 	at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
10-20 00:24:15.648: W/System.err(6452): 	at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)

Unknownになる理由を調べれば簡単に解決するだろうと思って、Google Play Services のソースコードを確認しようと思ったら、ソースコードは非公開だった。

というわけで、試行錯誤で思いつくだけのいろんな方法を試してるんだけど、まったく進展がない。スコープを変更してみたり、端末からアカウントを削除して登録しなおしてみたり、いろいろと試してるけどうまくいかん。

ぐぐっても、これだっていう解決方法に行き当たらず。

どうすればちゃんとトークンを取得できるんやろ。

疲れた。。。


10.20 追記

やってみたこと。

  • スコープをそのまま使う Scopes.PROFILE など。
  • スコープの前に oauth2: をつける。
  • コープに変な文字列を指定する。(INVALID_SCOPEになる)
  • スコープの前に oauth2:server:client_id:{web_client_id}:api_scope: をつける。
  • credential.setSelectedAccountName(null)してユーザーを再選択する。
  • 端末からユーザーを削除して登録し直す。
  • 端末を再起動する。

10.23 追記

まだ解決できん。
Android Developers Blog: September 2012によると、

It throws a GoogleAuthException, which means that authorization just isn’t going to happen, and you need to let your user down politely. This can happen if an invalid scope was requested, or the account for the email address doesn’t actually exist on the device.

INVALID_SCOPEとBadUsernameの説明はあるけど、Unknownの説明がない。

なんかしょーもないミスだと思うんだけど。。。