2013-01-10 5 views
6

私は、チェックボックス(Android用Facebook SDK)を使用して公開許可を設定/取り消すオプションをユーザに与えようとしています。コードは以下のとおりです。パブリッシングのパーミッションをチェックする責任を負うコードを取り消した後、悲惨なことに失敗した場合を除き、すべて正常に動作します。個別の権限を取り消した後にセッションを更新する

セッションでは、ログイン後にユーザーが権限を取り消したかどうかを知る方法がないことを理解しています。このような状況を処理する正しい方法は何ですか?私は利用可能なアクセス権を手動で照会する必要がありますか、または基本的なアクセス権でセッションをシームレスに再作成する方法はありますか?

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

を私も答えを待っています。ユーザーが自分のオンラインアカウントのセッションからアプリケーション全体を削除すると、それを認識してログアウトします。しかし、ユーザーが許可を取り除くだけであれば、セッションは彼の許可を更新しません。 – StErMi

答えて

1

まあ、私は、これらの線に沿って何か、このようなチェックを必要とするたびに、ユーザーのアクセス権を要求することになった:

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

[OPから移動](http://stackoverflow.com/revisions/14249980/4) –

関連する問題