Google People API无法在发布模式下运行

时间:2017-05-03 07:25:47

标签: android google-signin google-people

我正在使用google people API登录并检索Google帐户的个人数据。这是我获取人员数据的代码:

$(document).ready(function() {
  $('#yourButton').click(function() {
    if (window.innerWidth > 915) {
      window.scrollBy(0, 100);
    }
  }).click(); // remove .click() here if you don't want to run the code on load
});

虽然Google登录过程运行良好,但 protected Void getData(GoogleSignInAccount acct) { profile.setEmail(acct.getEmail()); profile.setName(acct.getDisplayName()); GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2( context, Collections.singleton(Scopes.PROFILE) ); credential.setSelectedAccount(new Account(acct.getEmail(), "com.google")); People service = new People.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName(context.getString(R.string.application_name)) .build(); Person meProfile = null; try { //here is the problem in release meProfile = service.people().get("people/me").execute(); } catch (IOException e) { Logger.d(TAG, e);// it returns 404 Not Found Logger.writeLog(LoginActivityNew.this, TAG, "e msg - " + e.getMessage()); } if (meProfile != null) { if (UtilCommon.isEmpty(profile.getName())) { List<Name> names = meProfile.getNames(); if (names != null) { for (Name name : names) { if (!UtilCommon.isEmpty(name.getDisplayName())) { profile.setName(name.getDisplayName()); break; } } } } List<Birthday> birthdays = meProfile.getBirthdays(); if (birthdays != null && birthdays.size() > 0) { for (Birthday bDay : birthdays) { if (bDay == null || bDay.getDate() == null) continue; Date date = bDay.getDate(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, date.getDay()); calendar.set(Calendar.MONTH, date.getMonth()); calendar.set(Calendar.YEAR, date.getYear()); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); profile.setDOB(calendar.getTime()); break; } } List<Gender> genders = meProfile.getGenders(); if (genders != null && genders.size() > 0) { profile.setSex(Profile.SEX_NONE); for (Gender genderObj : genders) { if (genderObj == null || UtilCommon.isEmpty(genderObj.getValue())) continue; String gender = genderObj.getValue(); if (gender.equals("male")) profile.setSex(Profile.SEX_MALE); else if (gender.equals("female")) profile.setSex(Profile.SEX_FEMALE); else if (gender.equals("unknown")) profile.setSex(Profile.SEX_NONE); else profile.setSex(Profile.SEX_OTHERS); break; } } Logger.writeLog(LoginActivityNew.this, TAG, "name - " + profile.getName()); Logger.writeLog(LoginActivityNew.this, TAG, "gender - " + profile.getSex()); if (profile.getDOB() != null) Logger.writeLog(LoginActivityNew.this, TAG, "dob - " + profile.getDOB()); } } 阻止了一件有趣的事情。

  

它在调试模式下工作正常,但在发布模式下不能正常工作。

使用发布模式时,此块会返回异常:meProfile = service.people().get("people/me").execute();

  

在此服务器上找不到请求的URL。

我检查了Google控制台项目,并为调试和发布密钥提供了有效的SHA-1证书。

有人知道这个问题吗?我被卡住了。

2 个答案:

答案 0 :(得分:2)

如果您启用了禁用proguard ,则生成已签名的APK。您可以通过在build.gradle文件中设置 minifyEnabled = false 来完成此操作。

如果问题解决了,那么它就是一个与项目相关的问题。

您可以使用 keep class 属性在proguard文件中解决此次购买,包括人员API相关课程。

答案 1 :(得分:-1)

您是说该应用不支持已签名/导出的apk? 如果是这种情况, 您需要将已签名的SHA密钥添加到您的Google应用帐户。

https://developers.google.com/people/v1/how-tos/authorizing

您可以找到这样的签名SHA密钥 -

keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v