Android: Google Drive onActivityResult () получает результатКод 0 (RESULT_CANCELED) - PullRequest
1 голос
/ 29 мая 2019

Я искал документацию Google и пример кода, а также переполнение стека для решения этой проблемы, и хотя я видел множество людей, сталкивающихся с такими же симптомами, я не нашел ничего, что помогло бы в моем конкретном случае .

В основном я пытаюсь выполнить рабочий процесс авторизации для Google Drive REST API, и хотя я дохожу до страницы выбора аккаунта Google, когда он возвращается к моей работе с вызовами, я всегда вижу результат RESULT_CANCELED (т. е. 0) вместо RESULT_OK (т. е. -1), независимо от того, какая учетная запись выбрана.

Я проверил, чтобы убедиться, что учетные данные правильно установлены на консоли разработчика Google - и они ранее работали с аутентификацией через ныне не существующую библиотеку CloudRail. (Насколько я могу судить, теперь с помощью Google Sign-In вы не предоставляете какой-либо идентификатор клиента и т. Д .: все это обрабатывается на конце Google, когда оно совпадает с именем вашего пакета.)

Вот мой звонок для аутентификации:

    GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestScopes(new Scope(DriveScopes.DRIVE))
            .build();
    mSignInClient = GoogleSignIn.getClient(activity, signInOptions);

А вот вид деятельности onActivityResult():

@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
    switch (requestCode) {
        case REQUEST_GOOGLE_SIGN_IN:
            if (resultCode == Activity.RESULT_OK && resultData != null) {
                /*** NEVER GET HERE ***/
                handleSignInResult(this, resultData);
            }
            else {
                /*** ALWAYS GET HERE ***/
                Log.e(TAG, String.format("Unable to complete Google sign-in (resultCode: %d)", resultCode));
            }
        }
        break;
    }
    super.onActivityResult(requestCode, resultCode, resultData);
}

Я предполагаю, что это тот случай, когда я делал что-то явно глупое и неправильное - и надеялся, что просто напечатать вопрос поможет мне понять, что это такое, но этого еще не произошло.

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Как я и ожидал, это было что-то относительно простое, что я делал неправильно. Поэтому для тех, у кого возникла та же проблема и я перешагнул через мое тело во время поиска решения, вот что я нашел:

Хотя я действительно правильно установил учетные данные в консоли разработчика Google, с моим именем пакета и сгенерированным SHA1, как указано в документации из mykeystore.keystore, я пропустил то, что Android Studio не подписывает отладочные сборки с mykeystore.keystore по умолчанию . Вместо этого он использует свой собственный debug.keystore.

Итак, вам нужно создать новый идентификатор клиента OAuth с именем вашего пакета и SHA1 из debug.keystore Android Studio вместо собственного. (Вы можете либо выследить debug.keystore в своей системе, либо запустить задачу Gradle «signatureReport» и получить ее оттуда.)

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 29 мая 2019

Прежде всего, скорее всего, все это происходит, потому что вы добавляете credential.json из консоли Google Drive API.Я предлагаю вам создать проект в консоли Firebase и добавить его google.json для проверки подлинности.

и в вашем onActivityResult вы можете проверить код ошибки, используя следующий код:

  @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (callbackManager != null) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
    super.onActivityResult(requestCode, resultCode, data);
    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            // Google Sign In was successful, authenticate with Firebase
            GoogleSignInAccount account = task.getResult(ApiException.class);
            handleSignInResult(account);
        } catch (ApiException e) {
            // Google Sign In failed, update UI appropriately
             System.out.println("errorCode = " + e.getStatusCode());// Print this error code on your console 
        }
    }

}

, если код ошибки 12500, тогда ваша проблема с проверкой ключей и, следовательно, вам необходимо создать проект firebaseи добавьте код SHA1 своей машины, а затем используйте его файл google.json в корневой папке приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...