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

Mis*_*rdi 11 account android accountmanager android-authenticator android-account

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

所以我创建了我AccountAuthenticator的图书馆项目并在两个应用程序中引用它.根据本教程:

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

当我运行其中一个应用程序(无论哪个应用程序)并调用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);
Run Code Online (Sandbox Code Playgroud)

提前致谢

Int*_*iya 5

@Misagh Emamverdi 是的。您在清单中缺少该权限。

\n\n

android:共享用户ID

\n\n

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

\n\n

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

\n\n

因此android:sharedUserId用于在两个或多个应用程序之间共享进程(例如Udinic Authenticator)。

\n\n

句法

\n\n
<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n      package="string"\n      android:sharedUserId="string"\n      android:sharedUserLabel="string resource" \n      android:versionCode="integer"\n      android:versionName="string"\n      android:installLocation=["auto" | "internalOnly" | "preferExternal"] >\n. . .\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n


Mis*_*rdi 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" >
Run Code Online (Sandbox Code Playgroud)