Получить токен не работает в менеджере аккаунта
Я реализовал менеджер аккаунта в моем приложении для 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 get auth token не работает, когда аромат добавлен в 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 никогда не вызывался в sign-apk.
1 ответ
Я думаю, ты неправильно определил вкус. Взгляните на пример кода ниже, чтобы увидеть, как определение разновидности отличается от определения типа сборки:
Различные типы сборки:
Вы можете создавать и настраивать типы сборки в файле build.gradle уровня модуля внутри блока android {}. При создании нового модуля Android Studio автоматически создает типы сборки отладки и выпуска для вас. Хотя тип отладочной сборки не отображается в файле конфигурации сборки, Android Studio настраивает его с помощью debuggable 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 создаст следующие варианты сборки:
demoDebug
demoRelease
fullDebug
fullRelease
Сделайте это и проверьте, существует ли проблема по-прежнему или нет.