2015-04-20 2 views
3

Я сделал регистрацию в facebook в моем приложении Android с помощью LoginButton, но я хочу проверить, используя LoginManager. Как я могу изменить свой код для работы таким образом?Android Facebook Войти: Как проверить вход в систему с помощью LoginManager, не имея LoginButton в 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

Хорошо, как мне инициировать регистрацию учетной записи ecbook, если пользователь не вошёл в систему? Раньше он был инициирован щелчком LoginButton в XML. Теперь я удалил LoginButton из XML. –

+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

Смежные вопросы