我想知道是否应该实现AccountManager保存用户凭据,如用户名,电子邮件,密码等.我找不到自己使用它的充分理由.
我不希望其他应用程序有权访问Accounts,我真的不希望它们显示在"帐户和同步"设置中(虽然这可能不是什么大问题).
所以我的问题是:我应该使用它吗?优点缺点?我可以隐藏Accounts其他应用并阻止它们出现在"帐户和同步"中吗?
java android password-storage accountmanager android-account
我正在制作一个Android应用程序,它应该能够从Web服务(不是GAE的一部分)获取数据.用户可以使用OpenId通过浏览器登录Web服务(仅允许使用Google帐户).
AccountManager可以给我authtoken.我可以将此authtoken与用户的谷歌帐户名(电子邮件)一起保存在我的服务器上,然后使用此帐户名将他的openid登录与应用程序注册相关联.
但这并没有解决任何问题,因为我无法根据用户的OpenID信息验证此令牌......或者我呢?我以为我可以使用用户的authtoken"以某种方式"将他的Android帐户链接到网络帐户.
这看起来越来越像是一种错误的处理方式,但我不想在SharedPreferences中保存用户Google的用户名/密码,并使用这些数据进行登录.
有创意吗?谢谢
使用AccountManager :: getAuthTokenByFeatures时,将显示"访问请求"屏幕,供用户允许或拒绝访问该帐户.用户允许访问后,后续调用(具有相同的参数)将返回auth令牌而不提示用户.
如何清除状态以确保出现"访问请求"提示?(这至少对于开发,测试和演示目的很有用.)
我注意到设备可能同时登录了多个Google帐户.据我所知,在Honeycomb之前,有一个主要ID; 从Honeycomb上你可以简单地插入几个.我目前有两个ID登录到我的测试平板电脑.
从Google Play购买时,您可以选择用于购买的帐户.我想在我正在编写的应用程序中添加应用内结算功能,并且我想确保每个Google ID都可以在任何设备上购买,这意味着我需要知道首先使用哪个ID进行购买.这意味着我需要执行以下操作之一:
文档似乎是在假设只有一个购买者在一个设备上活动的情况下编写的.是否有可能做到这一点?
我有一个SyncAdapter用于我的应用程序,以及AccountManager将我的应用程序帐户添加到Android帐户管理器.我向帐户管理器添加帐户的代码如下所示:
Bundle data = new Bundle(5);
data.putString(_PEOPLE_ID, people_id);
data.putString(_FIRST_NAME, first_name);
data.putString(_LAST_NAME, last_name);
data.putString(_PLAN, plan);
data.putString(_BIRTHDAY, birthday);
Account account = new Account(username, _ACCOUNT_TYPE);
try {
boolean created;
created = _account_manager.addAccountExplicitly(account,
_cryptography.encrypt(_SEED, password), data);
response.accountCreated(created);
_account_manager.setAuthToken(account, _TOKEN_TYPE, session_token);
_model.updateActiveAccount(people_id, username, password);
SharedPreferences.Editor settings = _settings.edit();
settings.putString(_ACCOUNT_TYPE, account.name);
settings.putString(_TOKEN_TYPE, session_token);
settings.commit();
// Tells the content provider that it can sync this account
ContentResolver.setIsSyncable(account, AUTHORITY, 1);
final Bundle extras = new Bundle(1);
extras.putBoolean(SYNC_EXTRAS_INITIALIZE, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, extras, 900);
} catch …Run Code Online (Sandbox Code Playgroud) 我想使用android AccountManager来同步我的webservice和应用程序(联系人和calander的标准同步)但是,AccountManager似乎只存储用户名和密码.我的Web服务需要三个凭据:用户名,密码和帐户.存储第三条信息的最佳做法是什么?
我正在创建一个需要用户创建帐户的应用.(像Facebook或Twitter一样需要你.)
但是,因为它是一个Android应用程序,我应该/可以让他们使用AccountManager或其他服务使用他们的Google帐户登录吗?如果他们只能登录自己的Google帐户并将其设置和其他选项保存到该帐户,那将非常有用.
总结的主要问题:
我正在使用一个使用AccountManager存储帐户和凭据的Android应用程序.我遇到的一个问题是,即使我将一堆String值传递给AccountManager的addAccountExplicitly数据包.
我已经检查以确保捆绑包不是空的,并且在添加帐户之前它包含值.大部分时间都是这种情况,但每当我查询这些值时,我偶尔会得到null.
在我刚删除帐户并重新添加后,空返回值更常见.
我在OnAccountsUpdateListener实现的onAccountsUpdated方法中进行查询,因此应该添加该帐户并且很好,对吧?
谢谢你的帮助
AuthenticatorActivity
// in the AuthenticatorActivity
Bundle userData = new Bundle();
userData.put (k1, v1);
userData.put (k2, v2);
userData.put (k3, v3);
userData.put (k4, v4);
userData.put (k1, v1);
Account a = new Account ("acc name", "com.account.type");
AccountManager am = AccountManager.get(this);
OnAccountsUpdateListener listener = new OnAccountsUpdateListener() {
@Override
public void onAccountsUpdated(Account[] accounts) {
Account mine = findAccount(accounts, account); // match account name
notifySignedIn(mine); // tell …Run Code Online (Sandbox Code Playgroud) 我有一个与使用AccountManager和Sync的Web服务相关联的应用,允许用户通过应用登录到他们的帐户并同步他们的数据(这是自定义数据,而不是Google帐户使用的联系人或其他任何内容).AFAIK,我正按照我应该的方式做所有事情.当用户通过我们的API登录时,我将他们的帐户保存到Android AccountManager:
AccountManager am = AccountManager.get(context);
m.addAccountExplicitly(new Account(username, ACCOUNT_TYPE), account_id, user_data);
Run Code Online (Sandbox Code Playgroud)
我已将ACCOUNT_TYPE定义为应用程序的包名称,这应足以将其与任何其他帐户类型区分开来.
添加帐户后,我会将其设置为自动同步:
ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_FREQUENCY_SECONDS);
Run Code Online (Sandbox Code Playgroud)
我已将SYNC_FREQUENCY_SECONDS定义为86400(即1天).
同样,如果用户注销,我只需从AccountManager中检索他们的帐户并调用removeAccount()将其删除.很好,很简单.
同步是通过我自己的代码执行的,因为它是正在同步的所有自定义数据,并且一切正常.然而,令我发疯的是,无论何时我使用此代码添加或删除帐户(我自己的类型),它都会立即触发设备上所有Google帐户的同步.这意味着,在同步我的数据之前,首先必须同步所有电子邮件,日历数据,联系人,Google Play杂志,Google+数据和图片等等.这可能需要几分钟,在此期间我的应用只是耐心等待轮到同步数据.这非常令人沮丧,我的用户很难理解为什么一旦他们登录就需要这么长时间来同步他们的数据(更不用说当它同步那么多数据时,手机有慢慢的趋势)几乎到了无反应的程度).
我在这里做错了吗?我的代码中是否存在无意中告诉Android的内容,"嘿,现在就去同步所有Google数据!"?或者,它是Google必须忍受的Google帐户/同步框架中固有的东西?
我正在尝试显示与应用程序关联的电话号码的应用程序图标.
我试着按照这个链接但是太难了.
有没有这个或任何简单的方法来解决这个问题?
例如,我们可以说联系人存在于电话地址簿中的whatsapp,facebook,google,...中.
同样,我想在这些信使应用程序旁边显示我的应用程序图标.

accountmanager ×10
android ×10
account ×2
auth-token ×1
contacts ×1
java ×1
openid ×1
sync ×1
webserver ×1