2013-04-11 55 views
4

我一直在尋找,但找不到任何特定信息。在Facebook Android SDK中刷新令牌權限

根據最新的SDK 3.0文檔 http://developers.facebook.com/docs/reference/android/3.0/AccessToken#getPermissions

由AccessToken.getPermissions()「可以被返回的權限的列表過時如果權限已被自的accessToken對象被創建的時間添加或移除「

我的問題是:
有沒有什麼辦法來索要刷新權限的名單,從而使令牌可以反映被Facebook保留的權限了最新名單?

回答

0

找到了我需要的解決方案:

,而不是更新我的道理,我只是做一個FQL查詢檢索我想了解

權限的遠程(最多最新的)狀態

下面的代碼查詢關於發佈權限(官方稱爲「publish_actions」):

public void asyncQueryIfHasPublishPermissions() { 
    String fqlQuery = "SELECT publish_actions FROM permissions WHERE uid = me()"; 
     Bundle params = new Bundle(); 
     params.putString("q", fqlQuery); 
     Session session = Session.getActiveSession(); 
     Request request = new Request(session, 
      "/fql",       
      params,       
      HttpMethod.GET,     
      new Request.Callback(){   
       public void onCompleted(Response response) { 
        JSONObject graphResponse = response.getGraphObject().getInnerJSONObject(); 
        boolean publishPermissions = false; 
        try { 
         if (graphResponse.getJSONArray("data").getJSONObject(0).getInt("publish_actions")==1) { 
          publishPermissions = true; 
         } 
        } catch (JSONException e) { 
         Log.e("FacebookIntegration", "JSON error "+ e.getMessage()); 
        } 
        FacebookRequestError error = response.getError(); 
        if (error != null) { 
         Log.e("FacebookIntegration", "FacebookRequestError "+ error.getErrorMessage()); 
        } 
        Log.i("FacebookIntegration", "asyncQueryIfHasPublishPermissions response: "+publishPermissions); 
       }     
     }); 
     Request.executeBatchAsync(request); 
} 
+1

但是我們如何使Session對象反映更新的權限? – JRun 2013-06-30 10:22:42

0

由丹尼爾·B中給出的解決方案看起來有點嚇人,所以我決定寫我自己。

這不是實際的解決方案,因爲它不會升級存儲在Session對象中的權限,但它允許我們檢查給予我們的權限。

Request.executeGraphPathRequestAsync(facebookSession, "me/permissions", new Request.Callback() { 

    @Override 
    public void onCompleted(Response response) { 
     GraphObject graphObject; 

     List<String> permissionsToGet = new ArrayList<String>(); 
     try { 
     if (response != null && (graphObject = response.getGraphObject()) != null){ 
      JSONObject permissions = (JSONObject) ((JSONArray) graphObject.getProperty("data")).get(0); 
      for (String permission : facebookPermissions){ 
       if (!permissions.has(permission) || permissions.getInt(permission) != 1){ 
        permissionsToGet.add(permission); 
       } 
      } 

      if (!permissionsToGet.isEmpty()){ 
       //get new permissions 
      } else { 
       //all needed permissions are available 
      } 
     } 
     } catch (Exception ex){ 
      //handle error 
     } 

    } 
});