2013-01-10 5 views
6

Ich versuche, Benutzern eine Option zum Festlegen/Widerruf der Veröffentlichungsberechtigung über Kontrollkästchen (Facebook SDK für Android) zu geben. Der Code ist unten angegeben. Alles funktioniert gut, außer dass nach dem Entziehen der Code zum Überprüfen der Veröffentlichung von Berechtigungen kläglich scheitert.Aktualisieren der Sitzung nach dem Entziehen einzelner Berechtigungen

Ich verstehe, dass Sitzung hat keine Möglichkeit zu wissen, ob der Benutzer Berechtigungen nach dem Login widerrufen hat. Was ist der richtige Weg, um mit dieser Art von Situation umzugehen? Muss ich die verfügbaren Berechtigungen manuell abfragen oder gibt es eine Möglichkeit, die Sitzung nahtlos mit den grundlegenden Berechtigungen neu zu erstellen?

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

ich auch bin eine Antwort warten. Wenn der Benutzer die gesamte Anwendung aus seinem Online-Konto löscht, erkennen Sie diese und melden sich ab. Aber wenn der Benutzer nur eine Erlaubnis entfernt, aktualisiert die Sitzung seine Erlaubnis nicht. – StErMi

Antwort

1

Nun landete ich bei jedem Benutzerberechtigungen anfordert bis ich eine solche Prüfung erforderlich, etwas in dieser Richtung:

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

[Von OP verschoben] (http://stackoverflow.com/revisions/14249980/4) –

Verwandte Themen