针对lh2范围的Android AccountManager getAuthToken对于Lollipop不回拨

问题描述:

对于Picasa Web Service,调用具有authTokenType =“lh2”的AccountManager.getAuthToken()现在不会在Android 5.x上返回;带有“lh2”的getAuthToken在Android 4.4.x和6.x中仍然可以正常工作,而不是5.x.在2016年8月至9月的某个时候,这对棒棒糖来说都是正常工作,在那段时间里代码或应用没有任何变化。针对lh2范围的Android AccountManager getAuthToken对于Lollipop不回拨

任何其他人在Lollipop设备上遇到“lh2”的getAuthToken问题?是否有另一种方法让帐户授权令牌传递给PicasaWebService?

下面是相关代码getAuthToken:

//... 

String accountName = "[email protected]" 
Account selectedAccount = null; 
AccountManager accountManager = (AccountManager)activity.getSystemService(Context.ACCOUNT_SERVICE); 
Account[] list = accountManager.getAccounts(); 
for (android.accounts.Account a:list) { 
    if (a.name.equals(accountName)) { 
     selectedAccount = a; 
     break; 
    } 
} 

accountManager.invalidateAuthToken("com.google", null); 

AccountManagerFuture<Bundle> tokenFuture = getAccountManager().getAuthToken(
    selectedAccount, 
    "lh2", 
    null, 
    activity, 
    new OnTokenAcquired(), 
    new Handler(new OnTokenError())); 

//... 

private class OnTokenAcquired implements AccountManagerCallback<Bundle> { 
    @Override 
    public void run(AccountManagerFuture<Bundle> result) { 
     try { 
      Bundle b = result.getResult(); 
      if (b.containsKey(AccountManager.KEY_INTENT)) { 
       Intent intent = b.getParcelable(AccountManager.KEY_INTENT); 
       int flags = intent.getFlags(); 
       flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK; 
       intent.setFlags(flags); 
       activity.startActivityForResult(intent, REQUEST_AUTHENTICATE); 
       return; 
      } 
      if (b.containsKey(AccountManager.KEY_AUTHTOKEN)) { 
       String authToken = b.getString(AccountManager.KEY_AUTHTOKEN); 

       // set authtoken to Picasa Web Service 
       _picasaService = new PicasawebService("myApp"); 
       _picasaService.setUserToken(authToken); 

       return; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

private class OnTokenError implements Handler.Callback { 
    @Override 
    public boolean handleMessage(Message msg) { 
     Log.e("onError","ERROR"); 

     return false; 
    } 
} 

//... 

谢谢!

似乎authTokenType应该是在前缀为“oauth2:”的https://developers.google.com/oauthplayground/上找到的“OAuth范围”。

Picasa网络,这是https://picasaweb.google.com/data/


accountManager.getAuthToken(account, "oauth2:https://picasaweb.google.com/data/", 
       options, false, new GetAuthTokenCallback(), null);