2013-01-10 10 views
6

Próbuję dać użytkownikom opcję ustawiania/cofania zgody na publikowanie za pomocą pola wyboru (pakiet SDK dla systemu Android na Androida). Kod znajduje się poniżej. Wszystko działa dobrze, z tym że po unieważnieniu kodu odpowiedzialnego za sprawdzanie uprawnień do publikowania nie udaje się.Aktualizowanie sesji po unieważnieniu indywidualnych uprawnień

Rozumiem, że Sesja nie ma możliwości sprawdzenia, czy użytkownik odwołał jakiekolwiek uprawnienia po zalogowaniu. Jaki jest właściwy sposób obsługi tego rodzaju sytuacji? Czy muszę ręcznie wyszukiwać dostępne uprawnienia, czy istnieje możliwość bezproblemowego odtworzenia sesji z podstawowymi uprawnieniami?

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    ... 
    publishCheckbox = (CheckBox) view.findViewById(R.id.publishCheckbox); 
     publishCheckbox.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       CheckBox chb = (CheckBox) v; 
       if (chb.isChecked() && checkForPublishPermission() == false){ 
        requestPublishPermissions();        
       } 
       else{ 
        removePublishPermissions(); 
       } 

      } 

     }); 
    ... 
} 

private void requestPublishPermissions() { 
    Session session = Session.getActiveSession(); 
    if (session!= null && session.isOpened()){ 
     Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS).setRequestCode(REAUTH_ACTIVITY_CODE); 
     newPermissionsRequest.setCallback(callback); 
     session.requestNewPublishPermissions(newPermissionsRequest); 
    }    
} 

private void removePublishPermissions() {  
    Request r = new Request(Session.getActiveSession(), PUBLISH_ACTIONS_PERMISSION_PATH, null, HttpMethod.DELETE); 
    r.setCallback(new Request.Callback() { 

     @Override 
     public void onCompleted(Response response) { 
      publishCheckbox.setEnabled(true);        
     } 
    }); 
    r.executeAsync(); 
    publishCheckbox.setEnabled(false); 
} 

private boolean checkForPublishPermission(){ 
    boolean result = false; 

    Session session = Session.getActiveSession(); 

    if (session == null || !session.isOpened()) { 
     result = false; 
    } 
    else{ 
     List<String> permissions = session.getPermissions(); 
     if (permissions.containsAll(PERMISSIONS)) { 
      result = true; 
     } 
    }  

    return(result); 
} 

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
    if (state.isOpened()) { 
     ... 
     publishCheckbox.setChecked(checkForPublishPermission()); 
     ... 
    } else if (state.isClosed()) {   
     ...        
    }  
} 
+0

Jestem również czeka na odpowiedź. Jeśli użytkownik usunie całą aplikację ze swojego konta online, Session ją rozpozna i wylogujesz się. Ale jeśli użytkownik po prostu usunie zezwolenie, sesja nie zaktualizuje jego pozwolenia. – StErMi

Odpowiedz

1

Dobrze skończyło się zainteresowanie uprawnień użytkownika za każdym razem, gdy potrzebny taki czek, coś wzdłuż tych linii:

private void checkForPublishPermission(){ 
    mPublishCheckbox.setEnabled(false); 
    Request r = new Request(Session.getActiveSession(), PUBLISH_ACTIONS_PERMISSION_PATH, null, HttpMethod.GET); 
    r.setCallback(new Request.Callback() { 

     @Override 
     public void onCompleted(Response response) { 
      if (response != null) { 
       GraphObject o = response.getGraphObject();    
        if (o != null){ 
         JSONArray data = o.getInnerJSONObject().optJSONArray("data");      
         mCanPublish = (data.optJSONObject(0).has("publish_actions"))?true:false;        
         mPublishCheckbox.setChecked(mCanPublish);              
        } 
      } 
      mPublishCheckbox.setEnabled(true); 
     } 
    }); 
    r.executeAsync(); 
} 
+0

[przeniesiono z OP] (http://stackoverflow.com/revisions/14249980/4) –

Powiązane problemy