Android + Google API で ConnectionResult{statusCode=INTERNAL_ERROR, resolution=null} が出たときのデバッグ方法
INTERNAL_ERROR だけでは何が悪いのかわかりません
けつろん
- 詳細なトレースを出そう
- Google API Console をよく見直そう
- だいたいSHA1フィンガープリントが間違っていることが多い
- 原因不明だが再登録して直ることもある
まずやること
以下の対応をしてトレースに出る内容を増やす。HTTP のリクエスト、レスポンスの詳細がわかるようになる。INVALID_CLIENT_ID とか教えてくれます。
Logger.getLogger(HttpTransport.class.getName()).setLevel(Level.CONFIG);
% adb shell setprop log.tag.httptransport debug
Google API Console に登録した SHA1 のフィンガープリントとパッケージ名を見直す
SHA1の確認
% keytool -exportcert -alias youraliasname -keystore yourkeystore.keystore -list -v
念のためアプリ自身からSHA1を出力
違うkeystoreが使用されいている可能性もあるので、以下のコードで確認してみる。※リリース時には消そう
private String getCertificateSHA1Fingerprint() throws java.security.cert.CertificateException {
PackageManager pm = this.getPackageManager();
String packageName = this.getPackageName();
int flags = PackageManager.GET_SIGNATURES;
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName, flags);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Signature[] signatures = packageInfo.signatures;
byte[] cert = signatures[0].toByteArray();
InputStream input = new ByteArrayInputStream(cert);
CertificateFactory cf = null;
try {
cf = CertificateFactory.getInstance("X509");
} catch (CertificateException e) {
e.printStackTrace();
}
X509Certificate c = null;
try {
c = (X509Certificate) cf.generateCertificate(input);
} catch (CertificateException e) {
e.printStackTrace();
}
String hexString = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] publicKey = md.digest(c.getEncoded());
hexString = byte2HexFormatted(publicKey);
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (CertificateEncodingException e) {
e.printStackTrace();
}
return hexString;
}
public static String byte2HexFormatted(byte[] arr) {
StringBuilder str = new StringBuilder(arr.length * 2);
for (int i = 0; i < arr.length; i++) {
String h = Integer.toHexString(arr[i]);
int l = h.length();
if (l == 1) h = "0" + h;
if (l > 2) h = h.substring(l - 2, l);
str.append(h.toUpperCase());
if (i < (arr.length - 1)) str.append(':');
}
return str.toString();
}
さんこう
- android - Error : ConnectionResult{statusCode=INTERNAL_ERROR, resolution=null} - Stack Overflow - http://goo.gl/rF1n2S
- google api - G+ signin on android throws INVALID_CLIENT_ID - Stack Overflow - http://goo.gl/IhsBVs
Author And Source
この問題について(Android + Google API で ConnectionResult{statusCode=INTERNAL_ERROR, resolution=null} が出たときのデバッグ方法), 我々は、より多くの情報をここで見つけました https://qiita.com/akiramuramatsu/items/35e16a98b9539cd37352著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .