标签: accountmanager

客户经理集成 - Android 与 iOS

我是 Android 开发人员,但我需要回答一些有关其他平台的可能性的问题,我想知道 iOS 提供了哪些与http://developer.android.com/reference/android/accounts/AccountManager.html相当的功能。我找到了https://developer.apple.com/library/ios/documentation/Accounts/Reference/ACAccountClassRef/Reference/Reference.html,但我无法理解全部可能性。

问题:

  • iOS 中的账户管理器如何使用?
  • 在 Android 中可以共享服务的令牌,iOS 是否具有相同的功能
  • 是否有集中式 API 或者已解决 app-2-app 问题?
  • 是否有任何与此相关的可用安全概念(限制某些应用程序对令牌的访问等)

很高兴收到简短而快速的回复!// 乔纳斯

iphone android accountmanager ios

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

Android、AccountManager 和 OAuth

我确定这是基本的,我错过了一些东西。我已经阅读了关于 SO 的其他答案,我已经谷歌搜索,我已经阅读了资源,但我无法理解我需要做什么。

我试图弄清楚如何编写一个连接到 Twitch 的 API 的应用程序,特别是如何使用 Twitch 的 API 进行身份验证。他们的文档在这里:https : //github.com/justintv/Twitch-API/blob/master/authentication.md

我创建了一个应用程序并存储了我的密钥。

现在是我希望我的用户单击一个按钮在他们的网站上启动身份验证的部分。据我所知,我是通过使用 AccountManager 来做到这一点的。除了......我不知道我应该做什么。

这是我在网上找到的摘录:

AccountManager am = AccountManager.get(this);
        Bundle options = new Bundle();

        am.getAuthToken(
                myAccount_,                     // Account retrieved using getAccountsByType()
                "Manage your tasks",            // Auth scope
                options,                        // Authenticator-specific options
                this,                           // Your activity
                new OnTokenAcquired(),          // Callback called when a token is successfully acquired
                new Handler(new OnError()));    // Callback called if an error occurs
Run Code Online (Sandbox Code Playgroud)

根据 twitch 的文档,我想将用户发送到:

https://api.twitch.tv/kraken/oauth2/authorize
    ?response_type=code
    &client_id=[your client ID]
    &redirect_uri=[your …
Run Code Online (Sandbox Code Playgroud)

java api android oauth accountmanager

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

使用Android AccountManager获取gdata的authtoken

所以我试图同步到谷歌文档,而不必询问用户他的凭据.我使用此代码获取auth-token:

AccountManager mgr = AccountManager.get(activity);
authToken = mgr.blockingGetAuthToken(account, DocsService.DOCS_SERVICE, true);
Run Code Online (Sandbox Code Playgroud)

这将返回一个看起来格式良好的身份验证令牌.所以在我的DocsService上运行:

service.setAuthSubToken(authToken);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用API​​时,我只获得了AuthenticationException.有关如何处理此错误的任何想法?

编辑:我确实拥有USE_CREDENTIALS权限.

android gdata-api gdata accountmanager gdata-java-client

3
推荐指数
1
解决办法
6022
查看次数

为什么AccountManager管理的帐户会自动删除?

我的小应用程序在AccountManager中创建一个帐户.但是,如果我将应用程序从内部存储移动到SD卡,如果我卸载SD卡或重新启动计算机,AccountManagerService会自动删除该帐户.

有没有人对此有任何想法?这是否意味着我们无法将应用程序移动到SD卡,还是因为我在配置xml中缺少一些配置属性?

D/AccountManagerService(245):删除帐户XXX,因为类型com.XXX不再具有注册的身份验证器D/ContactsProvider(945):删除已删除帐户的数据帐户{name = XXXX,type = com.XXX}

android accountmanager

3
推荐指数
1
解决办法
1715
查看次数

自动添加帐户

我的应用程序需要从服务器同步一些数据.我添加了必要的类(类似于SampleSyncAdapter),现在我可以通过"设置/同步和帐户"添加帐户.但是我希望在安装应用程序之后已经添加了我的帐户和工作同步(我不希望用户在设置中进行任何手动更改).这该怎么做?

account android synchronization accountmanager

3
推荐指数
1
解决办法
9491
查看次数

AccountManager:invalidateAuthToken不会使令牌无效

我正试图从存储在Android设备中的Google帐户中获取一个全新的令牌,但我得到的所有令牌都是我在过去几天一直在缓存的旧令牌.似乎它被缓存在手机的某个地方,甚至互联网请求都没有被发送(我在没有互联网连接的情况下在应用程序中进行了测试,并返回相同的令牌).

invalidateAuthToken在使用getResultfrom 之前我使用了这个方法AccountManagerFuture.请看一下:

public String updateToken(Activity activity) throws Exception {             
    AccountManager am = AccountManager.get(activity);
    Account[] accounts = am.getAccountsByType("com.google");

    if (accounts == null || 
        accounts.length == 0 || 
        "".equals(accounts[0].name.trim())) 
    {
        throw new Exception("Não há contas Google configuradas no smartphone.");
    } 
    else if (!"crsilva@gmail.com".equals(accounts[0].name.trim()) && 
             !"cristiano.bezerra@sulamerica.com.br".equals(accounts[0].name.trim()) &&
             !"tholiver@gmail.com".equals(accounts[0].name.trim())) 
    {
        Log.w("Util.updateToken","conta obtida: " + accounts[0].name);
        throw new Exception("Conta Google não autorizada.");
    }
    Log.w("Util.updateToken","conta obtida: " + accounts[0].name);
    am.invalidateAuthToken("com.google", null);
    Log.w("Util.updateToken","Passou do invalidateAuthToken");
    AccountManagerFuture<Bundle> future = 
        am.getAuthToken(accounts[0], "ah", null, …
Run Code Online (Sandbox Code Playgroud)

java accountmanager access-token

3
推荐指数
2
解决办法
6170
查看次数

AccountManager:如何让用户使用对话框选择帐户

在AccountManager教程中记住您的用户,建议:

如果Account数组中有多个,则应显示一个对话框,要求用户选择一个.

最好的方法是什么?我有一个解决方案,但如果社区中有其他好的例子,那么这似乎是那种可以共享并且容易被其他人重用的样板代码.

android accountmanager

3
推荐指数
2
解决办法
6100
查看次数

使用自定义AccountAuthenticator与多个应用程序

我有两个独立的Android项目,一个是用于管理设备中用户帐户的AbstractAccountAuthenticator的实现,另一个是应该从AccountAuthenticator获取令牌并使用它的推送应用程序.

AbstractAccountAuthenticator的实现正在工作,并在"设置"菜单中的"帐户和同步"部分调用时添加帐户,但是当我从推送应用程序调用addAccount()时,我得到"权限被拒绝:checkComponentPermission()"和应用程序在那里死

我不能提供很多源代码,因为我不能让它公开,但我向你保证他们以"独立"的方式工作.

我搜索了从不同的应用程序正确使用AccountManager的示例,但没有找到.freenode也没有运气.

我发现从AccountAuthenticator中启动活动(使用Intent.FLAG_NEW_TASK和context.startActivity(intent))可以解决问题,但这意味着addAccount()不会返回到AccountManager,我认为不会与开发指南保持一致,因为它打破了AccountManager使用的流程.另一种方法是导出在请求用户凭据时使用的Acitivity.但我认为这可能是一个安全问题,因为它应该由AccountManager调用,而不是外部调用.

感谢您对此有任何想法.

PS:

  • 所有权限都已正确使用,除非我需要一个我不知道可以跨应用程序工作的特殊权限.

  • 我会问我是否可以使用代码片段在这里显示我关注的行.

  • 第一个问题发布在这里,我希望我没有违反(m)这里的任何规则(我在这里和谷歌上搜索过,但我问过,因为我发现没有任何用处.)

  • 谢谢.


深入Google的登录服务并绊倒了Settings类之后,我发现了我认为应该是解决方案:

  • 不要导出东西,我一直认为调用你的实现,服务或活动,绕过AccountManager是一个安全问题.

  • 不要使用Intent.FLAG_NEW_TASKstartActivity()执行AbstractAccountAuthenticator,因为它可能会带你出乎意料的行为.

实现这一点的方法非常简单,实际上:

Intent i = new Intent( Settings.ACTION_ADD_ACCOUNT );
i.putExtra( Settings.EXTRA_AUTHORITIES, new String[] { "com.exaple.yourauth" } );
contextVar.startActivity( i );
Run Code Online (Sandbox Code Playgroud)

这样,您要求设置提升新帐户,总线的可能权限列表,因为您要添加EXTRA_AUTHORITIES参数,一个包含要显示的权限的字符串,它会将选项限制为您想要的选项.如果只有一个与您的额外匹配,则以适当的方式调用客户经理和登录活动.

我真的希望这可以帮助周围的任何人.

java android accountmanager

3
推荐指数
1
解决办法
1299
查看次数

Android Service Exchange总是崩溃

当我安装或卸载使用同步服务的应用程序时,我总是遇到崩溃,比如Facebook,whatsup等.

"不幸的是,Exchange服务已停止."

我不知道为什么,但它只是发生在一些设备上,在我的情况下,所有的都是Android 4.4.2.首先我认为这是我的应用程序的错,但是一旦我卸载我的应用程序并且问题继续发生在其他应用程序中,它就没有意义了.

你知道些什么吗?

谢谢.

02-07 14:31:49.864    3015-3015/? E/ActivityThread? Failed to find provider info for com.google.android.email.provider
02-07 14:31:49.864    3015-3015/? E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.google.android.exchange, PID: 3015
java.lang.RuntimeException: Unable to create application com.android.exchange.Exchange: java.lang.IllegalArgumentException: Unknown URI content://com.google.android.email.provider
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4347)
        at android.app.ActivityThread.access$1500(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IllegalArgumentException: Unknown URI content://com.google.android.email.provider
        at android.content.ContentResolver.call(ContentResolver.java:1352)
        at com.android.exchange.Exchange.onCreate(Exchange.java:34)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344)
        at android.app.ActivityThread.access$1500(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) …
Run Code Online (Sandbox Code Playgroud)

crash service android sync accountmanager

3
推荐指数
1
解决办法
1万
查看次数

addAccount显式成功,但未在"设置/帐户"中显示任何帐户

我已经编写了一些代码来在设置中添加我的自定义帐户点击添加帐户后,我可以看到我的自定义帐户,点击时我会显示登录表单.在里面我打电话给下面的代码

if (mAccountManager.addAccountExplicitly(account, password, userData)) {
        // worked
        System.out.println("Account added");
    } else {
        // guess not
        System.out.println("NOT DONE");
    }
Run Code Online (Sandbox Code Playgroud)

第一次显示"添加帐户",但无法在"设置/帐户"中看到任何内容.任何人都可以帮助我.

这是完整的代码

Log.d("AuthenticatorActivity", "onCreate");

    mAccountManager = AccountManager.get(getBaseContext());

    String accountName = getIntent().getStringExtra(ARG_ACCOUNT_NAME);
    mAuthTokenType = getIntent().getStringExtra(ARG_AUTH_TYPE);

    if (mAuthTokenType == null)
        mAuthTokenType = AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS;

    accountName= "test55";

    findAccount(accountName);

    System.out.println(mAuthTokenType + "accountName : " + accountName);

    Bundle data = new Bundle();
    data.putString(AccountManager.KEY_ACCOUNT_NAME, accountName);
    data.putString(AccountManager.KEY_ACCOUNT_TYPE, mAuthTokenType);
    data.putString(AccountManager.KEY_AUTHTOKEN, authtoken);
    data.putString(PARAM_USER_PASS, password);

    Bundle userData = new Bundle();
    userData.putString("userObjectId", "2");
    data.putBundle(AccountManager.KEY_USERDATA, userData);

    final Intent res = new Intent();
    res.putExtras(data);

    final …
Run Code Online (Sandbox Code Playgroud)

android accountmanager

3
推荐指数
1
解决办法
893
查看次数