2016-04-09 32 views
1

我正在使用Facebook小部件的LoginButton通過Facebook登錄。facebook的LoginButton

mLoginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      LoginManager.getInstance().logInWithReadPermissions(MainActivity.this,Arrays.asList("public_profile", "user_friends")); 
      } 
     }); 

我有兩個issues-

1.當我點擊登錄按鈕Facebook登錄對話框打開兩個times.So我提供用戶電子郵件地址和密碼登錄後,在第一時間後,它顯示了另一個登錄對話框後面我必須關閉。

2.當我登錄並移動到下一個屏幕後,如果我回到登錄屏幕,它會在登錄按鈕中顯示註銷文本,這是理想的。但是當我點擊它時,它會打開登錄和註銷對話框。它應該只是註銷對話框box.How打開我應該阻止LoginManager.getInstance().logInWithReadPermissions(MainActivity.this,Arrays.asList("public_profile", "user_friends"));從如果用戶已經登錄執行。

下面是他的代碼我使用loginButton

public class MainActivity extends AppCompatActivity { 
private LoginButton mLoginButton; 
    CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_main); 
     callbackManager = CallbackManager.Factory.create(); 
//  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
//  setSupportActionBar(toolbar); 
     mLoginButton = (LoginButton) findViewById(R.id.login_button); 

     mLoginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
if(accessToken==null) { 
    LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends")); 

} 
      } 
     }); 
     mLoginButton.registerCallback(callbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 

        } 
        @Override 
        public void onCancel() { 
        } 
        @Override 
        public void onError(FacebookException exception) { 
        } 
       }); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 
} 

回答

0

刪除setOnClickListener,只是RegisterCallBack上登錄按鈕,它會處理所有的事情,你不需要爲loginButton設置setOnClickListener。它被調用兩次,因爲你已經設置了setOnClickListener和registerCalBack。

CallbackManager callbackManager = CallbackManager.Factory.create(); 

loginButton = (LoginButton) findViewById(R.id.fbLogin); 
loginButton.setReadPermissions(Arrays.asList("user_status,public_profile,user_friends,email,user_birthday")); 
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(final LoginResult loginResult) { 

    } 

    @Override 
    public void onCancel() { 

     } 

    @Override 
     public void onError(FacebookException error) { 

     } 
    }); 

您可以檢查,如果用戶登錄或不

AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     if (accessToken != null) { 
     } 
     return accessToken != null; 
+0

我已經這樣做了 – user3751386

+0

你能否onError的檢查,它不會被調用? –

+0

這是問題是當我點擊登錄按鈕Facebook登錄對話框打開兩次。所以在我提供用戶的電子郵件和密碼後第一次登錄後,它顯示了我必須關閉的另一個登錄對話框。 – user3751386

相關問題