Glassware auth:android.accounts.OperationCanceledException“不允许共享凭据:取消”。

我们正在尝试实施GDK玻璃器皿authentication; 已经将我们的testing版APK上传到Google Glass团队,并成功实施了我们的MyGlasslogin页面。 我们现在尝试通过以下列出的步骤访问令牌: https : //developers.google.com/glass/develop/gdk/authentication#retrieving_accounts_on_glass

然而最后一步, String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN); 导致以下例外:

 09-22 18:07:24.126: I/AccountManagerService(519): Sharing credentials is not allowed: canceling. 09-22 18:07:24.313: W/System.err(5822): android.accounts.OperationCanceledException 09-22 18:07:24.313: W/System.err(5822): at android.accounts.AccountManager$AmsTask.internalGetResult(AccountManager.java:1503) 09-22 18:07:24.313: W/System.err(5822): at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1531) 09-22 18:07:24.313: W/System.err(5822): at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1452) 09-22 18:07:24.313: W/System.err(5822): at com.mycom.app.MainActivity$5.run(MainActivity.java:234) 09-22 18:07:24.313: W/System.err(5822): at android.accounts.AccountManager$11.run(AccountManager.java:1427) 09-22 18:07:24.313: W/System.err(5822): at android.os.Handler.handleCallback(Handler.java:733) 09-22 18:07:24.313: W/System.err(5822): at android.os.Handler.dispatchMessage(Handler.java:95) 09-22 18:07:24.313: W/System.err(5822): at android.os.Looper.loop(Looper.java:149) 09-22 18:07:24.313: W/System.err(5822): at android.app.ActivityThread.main(ActivityThread.java:5061) 09-22 18:07:24.313: W/System.err(5822): at java.lang.reflect.Method.invokeNative(Native Method) 09-22 18:07:24.313: W/System.err(5822): at java.lang.reflect.Method.invoke(Method.java:515) 09-22 18:07:24.313: W/System.err(5822): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 09-22 18:07:24.313: W/System.err(5822): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 09-22 18:07:24.313: W/System.err(5822): at dalvik.system.NativeStart.main(Native Method) 

我们试图通过Mirror API推送的请求是这样形成的(并返回一个OK状态码):

 POST https://www.googleapis.com/mirror/v1/accounts/google_user_token/com.ourcom.app.session/ourapp_username BODY {"authTokens":[{"type":"com.ourcom.app.session","authToken":"****************"}]} HEADERS {"Authorization":"Bearer ya29.iAAf********","Content-Type":"application/json;charset=utf-8"} 

这是我们当地的玻璃代码:

 AccountManager accountManager = AccountManager.get(this); // Use your Glassware's account type. Account[] accounts = accountManager.getAccountsByType("com.ourcom.app.session"); // Your auth token type. final String AUTH_TOKEN_TYPE = "com.ourcom.app.session"; if (accounts.length > 0) { accountManager.getAuthToken(accounts[0], AUTH_TOKEN_TYPE, null, this, new AccountManagerCallback<Bundle>() { @Override public void run(AccountManagerFuture<Bundle> future) { try { String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN); //do something with token }); } catch (Exception e) { //handle exception //this is where we get our OperationCancelledException e.printStackTrace(); } } }, null); } else { //handle not authed state } 

什么可能导致这种错误? 是否在镜像POST URL的末尾的用户名应该匹配某些特定的或我们可以自由使用我们自己的东西?

Solutions Collecting From Web of "Glassware auth:android.accounts.OperationCanceledException“不允许共享凭据:取消”。"

有几件事要检查:

  1. 您的应用程序的软件包名称是否与您提交Glassware时提供的软件包名称完全匹配?
  2. 您是否已经通过MyGlass至less安装了一次您提交的APK,而不是始终用adb将其加载? 确保你卸载你的APK,然后通过在MyGlass中打开它来安装它,以便正确设置权限; 从这一点开始,您可以通过将adbreplaceAPK来继续开发。