Невозможно добавить новую настраиваемую учетную запись из другого приложения с тем же аутентификатором
У меня есть два приложения, которые используют один и тот же настраиваемый тип учетной записи. Эти два приложения полностью независимы и просто делят учетную запись. Когда один из них запускается, он проверяет наличие пользовательских учетных записей, и если учетная запись не найдена, отображается страница входа.
Итак, я создал мой AccountAuthenticator
в качестве проекта библиотеки и ссылаюсь на него в обоих приложениях. В соответствии с этим учебник:
Допустим, вы скопировали свой код аутентификации в 2 ваших приложениях, таким образом разделяя его логику и изменяя дизайн входных страниц в каждом приложении чтобы соответствовать приложению, к которому он принадлежит. В этом случае первые установленные приложения аутентификатор будет вызываться для обоих приложений, когда токен аутентификации будет просил. Если вы удалите первое приложение, то второе приложение с этого момента будет вызываться аутентификатор (поскольку его единственный в настоящее время).
Когда я запускаю одно из приложений (независимо от того, какое приложение) и вызывает addAccount
, он хорошо показывает страницу входа. Затем, когда я запускаю второе приложение и вызываю addAccount
, ничего не происходит, и страница входа не отображается. После удаления первого приложения второе приложение работает правильно и показывает страницу входа. Итак, в чем проблема и как я могу это исправить?
Реализация addAccount
:
mAccountManager.addAccount(accountType, authTokenType, null, null, this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bnd = future.getResult();
showMessage("Account was created");
} catch (Exception e) {
e.printStackTrace();
showMessage(e.getMessage());
}
}
}, null);
Заранее спасибо
Ответы
Ответ 1
Я не уверен, что это правильный ответ, но я обнаружил, что проблема в том, что приложения имеют разные UID. Поэтому я использую sharedUserId
в обоих приложениях, и проблема решена:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:sharedUserId="test.account"
android:versionCode="100"
android:versionName="1.0" >
Ответ 2
@Misagh Emamverdi Да. Вы не получили этого разрешения в своем манифесте.
Android: sharedUserId
Имя идентификатора пользователя Linux, который будет использоваться совместно с другими приложениями. По умолчанию Android назначает каждому приложению свой уникальный идентификатор пользователя. Однако, если для этого атрибута установлено одно и то же значение для двух или более приложений, все они будут иметь один и тот же идентификатор - при условии, что они также подписаны одним и тем же сертификатом.
Приложение с одним и тем же идентификатором пользователя может обращаться к другим данным и, при желании, работать в одном и том же процессе.
Итак, android: sharedUserId используется для совместного использования процессов между двумя или более приложениями (например Udinic Authenticator).
СИНТАКСИС
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
Ответ 3
Найдите хорошо написанную статью Напишите свой собственный Android-аутентификатор
![введите описание изображения здесь]()