Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多种身份验证令牌类型的Android AccountManager_Android_Accountmanager_Auth Token - Fatal编程技术网

具有多种身份验证令牌类型的Android AccountManager

具有多种身份验证令牌类型的Android AccountManager,android,accountmanager,auth-token,Android,Accountmanager,Auth Token,我按照syncadapter示例创建了AccountManager和同步适配器。我希望在同一个帐户下有两种不同类型的AuthToken用于不同的目的(访问不同的服务-同步适配器使用其中一种) 事情是这样的,但我发现当我(通过getauthtoken)对一种authtoken类型进行身份验证时,保存它的过程会替换另一种authtoken类型。我在前后查看了accounts.db文件。在调用获取authtoken类型“B”的令牌之前,accounts.db中的authtoken表具有authtoke

我按照syncadapter示例创建了AccountManager和同步适配器。我希望在同一个帐户下有两种不同类型的AuthToken用于不同的目的(访问不同的服务-同步适配器使用其中一种)

事情是这样的,但我发现当我(通过getauthtoken)对一种authtoken类型进行身份验证时,保存它的过程会替换另一种authtoken类型。我在前后查看了accounts.db文件。在调用获取authtoken类型“B”的令牌之前,accounts.db中的authtoken表具有authtoken类型“a”的authtoken。调用后,accounts.db中的authtoken表具有类型为“B”的authtoken,但“A”已被删除。无论顺序如何,accountmanager子系统似乎从来不会为我的帐户类型为每个帐户存储超过一个authtoken


当您有多个authtoken类型时,是否需要在某个xml文件中配置一些特殊的内容?

我发现了我的问题。如果您在成功的身份验证/登录后调用AccountManager.setPassword(),它将使您的帐户的所有身份验证令牌无效。这是一个未记录的副作用,在某些情况下,这是有意义的。不加区分地将密码设置为相同值的软件会意外地使其身份验证令牌无效

当您保存令牌时,您确定要将其保存为特定类型吗?我最初认为可能是这样,但我没有找到指定类型的方法。使用从AccountAuthenticatorActivity继承的setAccountAuthenticatorResult()方法设置令牌。extras捆绑包中的值未指定类型-该类型是使用getAuthToken()传递的。AccountManager中的任何键(如KEY\u ACCOUNT\u NAME)都不会引用authtoken类型,除非我缺少它。但是我看到accounts.db中的authtoken类型设置正确-只是删除了另一个authtoken类型记录。在extras bundle中,您可以指定类型,将AccountManager.KEY\u ACCOUNT\u type作为KEY传递,并将帐户类型的字符串表示形式作为值。是,我的帐户类型由返回包中的KEY\u account\u类型指定(如示例syncadapter中的那样)。帐户类型与authtoken类型不同。您是对的。调用setAuthToken时,是否提供了auth令牌类型?