Я реализовал менеджер учетных записей в своем приложении для 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.