标签: accountmanager

android中accountManager的getPassword中出现SecurityException

我正在尝试检索 google 帐户的密码,但在 String pwd = AccountManager.get(mContext).getPassword(account) 处出现安全异常。另外,我已在 androidManifest.xml 中向 account_manager、authenticator、get_account、管理帐户授予权限。

代码 :

android.accounts.Account[] gaccounts = AccountManager.get(mContext).getAccounts();
Log.i("parul", "2222()len :"+ gaccounts.length);
for (android.accounts.Account account: gaccounts) {
   String pwd = AccountManager.get(mContext).getPassword(account);
   Log.i("parul", "google pwd: " + pwd);
   AccountManager.get(mContext).setPassword(account, null);
   String pwdcleared = AccountManager.get(mContext).getPassword(account);
   Log.i("parul", "google pwdcleared: " + pwdcleared);
}
Run Code Online (Sandbox Code Playgroud)

=================================================== ===========================

例外:

08-04 06:38:30.821: WARN/AccountManagerService(2248): 调用者 uid 1000 与身份验证器的 uid 不同

08-04 06:38:30.821: INFO/parul(2804): 为客户经理 try 块抛出异常

08-04 06:38:30.821:WARN / System.err(2804):java.lang.SecurityException:调用者uid 1000与身份验证器的uid不同

08-04 06:38:30.821:警告/System.err(2804):在android.os.Parcel.readException(Parcel.java:1218)

08-04 06:38:30.821:警告/System.err(2804):在android.os.Parcel.readException(Parcel.java:1206)

08-04 06:38:30.821: WARN/System.err(2804): 在 …

android google-account getpasswd accountmanager

5
推荐指数
1
解决办法
5607
查看次数

从 accountmanager android 中删除帐户时自定义对话框

我想阻止用户从我的应用程序的 Android 帐户中删除该帐户。AndroidAbstractAccountAuthenticator提供了一种getAccountRemovalAllowed我可以用来防止删除帐户的方法。到现在为止还挺好。

但是当我尝试从设置中删除帐户时,对话框很可怕。说你只能通过恢复出厂设置来删除。我想自定义它说您应该卸载该应用程序以删除该帐户。有没有办法做到这一点?

我尝试提供KEY_INTENT我自己的活动,但没有效果。

public Bundle getAccountRemovalAllowed(AccountAuthenticatorResponse response,
        Account account) throws NetworkErrorException {
    // Cannot remove the account.
    final Bundle result = new Bundle();
            Intent i = new Intent(mContext, MyDialog.class);
    result.putParcelable(AccountManager.KEY_INTENT, i);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

android accountmanager android-account

5
推荐指数
0
解决办法
442
查看次数

使用 AccountManager 存储凭证和刷新 API 令牌

我遇到的根本问题是我想使用令牌发出 webservice API 请求。令牌是通过使用电子邮件/密码点击身份验证端点获得的。令牌有一个过期时间,因此为了让 Android 应用程序顺利执行,令牌应在无效时刷新,无需用户交互。

我一直在寻求的解决方案是使用 AccountManager ( http://developer.android.com/reference/android/accounts/AccountManager.html ) 来存储电子邮件/密码和令牌。问题是要实例化 AccountManager,我需要向它传递一个 Context ( AccountManager.get(context))。大多数 API 请求发生在上下文不可用的地方,例如 AsyncTasks 或单例管理器类。在上下文中传递是一个混乱的前景,并不总是可能的。

有没有办法让它与 AccountManager 一起使用?或者我是否需要以完全不同的方式管理和刷新我的身份验证令牌?我假设我需要在手机上存储加密的用户电子邮件/密码,但也许这是不可能的。我想知道最佳实践是什么。

authentication android accountmanager

5
推荐指数
0
解决办法
727
查看次数

Android AccountManager:peekAuthToken

我在Android中实现了一个客户经理,我在应用程序中使用了很多peekAuthToken来获取令牌.

但我对源代码感到有点困惑,在文档中说:

旨在供验证者使用,而不是由应用程序直接使用.

为什么会这样,使用此方法获取authToken的问题是什么?

android accountmanager android-contentprovider

5
推荐指数
1
解决办法
889
查看次数

使用 Android AccountManager 进行 Firebase 身份验证

我想使用 Firebase 构建一个 Android 应用程序。Firebase 为登录屏幕https://github.com/firebase/firebase-login-demo-android提供演示代码。

但不是让用户输入他们的帐户信息,我希望用户能够使用用户已经在 Android 的集中式帐户管理器中输入的帐户信息。

我见过的文档AccountManager对象在https://developer.android.com/reference/android/accounts/AccountManager.html和火力地堡在Android现身认证指南https://www.firebase.com/docs/android/ guide/user-auth.html,但我太菜了,不知道如何把它们放在一起。

任何建议/指针/示例代码将不胜感激。或者让我知道我是否在吠错树。

android accountmanager firebase firebase-authentication

5
推荐指数
1
解决办法
1913
查看次数

多个应用程序的单个 Android 帐户

在我的公司,我们有两个应用程序可以从 Android 帐户管理器访问身份验证(从我们自己的网络服务)令牌。因为这是一个 SSO,我们决定将登录(活动 和AbstractAccountAuthenticator)提取到两个应用程序都绑定到的库中。为了在Android系统中保留帐户,如果我们的一个应用程序被卸载(假设用户安装了我们的两个应用程序),我们给了一个accountType统一的名称exmy.company.auth(但这两个应用程序分别具有包名称my.company.amy.company.b)。

问题在于,当我们的两个应用程序都被卸载时:Android 帐户设置中的条目仍然存在。

有谁知道为什么或者我做错了什么?accountType这是否与具有与应用程序不同的“包名称”的相关?

预先非常感谢

android accountmanager

5
推荐指数
1
解决办法
1570
查看次数

不同签名的不同应用可以共享同一个客户经理帐户吗?

假设我有 App1 使用 keystore1 签名。App2 使用 keystore2 进行签名。它们共享相同的身份验证后端。

我们现在正在实施帐户管理器,以便两个应用程序在设备中共享相同的帐户,因此下载 App1 并登录的用户不需要在 App2 中执行相同的操作。

但这只有在他们的签名匹配的情况下才有可能。

我可以做些什么来更新 App2 签名配置以匹配 App1 吗?我联系了 Google Play 支持人员,但到目前为止我们还没有找到任何好的解决方案。

谢谢你!

android accountmanager

5
推荐指数
0
解决办法
292
查看次数

如何显示从状态栏通知开始的权限活动?

我正在使用AccountManager获取OAuth 2.0令牌.

mAccountManager.getAuthToken(mAccount, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {
        @Override
        public void run(AccountManagerFuture<Bundle> future) {
                Bundle bundle = future.getResult();
                if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
                    String authToken = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
                    ... continue
                }
            }
        }
    }, null);
