久々に発狂しそうなレベルで詰まった。
Google Plus ログインで以下のようなコードを書くことになる。
@Override public void onConnectionFailed(ConnectionResult result) { Log.e(TAG, result.toString()); if (result.hasResolution()) { try { result.startResolutionForResult(activity, REQUEST_CODE_RESOLVE_ERR); } catch (IntentSender.SendIntentException e) { googleApiClient.connect(); } } }
さて、hasResolution()では、ユーザがこのアプリへの情報読み取り許可をしていない場合にtrueを返す訳だが、startResolutionForResult() がどうしても呼ばれず、「内部エラーが発生しました」と出て先に進まなかった。
ログを見ると以下のようなメッセージが出た。
onnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{53363ccc: android.os.BinderProxy@5323fbf0}}
さらに詳細を見ると、
adb -d shell setprop log.tag.GooglePlusPlatform VERBOSE INVALID_CLIENT_ID my_email@domain oauth2:https://www.googleapis.com/auth/plus.login
答えはここにあった。
Google API コンソールの API & Auth の Consent Screen にちゃんと値をセットしていないと上記のエラーが出る。
「内部エラーが発生しました」だけじゃそんなのわかる訳ねぇ!まぁ直って良かった。