Я добавил некоторый код, который получает информацию о профиле пользователя из People Api после того, как он вошел в систему (используя GoogleSignInOptions
). Это код:
private void getProfileData(final Context context, GoogleSignInAccount account, final ProfileDataListener listener) {
ProfileDataTask profileDataTask = new ProfileDataTask(context, account, listener);
profileDataTask.execute();
}
private static class ProfileDataTask extends AsyncTask<GoogleSignInAccount, Void, Person> {
private GoogleAccountCredential credential;
private String appName;
private ProfileDataListener listener;
ProfileDataTask(Context context, GoogleSignInAccount account, ProfileDataListener listener) {
this.credential = GoogleAccountCredential.usingOAuth2(context, Collections.singleton(Scopes.PROFILE));
this.credential.setSelectedAccount(new Account(account.getEmail(), "com.google"));
this.appName = context.getString(R.string.app_name);
this.listener = listener;
}
@Override
protected Person doInBackground(GoogleSignInAccount... accounts) {
PeopleService service = new PeopleService.Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
.setApplicationName(appName)
.build();
try {
return service.people()
.get("people/me")
.setPersonFields("genders,birthdays")
.execute();
} catch (IOException e) {
return null;
}
}
@Override
protected void onPostExecute(Person person) {
super.onPostExecute(person);
if (listener != null) {
listener.onCompleted(person);
}
}
}
Это очень просто (даже если документация по этим API отсутствует) и все работает.
Зависимости Gradle:
implementation 'com.google.api-client:google-api-client-android:1.23.0'
implementation 'com.google.apis:google-api-services-people:v1-rev299-1.23.0'
Проблема возникает, когда я собираю тип сборки 'release', который использует proguard. Моя сборка терпит неудачу со следующим:
Предупреждение: org.apache.commons.logging.impl.ServletContextCleaner: не удается найти суперкласс или интерфейс javax.servlet.ServletContextListener
Предупреждение: org.apache.commons.logging.impl.AvalonLogger: не удается найти указанный класс org.apache.avalon.framework.logger.Logger
Предупреждение: org.apache.commons.logging.impl.AvalonLogger: не удается найти указанный класс org.apache.avalon.framework.logger.Logger
... Предупреждение: org.apache.commons.logging.impl.AvalonLogger: не удается найти указанный класс org.apache.avalon.framework.logger.Logger
Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Category
Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Category
Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Priority
Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Priority
Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Priority
когда я запускаю ./gradlew app: зависимости я вижу это:
Кажется, что библиотека google-api-client-android зависит от более общей библиотеки google-api-client, которая не подходит для использования Android. И впоследствии содержит не Android-компоненты. Это правильно? Как я могу решить это? Спасибо.