无法使用相同的身份验证器从不同的应用添加新的自定义帐户

时间:2015-09-02 11:19:17

标签: android account accountmanager android-account android-authenticator

我有两个使用相同自定义帐户类型的应用。这两个应用程序是完全独立的,只是共享帐户。当其中一个启动时,它会检查现有的自定义帐户,如果未找到任何帐户,则会显示登录页面。

所以我创建了我的>>>sorted([('Gold', 2), ('Bronze', 1), ('Gold', 1)], key=mapper(custom_key)) [('Gold', 1), ('Gold', 2), ('Bronze', 1)] 作为库项目并在两个应用程序中引用它。根据这个{{3}}:

  

假设您将验证者的代码复制到了2个应用中   分享其逻辑,并改变每个应用程序上的登录页面设计   以适应它所属的应用程序。在这种情况下,第一个安装的应用程序   当auth-token出现时,将为两个应用程序调用authenticator   请求。如果你卸载第一个应用程序,第二个应用程序   将从现在开始调用authenticator(因为它是唯一的一个   现在)。

当我运行其中一个应用程序(无论哪个应用程序)并致电map时,它会很好地显示登录页面。 然后,当我运行第二个应用并致电>>> sorted([('Gold', 2), ('Bronze', 1), ('Gold', 1)], key=functools.partial(map, custom_key)) [('Gold', 1), ('Gold', 2), ('Bronze', 1)] 时,没有任何反应,并且未显示登录页面。卸载第一个应用程序后,第二个应用程序正常工作并显示登录页面。那么问题是什么?我该如何解决?

AccountAuthenticator的实施:

addAccount

提前致谢

2 个答案:

答案 0 :(得分:4)

@Misagh Emamverdi 是的。你在清单中遗漏了这个许可。

机器人:sharedUserId

将与其他应用程序共享的Linux用户标识的名称。默认情况下,Android会为每个应用程序分配自己唯一的用户ID。但是,如果将此属性设置为两个或多个应用程序的相同值,则它们将共享相同的ID - 前提是它们也由相同的证书签名。

具有相同用户ID的应用程序可以访问彼此的数据,并且如果需要,可以在同一进程中运行。

所以 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"] >
. . .

答案 1 :(得分:3)

我不确定这是正确答案,但我发现问题是应用程序有不同的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" >