2012-03-13 2 views
3

사용자가 권한을 취소 한 후 사용자를 다시 권한 부여하는 문제에 당황합니다. 사용자가 응용 프로그램의 권한을 취소하면 Facebook에 게시하는 것과 같은 작업을 시도 할 때 오류 대화 상자가 표시됩니다. 그러나 authorize()은 호출되지 않습니다. 내 코드Android - 사용자가 권한을 취소 할 때 Facebook 오류로 권한 부여가 호출되지 않습니다.

   public void doAuthentication() 
      { 
        // here all your FB authentication related stuff. 

       mPrefs = getPreferences(MODE_PRIVATE); 
       String access_token = mPrefs.getString("access_token", null); 
       long expires = mPrefs.getLong("access_expires", 0); 
       if(access_token != null) { 
        facebook.setAccessToken(access_token); 
       } 
       if(expires != 0) { 
        facebook.setAccessExpires(expires); 
       } 

       /* 
       * Only call authorize if the access_token has expired. 
       */ 
       if(!facebook.isSessionValid()) { 

       facebook.authorize(Cats.this, new String[] { "publish_stream", "read_stream", "publish_checkins", "offline_access"}, new DialogListener() { 
        @Override 
        public void onComplete(Bundle values) 
        { 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", facebook.getAccessToken()); 
         editor.putLong("access_expires", facebook.getAccessExpires()); 
         editor.commit(); 
        } 

        @Override 
        public void onFacebookError(FacebookError error) {} 

        @Override 
        public void onError(DialogError e) {} 

        @Override 
        public void onCancel() {} 
       }); 
      } 

      public void onActivityResult(int requestCode, int resultCode, Intent data)  { 

    super.onActivityResult(requestCode, resultCode, data); 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 
+0

문제가 여기에 무엇에 문제가 있습니까? 사용자를 인증 흐름으로 되돌릴 수는 없습니까? – Igy

+0

예. 사용자가 권한을 취소하고 정보를 공유/게시하려고하면 페이스 북 오류 대화 상자가 나타나고 다시 권한을 묻지 않습니다. – Hend

+0

죄송합니다. Android SDK에 익숙하지 않습니다. 일반적인 경우에는 사용자에게 재 인증을 요청하는 데 아무런 문제가 없어야합니다 (앱을 철저히 차단하지 않고 단순히 권한을 제거했다고 가정). 그러나 Android SDK의 인증 절차를 알지 못해서 이유를 알 수 있습니다. 너에게 효과가 없을거야. – Igy

답변

0
public void share(){ 
    if (! facebook.isSessionValid()) { 
     loginAndPostToWall(); 
    } 
    else { 
     postToWall(messageToPost); 
    } 
} 
    public void loginAndPostToWall(){ 
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener()); 
} 

    public void postToWall(String message){ 
    Bundle parameters = new Bundle(); 
    parameters.putString("message", message); 
    parameters.putString("description", "topic share"); 
    try { 
     facebook.request("me"); 
     String response = facebook.request("me/feed", parameters, "POST"); 
     Log.d("Tests", "got response: " + response); 
     if (response == null || response.equals("") || 
       response.equals("false")) { 
      showToast("Blank response."); 
     } 
     else { 
      showToast("Message posted to your facebook wall!"); 
     } 
     finish(); 
    } catch (Exception e) { 
     showToast("Failed to post to wall!"); 
     finish(); 
    } 
} 
    class LoginDialogListener implements DialogListener { 
    public void onComplete(Bundle values) { 
     saveCredentials(facebook); 
     if (messageToPost != null){ 
      postToWall(messageToPost); 
     } 
    } 
    public void onFacebookError(FacebookError error) { 
     showToast("Authentication with Facebook failed!"); 
     finish(); 
    } 
    public void onError(DialogError error) { 
     showToast("Authentication with Facebook failed!"); 
     finish(); 
    } 
    public void onCancel() { 
     showToast("Authentication with Facebook cancelled!"); 
     finish(); 
    } 
} 

private void showToast(String message){ 
    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 
} 
private void clearCredentials() { 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    mAsyncRunner.logout(FacebookStatus.this, new RequestListener() { 
     @Override 
     public void onComplete(String response, Object state) { 

      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        saveCredentials(facebook); 
        Log.i("facebook session2", ""+facebook.isSessionValid()); 
        showToast("You Succesfully logged out of the app"); 
        finish(); 

       } 
      }); 

     } 

     @Override 
     public void onIOException(IOException e, Object state) {} 

     @Override 
     public void onFileNotFoundException(FileNotFoundException e, 
       Object state) {} 

     @Override 
     public void onMalformedURLException(MalformedURLException e, 
       Object state) {} 

     @Override 
     public void onFacebookError(FacebookError e, Object state) {} 
    }); 

} 
관련 문제