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

问题描述:

我们正在尝试实施GDK玻璃器皿认证;已将我们的Beta APK上传到Google Glass团队,并成功实施了我们的MyGlass登录页面。我们现在正在尝试通过以下列出的步骤访问令牌:https://developers.google.com/glass/develop/gdk/authentication#retrieving_accounts_on_glassGlassware auth:android.accounts.OperationCanceledException“不允许共享凭据:取消。”

但是最后一步,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) 

我们试图通过镜子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的结尾处的用户名是否应该匹配某些特定的内容,或者我们可以*使用我们自己的内容?

几件事情要检查:

  1. 您的应用程序匹配的包名完全包名时,您提交玻璃器皿提供?
  2. 您是否已通过MyGlass至少安装了一次您提交的APK,而不是始终将其与adb侧装?确保您卸载APK,然后在MyGlass中将其打开以安装它,以便正确设置权限;从这一点开始,您可以通过adb更换APK来继续开发。
+0

感谢您的回复托尼:1.是的,虽然我可能有点困惑自己,所以只是仔细检查:镜像网址是.../com.mycom.myapp.session/... ,令牌类型是com.mycom.myapp.session,账户类型是com.mycom.myapp.session,但捆绑ID是com.mycom.myapp。这一切是否正确? 2.是的,我遵循以下步骤:1.工厂重置玻璃,2.通过打开应用程序在myglass上安装,3.通过ADB安装新版本(使用相同的密钥库签名) - myglass版本和新版本抛出上述异常。 – Peter 2014-09-25 07:44:36

+0

@彼得..你能解决这个问题吗?我也在这里得到相同的例外。 – Bharath 2015-01-14 09:08:39

+1

@TaruniNeema我们在几个月前就向Google提出了一个问题,并且自此以后一直与支持部门进行半定期联系。他们显然还在研究它,这让我觉得这是一个错误。首先,我会尝试以上所有建议,但是我肯定也会在此回复(如果?)我们从G获得修复。 – Peter 2015-01-15 10:00:43