Skip to content

Совместная работа двух и более программ, основанных на NextGIS Mobile, с аккаунтами (или java.lang.SecurityException: caller uid XXXXX is different than the authenticator's uid)

NikitaFeodonit edited this page Dec 5, 2017 · 4 revisions

Для того, чтобы две и более программ, основанных на NextGIS Mobile, могли корректно работать с учетными записями пользователей (аккаунтами), должны быть соблюдены следующие условия:

  1. В манифесте каждой программы должны быть указаны разрешения AUTHENTICATE_ACCOUNTS, GET_ACCOUNTS, MANAGE_ACCOUNTS, USE_CREDENTIALS, READ_SYNC_SETTINGS, READ_SYNC_STATS, WRITE_SYNC_SETTINGS.

  2. Все присутствующие в системе программы, основанные на NextGIS Web, должны быть собраны или как release, или как debug.

  3. Если есть необходимость для тестирования одной из программ использовать сервер testfairy.com, то все остальные программы, основанные на NextGIS Web, должны быть удалены из системы.

  4. В соответствии с руководством от Google (ссылка ниже) в манифесте приложения должен быть подобный код:

<service ...>
   <intent-filter>
      <action android:name="android.accounts.AccountAuthenticator" />
   </intent-filter>
   <meta-data android:name="android.accounts.AccountAuthenticator"
             android:resource="@xml/authenticator" />
</service>

Если на устройстве установлено два приложения с одинаковым accountType (в нашем случае "com.nextgis.account"), но в одном из приложений данного кода в манифесте нет, то оба приложения будут исправно работать, пока не будет удалено то, где он есть. Приложение без этого кода перестанет работать. При попытке создать подключение через

AccountManager.addAccountExplicitly()

будет возникать исключение

java.lang.SecurityException: uid XXXXX cannot explicitly add accounts of type: com.nextgis.account

По этой причине полезно проверить работу приложения на "чистом" устройстве, где нет других приложений с тем же accountType.


Полезные ссылки по проблеме:

Руководство от Google: https://developer.android.com/training/id-auth/custom_auth.html

Инструкция для отладки: http://stackoverflow.com/a/6072364

http://stackoverflow.com/questions/3774282/securityexception-caller-uid-xxxx-is-different-than-the-authenticators-uid

https://bugzilla.mozilla.org/show_bug.cgi?id=716798

http://stackoverflow.com/questions/10300534/securityexception-when-trying-to-add-an-account

Дополнительные рассуждения есть по ссылке.