Я совершенно новичок в использовании ключей API Google с Android, и я нашел этот пример , потому что мне интересно создать очень простое приложение для уведомлений о задачах Google.Однако, несмотря на исправление всех проблем сборки Gradle, я не могу заставить приложение работать.
Когда я запускаю его на Android 8.0.0, как только я выбираю учетную запись Google, я получаю UNREGISTERED_ON_API_CONSOLE
.По результатам поиска я понимаю, что APK должен быть подписан, а идентификатор клиента OAuth 2.0 должен быть получен.Мне удалось сделать все это, следуя (более или менее) этому совету .
Проблема, с которой я столкнулся, связана с (5-летним) примером кода на https://github.com/google/google-api-java-client-samples/tree/master/tasks-android-sample - я не вижу, где указать идентификатор клиента из консоли.В документации упоминается ключ API (хотя и из-за ограничений квот, но не из-за безопасности), но не там, где он используется :
Также необходимо указатьключ API из Консоли API Google .В противном случае токен, который предоставляет вам AccountManager, предоставляет только анонимную квоту, которая обычно очень мала.Напротив, указав ключ API, вы получаете более высокую свободную квоту и можете дополнительно настроить выставление счетов для использования сверх этого.
Пример фрагмента кода, взятого из tasks-android-sample :
com.google.api.services.tasks.Tasks service;
@Override
public void onCreate(Bundle savedInstanceState) {
credential =
GoogleAccountCredential.usingOAuth2(this, Collections.singleton(TasksScopes.TASKS));
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
credential.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
service =
new com.google.api.services.tasks.Tasks.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("Google-TasksAndroidSample/1.0").build();
}
private void chooseAccount() {
startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_GOOGLE_PLAY_SERVICES:
if (resultCode == Activity.RESULT_OK) {
haveGooglePlayServices();
} else {
checkGooglePlayServicesAvailable();
}
break;
case REQUEST_AUTHORIZATION:
if (resultCode == Activity.RESULT_OK) {
AsyncLoadTasks.run(this);
} else {
chooseAccount();
}
break;
case REQUEST_ACCOUNT_PICKER:
if (resultCode == Activity.RESULT_OK && data != null && data.getExtras() != null) {
String accountName = data.getExtras().getString(AccountManager.KEY_ACCOUNT_NAME);
if (accountName != null) {
credential.setSelectedAccountName(accountName);
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREF_ACCOUNT_NAME, accountName);
editor.commit();
AsyncLoadTasks.run(this);
}
}
break;
}
}
Где разместить информацию о ключах API в подходе, используемом здесь (GoogleAccountCredential.usingOAuth2
), чтобы избежать ошибки UNREGISTERED_ON_API_CONSOLE
?
Редактировать: Дополнительная информация о этой странице , кажется, подразумевает, что аутентификация намного сложнее, чем пример кода.