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

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

GoogleAuthUtil.getToken()でGoogleAuthException: Unknown が発生する問題を解決できた

この前、GoogleAuthUtil.getToken()でドはまりしたって記事を書いた。

GoogleAuthUtil.getToken()でGoogleAuthException: Unknown でドはまり中 - 今日の役に立たない一言 − Today’s Trifle! −

    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)


しばらく放置してて、ひさしぶりにコードを眺めてみたら、まずいところを発見。
あっさり解決した。

GoogleAccountCredential を取得するコードに間違いがあった。

    credential = GoogleAccountCredential.usingAudience(this, scope);

これを以下のように修正したらあっさり動作した。

    credential = GoogleAccountCredential.usingOAuth2(this, scopes);

動かなくて試行錯誤しているうちに、Audienceを使う方法も試したんだけど、やっぱりうまくいかなくて、あとでOAuth2に戻した時に、ここだけ戻し忘れてたらしい。

やはりしょーもないミスであった。。。
(´・ω・`)