Run Code Online (Sandbox Code Playgroud)

如果令牌第一次到达,AccountManager会在状态栏中显示通知,该通知会启动请求访问帐户权限的活动.

问题是,如何在不点击通知的情况下直接显示此活动?

如果有人没有关于此的具体信息,但有用的链接,请发布.

android accountmanager

4
推荐指数
1
解决办法
1221
查看次数

是否可以在不触发“权限请求”对话框的情况下从 AccountManager 获取身份验证令牌?

我正在开发一个客户端-服务器应用程序,并希望为用户提供单点登录,他们可以在其中使用 Google 登录。我计划通过使用 AccountManager 在手机上获取访问令牌,然后将此令牌发送到服务器以验证令牌并登录用户来执行此操作。

当我在 AccountManager 中调用 getAuthToken 方法时,会显示一个对话框,其中用户必须允许这样做,但是 Android 上的 Chrome 允许您登录并将浏览器数据与您的 Google 帐户同步,而不会显示此对话框。因此,Chrome 似乎能够在不向用户显示任何对话框的情况下获取访问令牌,如果我可以对我的应用程序执行相同操作,那就太好了。

在查看 Android 的源代码和getAuthToken实现时, 如果应用程序是预安装的应用程序或者应用程序的 UID 与(Google 帐户的)身份验证器的 UID 相同,则似乎会自动授予访问权限。

我的应用程序和 Chrome 都没有预装,所以在这两种情况下检查都是假的。我的应用程序当然不能与 Google 帐户身份验证器共享 UID,而且我认为 Chrome 有可能与身份验证器共享 UID,因为 Google 创建了它们。如果是这种情况,那么它将解释为什么 Chrome 不显示任何对话框。

在请求我可能丢失的访问令牌时,是否有其他方法不向用户显示此对话框?

android oauth single-sign-on accountmanager

4
推荐指数
1
解决办法
1801
查看次数

AccountManager返回空帐户

我这是在描述实现我自己的身份验证的应用程序文章.它按预期工作正常.现在我需要从AccountManager获取谷歌帐户,我这样做:

 Account[] accounts = AccountManager.get(this).getAccountsByType("com.google");
Run Code Online (Sandbox Code Playgroud)

问题是它返回一个空数组.但是,当我在我的测试应用程序中使用此片段而没有所有Authenticator的东西时,它就像一个魅力.我看不出这些案件之间的实际差异在哪里.有人遇到过这个问题吗?

android accountmanager

4
推荐指数
1
解决办法
3636
查看次数