2015-04-20 53 views
3

我已經使用LoginButton在我的android應用中完成了Facebook登錄檢查,但是我想使用LoginManager進行檢查。我如何修改我的代碼以這種方式工作?Android Facebook登錄:如何使用LoginManager檢查登錄而不登錄XML中的登錄按鈕

LoginButton loginButton = (LoginButton) findViewById(R.id.fb_login_button); 
    loginButton.setReadPermissions("user_friends"); 

    shareDialog = new ShareDialog(this); 

    //Login Callback registration 
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show(); 

      //Login success - process to Post 
      if (ShareDialog.canShow(ShareLinkContent.class)) { 
       String description = "description"; 
       ShareLinkContent linkContent = new ShareLinkContent.Builder() 
         .setContentTitle("title") 
         .setContentDescription(description) 
         .setContentUrl(Uri.parse("http://google.com")) 
         .setImageUrl(Uri.parse("http://google.com")) 
         .build(); 

       shareDialog.show(linkContent, ShareDialog.Mode.FEED); 
      } 

     } 

     @Override 
     public void onCancel() { 
      Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show(); 
     } 
    }); 

另外我想打開Facebook登錄對話框,如果用戶沒有登錄之前,通過共享對話框打開。登錄對話框應該與共享對話框相同(在彈出窗口中)。怎麼做?

謝謝!

+0

您需要檢查什麼?天氣用戶已登錄或不? –

+0

是的,檢查用戶是否登錄。如果否,顯示登錄對話框。如果已經登錄,那麼現在直接顯示共享對話框。 –

+0

我以前在單擊LoginButton時檢查登錄。但是現在我想刪除LoginButton並使用LoginManager進行操作。我該怎麼做? –

回答

3

如果用戶登錄,您可以通過調用方法Loginmanger來檢查。 logInWithReadPermissions,手動啓動登錄過程,不用按鈕。您可以在onCreate方法中執行此操作。如果用戶登錄,則立即撥打onSuccess回撥方式,您可以撥打shareDialog。如果用戶沒有登錄,它將顯示登錄屏幕。如果成功(即用戶登錄),將調用onSuccess方法;

其實,你可以從你的代碼中所有login button提到刪除和一行添加到末尾:

LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB 

您可以使用也可以使用WritePermissions。您可以閱讀所需的權限here

這裏是你的代碼,但包裝爲登錄方法,沒有任何登錄按鈕實例。你可以在任何地方調用它,當你需要檢查時,如果用戶登錄。

public void checkLogin() { 
    //Login Callback registration 
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show(); 

      //Login success - process to Post 
      if (ShareDialog.canShow(ShareLinkContent.class)) { 
       String description = "description"; 
       ShareLinkContent linkContent = new ShareLinkContent.Builder() 
         .setContentTitle("title") 
         .setContentDescription(description) 
         .setContentUrl(Uri.parse("http://google.com")) 
         .setImageUrl(Uri.parse("http://google.com")) 
         .build(); 

       shareDialog.show(linkContent, ShareDialog.Mode.FEED); 
      } 

     } 

     @Override 
     public void onCancel() { 
      Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB 
} 
1

你可以得到用戶個人資料是,試試這個,

Profile dd = Profile.getCurrentProfile().getCurrentProfile(); 
    if(dd != null) 
    { 
     //user has logged 
    } 
    else 
    { 
     //not logged 
    } 

你可以重新開始登錄不LoginButton如下,

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(<required permissions>)); 

你也需要實現上述要求回調

+0

好的,如果用戶沒有登錄,我該如何啓動facbook登錄?以前,它是在XML中單擊LoginButton時啓動的。我已經從XML中刪除了LoginButton。 –

+0

我已編輯答案 –

0

可以使用ProfileTracker以類似的方式來跟蹤在當前配置的變化:從這裏

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    FacebookSdk.sdkInitialize(this.getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 

    profileTracker = new ProfileTracker() { 
     @Override 
     protected void onCurrentProfileChanged(
       Profile oldProfile, 
       Profile currentProfile) { 
      // here if session exist 
     } 
    }; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    profileTracker.stopTracking(); 
} 

來源:https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current