我正在尝试检索 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 帐户中删除该帐户。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) 我遇到的根本问题是我想使用令牌发出 webservice API 请求。令牌是通过使用电子邮件/密码点击身份验证端点获得的。令牌有一个过期时间,因此为了让 Android 应用程序顺利执行,令牌应在无效时刷新,无需用户交互。
我一直在寻求的解决方案是使用 AccountManager ( http://developer.android.com/reference/android/accounts/AccountManager.html ) 来存储电子邮件/密码和令牌。问题是要实例化 AccountManager,我需要向它传递一个 Context ( AccountManager.get(context))。大多数 API 请求发生在上下文不可用的地方,例如 AsyncTasks 或单例管理器类。在上下文中传递是一个混乱的前景,并不总是可能的。
有没有办法让它与 AccountManager 一起使用?或者我是否需要以完全不同的方式管理和刷新我的身份验证令牌?我假设我需要在手机上存储加密的用户电子邮件/密码,但也许这是不可能的。我想知道最佳实践是什么。
我在Android中实现了一个客户经理,我在应用程序中使用了很多peekAuthToken来获取令牌.
但我对源代码感到有点困惑,在文档中说:
旨在供验证者使用,而不是由应用程序直接使用.
为什么会这样,使用此方法获取authToken的问题是什么?
我想使用 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 帐户管理器访问身份验证(从我们自己的网络服务)令牌。因为这是一个 SSO,我们决定将登录(活动 和AbstractAccountAuthenticator)提取到两个应用程序都绑定到的库中。为了在Android系统中保留帐户,如果我们的一个应用程序被卸载(假设用户安装了我们的两个应用程序),我们给了一个accountType统一的名称ex。my.company.auth(但这两个应用程序分别具有包名称my.company.a和my.company.b)。
问题在于,当我们的两个应用程序都被卸载时:Android 帐户设置中的条目仍然存在。
有谁知道为什么或者我做错了什么?accountType这是否与具有与应用程序不同的“包名称”的相关?
预先非常感谢
假设我有 App1 使用 keystore1 签名。App2 使用 keystore2 进行签名。它们共享相同的身份验证后端。
我们现在正在实施帐户管理器,以便两个应用程序在设备中共享相同的帐户,因此下载 App1 并登录的用户不需要在 App2 中执行相同的操作。
但这只有在他们的签名匹配的情况下才有可能。
我可以做些什么来更新 App2 签名配置以匹配 App1 吗?我联系了 Google Play 支持人员,但到目前为止我们还没有找到任何好的解决方案。
谢谢你!
我正在使用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会在状态栏中显示通知,该通知会启动请求访问帐户权限的活动.
问题是,如何在不点击通知的情况下直接显示此活动?
如果有人没有关于此的具体信息,但有用的链接,请发布.
我正在开发一个客户端-服务器应用程序,并希望为用户提供单点登录,他们可以在其中使用 Google 登录。我计划通过使用 AccountManager 在手机上获取访问令牌,然后将此令牌发送到服务器以验证令牌并登录用户来执行此操作。
当我在 AccountManager 中调用 getAuthToken 方法时,会显示一个对话框,其中用户必须允许这样做,但是 Android 上的 Chrome 允许您登录并将浏览器数据与您的 Google 帐户同步,而不会显示此对话框。因此,Chrome 似乎能够在不向用户显示任何对话框的情况下获取访问令牌,如果我可以对我的应用程序执行相同操作,那就太好了。
在查看 Android 的源代码和getAuthToken的实现时, 如果应用程序是预安装的应用程序或者应用程序的 UID 与(Google 帐户的)身份验证器的 UID 相同,则似乎会自动授予访问权限。
我的应用程序和 Chrome 都没有预装,所以在这两种情况下检查都是假的。我的应用程序当然不能与 Google 帐户身份验证器共享 UID,而且我认为 Chrome 有可能与身份验证器共享 UID,因为 Google 创建了它们。如果是这种情况,那么它将解释为什么 Chrome 不显示任何对话框。
在请求我可能丢失的访问令牌时,是否有其他方法不向用户显示此对话框?
我这是在描述实现我自己的身份验证的应用程序此文章.它按预期工作正常.现在我需要从AccountManager获取谷歌帐户,我这样做:
Account[] accounts = AccountManager.get(this).getAccountsByType("com.google");
Run Code Online (Sandbox Code Playgroud)
问题是它返回一个空数组.但是,当我在我的测试应用程序中使用此片段而没有所有Authenticator的东西时,它就像一个魅力.我看不出这些案件之间的实际差异在哪里.有人遇到过这个问题吗?