AccountManagerFuture.getResult() приводит к появлению экрана «Не удалось войти»

Я пытаюсь использовать AccountManager, чтобы получить токен для установленной учетной записи Google. Когда я вызываю getResult() для своего объекта AccountManagerFuture, я получаю на устройстве экран «Не удалось войти» (который далее говорит: «Была проблема при обмене данными с серверами Google. Повторите попытку позже). Я проверил, что сетевое подключение доступно до вызова этого метода. Я также проверил устройство, к которому у меня есть доступ, например google.com, в браузере. Вот код для моего AccountManagerCallback:

amf = accMgr.getAuthToken(account, authTokenType, null, true,  
    new AccountManagerCallback<Bundle>() {  
        public void run(AccountManagerFuture<Bundle> arg0) {  
            Bundle result;  
            Intent i;  
            String token;  

                try {        
                    result = arg0.getResult();  
                if (result.containsKey(AccountManager.KEY_INTENT)) {  
                     i = (Intent)result.get(AccountManager.KEY_INTENT);  
                     if (i.toString().contains("GrantCredentialsPermissionActivity")) {  
                         // Will have to wait for the user to accept  
                         // the request therefore this will have to  
                         // run in a foreground application  
                         cbt.startActivity(i);  
                     } else {  
                         cbt.startActivity(i);  
                     }

                     token = (String)result.get(AccountManager.KEY_AUTHTOKEN);  

                     } else {  
                         token = (String)result.get(AccountManager.KEY_AUTHTOKEN);       

                     }  
                 } catch (OperationCanceledException e) {  
                     e.printStackTrace();  
                 } catch (AuthenticatorException e) {  
                     e.printStackTrace();  
                 } catch (IOException e) {  
                     e.printStackTrace();  
                 }  

            }  
       }, handler);

Кроме того, могут быть полезны следующие записи в LogCat:

08-02 15:51:00.911: I/GLSUser(10134): GLS error: Unknown [email protected] com.google
08-02 15:51:00.911: V/GoogleLoginService(10134): Returning error intent with: ComponentInfo{com.google.android.gsf.login/com.google.android.gsf.login.LoginActivity}
08-02 15:51:03.294: I/ActivityManager(324): START {cat=[[email protected]] flg=0x10000000 cmp=com.google.android.gsf.login/.LoginActivity (has extras) u=0} from pid 11147

(Примечание: фактическое имя учетной записи Gmail удалено во избежание спама.)


person robguinness    schedule 02.08.2012    source источник
comment
Имея ту же проблему. Область (ваша переменная authTokenType) явно как-то связана. Если я установлю его на Просмотр ваших задач, ошибка исчезнет, ​​и я получу токен. К сожалению, я не заинтересован в просмотре задач. Если я установлю его на https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile, как это предлагается в другом месте, я получу ту же ошибку, что и вы. Поиск в Google справочной информации о возможных значениях области действия мне пока не помог, но я не сдаюсь.   -  person Adam Mackler    schedule 04.01.2013
comment
Привет, тебе удалось решить свою проблему? Я пытаюсь внедрить неофициальный API Google Music в свое приложение для Android, и я сталкиваюсь с тем же экраном «Не удалось войти». Спасибо!   -  person NewGradDev    schedule 10.09.2013
comment
Я, например, не верю, что когда-либо находил хорошее решение. В моем случае это было не критично, поэтому я не тратил на это кучу времени. Однако ответ @bee может указывать на проблему, с которой я столкнулся, потому что я не генерировал подписанный APK.   -  person robguinness    schedule 11.09.2013
comment
Этот вопрос: stackoverflow.com/questions/14365219/ говорит, что это сложнее, и похоже, что нужно GoogleAuthUtil.   -  person Victor Sergienko    schedule 19.09.2013


Ответы (1)


Вы создаете подписанный APK? Если вы не создадите подписанный APK (например, если вы просто нажмете «запустить приложение»), вы не сможете воспользоваться преимуществами зарегистрированных учетных записей Google на устройстве. Так что вам придется нажать «войти с другим» и войти в систему окольным путем.

(Отказ от ответственности: я не пытался запустить ваш код, но это похоже на проблему, с которой я столкнулся ранее.)

person bee    schedule 14.06.2013