Получить токен авторизации не работает в диспетчере учетных записей

Я реализовал менеджер учетных записей в своем приложении для Android. Я могу без проблем добавлять учетные записи и получать токены авторизации, и подписанный apk также работает правильно. Поток работал отлично, пока я не добавил новый вариант в свой build.grade :

productFlavors {
    release {
        applicationId "com.faranegar.flight.release"
        versionName "1.0.0"
        buildConfigField 'String', 'BASE_API', '"http://release.mysite.ir/api/"'
        buildConfigField 'String', 'BASE_MOBILE_API', '"https://releaseapp.mysite.ir/api/"'

    }
    demo {
        applicationId "com.faranegar.flight.demo"
        buildConfigField 'String', 'BASE_API', '"http://demo.mysite.ir/api/"'
        buildConfigField 'String', 'BASE_MOBILE_API', '"http://demoapp.mysite.ir/api/"'
        versionName "1.0.0"

    }
}

НО в подписанном apk получить токен аутентификации не работает, когда аромат добавляется в gradle. Я получаю токен авторизации следующим образом:

final AccountManager accountManager = AccountManager.get(context);
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        ActivityCompat.requestPermissions((Activity) context,
                new String[]{Manifest.permission.GET_ACCOUNTS},
                Constants.GET_ACCOUNT_PERMISSION);
        return;
    }
    final Account[] accounts = accountManager.getAccountsByType(AccountGeneral.ACCOUNT_TYPE);
    for (final Account account : accounts) {
        if (account.name.equals(Utils.getUserName(context))) {

            final AccountManagerFuture<Bundle> future = accountManager.getAuthToken(account, AccountGeneral.ACCOUNT_TYPE, null, (Activity) context, null, null);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        ((Activity)context).runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(context, "bundle token", Toast.LENGTH_SHORT).show();
                            }
                        });
                        Bundle bnd = future.getResult();
                        final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN);
                        accountControllerListener.onGetToken(authtoken);
                    } catch (final Exception e) {
                        sendErrorToRetrofit(e);
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }

И я получаю эту ошибку при вызове «Bundle bnd = future.getResult();»

android.accounts.AccountManager.convertErrorToException(AccountManager.java:2153)
android.accounts.AccountManager.access$500(AccountManager.java:149)

android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:1996)     android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69)

 android.os.Binder.execTransact(Binder.java:453)

ПРИМЕЧАНИЕ. Когда я проследил, я обнаружил, что метод getAuthToken в MyAuthenticator никогда не вызывался в подписанном apk.


person Hamidreza Shokouhi    schedule 31.12.2016    source источник


Ответы (1)


Я думаю, вы неправильно определили вкус. Взгляните на пример кода ниже, чтобы увидеть, чем определение разновидности отличается от определения типа сборки:

Различные типы сборки:

Вы можете создавать и настраивать типы сборки в файле build.gradle уровня модуля внутри блока android {}. Когда вы создаете новый модуль, Android Studio автоматически создает для вас типы сборки отладки и выпуска. Хотя тип отладочной сборки не отображается в файле конфигурации сборки, Android Studio настраивает его с отладочным значением true. Это позволяет отлаживать приложение на защищенных устройствах Android и настраивает подписывание APK с помощью универсального хранилища ключей отладки.

    buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    debug {
        applicationIdSuffix ".debug"
    }

    }

Разные вкусы:

    productFlavors {
    demo {
        applicationIdSuffix ".demo"
        versionNameSuffix "-demo"
    }
    full {
        applicationIdSuffix ".full"
        versionNameSuffix "-full"
    }
}

После того, как вы создадите и настроите варианты продуктов, нажмите «Синхронизировать сейчас» на панели уведомлений. После завершения синхронизации Gradle автоматически создает варианты сборки на основе ваших типов сборки и разновидностей продукта и называет их в соответствии с . Например, если вы создали «демонстрационный» и «полный» варианты продукта и сохранили типы сборки «отладка» и «выпуск» по умолчанию, Gradle создаст следующие варианты сборки:

  • демоОтладка

  • демо-релиз

  • полная отладка

  • полный выпуск

Сделайте это и проверьте, существует ли проблема или нет.

person Morteza Rastgoo    schedule 31.12.2016