Некоторое время я пытался диагностировать проблему авторизации с помощью OAuth 2.0, идентификаторов клиентов и доступа к Google API (в частности, Google Drive).
Общая проблема заключалась в том, что все работает только при сборке и работает прямо через USB на моем устройстве. Я не буду go подробно рассказывать о реальном коде - поскольку я сделал это в другом месте здесь - так что я могу сосредоточиться на текущем моменте, который (надеюсь) укажет кому-то более умному, чем я, на что проблема есть.
Первоначально у меня была проблема с невозможностью заставить работать авторизацию Google Диска при разработке на моем устройстве. Затем я понял, что это потому, что Android Studio подписывает отладочный APK своим собственным debug.keystore, поэтому я перешел на панель управления учетными данными API Google и создал дополнительные учетные данные OAuth2 для своего пакета приложения и хранилища ключей отладки (т. Е. В дополнение к существующие для пакета приложения и моего хранилища ключей выпуска). Вроде отлично работает.
За исключением пакетов выпуска, развернутых в Google Play, не работали. Им не удалось получить авторизацию даже после того, как пользователь выбрал свою учетную запись в потоке авторизации Google.
Моя следующая идея (наконец, после нескольких месяцев попыток) заключалась в том, что мои два набора учетных данных для Один и тот же пакет приложения - один с использованием хранилища ключей отладки Android Studio, а другой - с хранилищем ключей моей версии - находился в конфликте. Итак, я понял, как заставить Android Studio подписывать отладочные сборки, развернутые на моем устройстве, с помощью моего хранилища ключей выпуска, и избавился от учетных данных хранилища ключей отладки на панели инструментов API Google. Вроде все заработало. Думал, что это решило проблему.
Затем, в какой-то момент прошлой ночью, после загрузки того, что, как я надеялся, было фиксированным пакетом в Google Play, мое собственное приложение для устройства обновилось непосредственно из моего развернул отладочную сборку для версии Google Play (потому что коды версий совпадают? и версия Google Play становится предпочтительнее?) и ... теперь она не работает. Я получаю ... ну, обфусцированный поток сообщений W.System.err в logcat, поскольку, по-видимому, это APK Google Play.
Когда я развертываю прямо из Android Studio в мое устройство снова через USB, перезаписывая APK Google Play, тот же код версии, больше ничего не трогал, et c., он работает - по крайней мере, пока Google Play не перезапишет его снова.
( РЕДАКТИРОВАТЬ: Подтверждено ... Я могу вручную запустить обновление в приложении Google Play, и он перезапишет мой только что развернутый через USB и только что работающий отладочный APK с версией Google Play, загруженной вчера, и Google Диск больше не будет работать. )
(РЕДАКТИРОВАТЬ № 2: Я дважды проверил, и учетные данные в консоли API Google используют правильную подпись SHA-1. На самом деле, с тех пор, как я настроил подписку, управляемую Google , кажется, что все три моих локальных сертификата выпуска и сертификат подписи приложений и сертификаты загрузки Google Play одинаковы, поэтому вероятность использования неправильного сертификата очень мала.)
Wh это означает, что единственная версия моего приложения, которая может получить доступ к Google Диску, - это версия, созданная и развернутая непосредственно из Android Studio.
Это что-то очевидное?