我首次尝试在Google Cloud Endpoints Android应用中以调试模式使用身份验证时遇到问题。我设置了这样的凭据:
credential = GoogleAccountCredential.usingAudience(this,
"server:client_id:long-string-i-got-from-api-console");
credential.setSelectedAccountName(accountName);
然后尝试使用它:
final String LOCAL_APP_ENGINE_SERVER_URL = "http://xxx.xxx.x.xxx:8888";
Testdbendpoint.Builder endpointBuilder = new Testdbendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new GsonFactory(),
credential);
endpointBuilder.setRootUrl(LOCAL_APP_ENGINE_SERVER_URL + "/_ah/api/");
Testdbendpoint endpoint = endpointBuilder.build();
try {
TestDB testDB = new TestDB().setId(10101L);
TestDB result = endpoint.insertTestDB(testDB).execute(); //-- fails here!!!!
} catch ...
但尝试失败,我在logCat中收到这些消息:
03-06 23:33:20.418:W / System.err(11861):引起: com.google.android.gms.auth.GoogleAuthException:未知03-06 23:33:20.418:W / System.err(11861):at com.google.android.gms.auth.GoogleAuthUtil.getToken(未知来源) 03-06 23:33:20.423:W / System.err(11861):at com.google.android.gms.auth.GoogleAuthUtil.getToken(未知来源) 03-06 23:33:20.428:W / System.err(11861):at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:192)
答案 0 :(得分:12)
您的Android Client-Id可能有错误的证书指纹(SHA1)?只有在手动签署.apk时,才能使用生产密钥的指纹进行身份验证。
使用您的API Console中的debug.keystore指纹为已安装的应用程序(Android)注册Client-Id。要获取指纹:
C:\>keytool -list -alias androiddebugkey -keystore C:\.android\debug.keystore -storepass android -keypass android
此外,您还需要一个Web-Client-Id,并在Android应用程序中将其设置为Audience:
credential = GoogleAccountCredential.usingAudience(this,"server:client_id:" + WEB_CLIENT_ID);
AppEngine端点配置应如下所示:
@Api(
name = "testEndpoint",
version = "v1",
clientIds = {ClientIds.WEB_ID, ClientIds.ANDROID_PRODUCTION_ID, ClientIds.ANDROID_DEBUG_ID},
audiences = {ClientIds.WEB_ID}
)
答案 1 :(得分:0)
确定,但您是否在Google API控制台中注册了客户端ID以及App Engine App ID?该谷歌帐户已被添加到设备?
此博客上的说明可能有用:
http://devthots.blogspot.com/
希望有所帮助!
答案 2 :(得分:0)
我希望这可以帮助你。
Elements