2012-03-13 15 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) {} 
    }); 

}