Невозможно добавить новую пользовательскую учетную запись из другого приложения с тем же аутентификатором

У меня есть два приложения, которые используют один и тот же тип пользовательской учетной записи. Эти два приложения полностью независимы и просто делят учетную запись. Когда один из них запускается, он проверяет существующие пользовательские учетные записи и, если учетная запись не найдена, показывает страницу входа.

Поэтому я создал свой 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);

заранее спасибо


person Misagh Emamverdi    schedule 02.09.2015    source источник


Ответы (3)


@Misagh Emamverdi Да. Вы не указали это разрешение в своем манифесте.

Android: общий идентификатор пользователя

Имя идентификатора пользователя 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"] >
. . .

person IntelliJ Amiya    schedule 08.09.2015

Я не уверен, что это правильный ответ, но я обнаружил, что проблема в том, что приложения имеют разные 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" >
person Misagh Emamverdi    schedule 07.09.2015

Найдите хорошо написанную статью Напишите свой собственный Android Authenticator< /а>

введите здесь описание изображения

person Chathura Wijesinghe    schedule 10.09.2015