2015-03-18 3 views
0

Я пытаюсь реализовать функцию входа в Facebook через свой пользовательский интерфейс.Facebook Вход с пользовательского интерфейса в android

Я использую следующий код, приведенный на странице разработчика facebook

private Session.StatusCallback statusCallback = 
     new SessionStatusCallback(); 
private static final String TAG = "MainFragment"; 

private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    if (session != null) { 
     if (!session.isOpened() && !session.isClosed()) { 
     session.openForRead(new Session.OpenRequest(this).setPermissions(Arrays.asList("public_profile")).setCallback(statusCallback)); 
     } else { 
     Session.openActiveSession(this, true, statusCallback); 
     } 
    } 
    } 

private class SessionStatusCallback implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     if (state.isOpened()) { 
      Log.i(TAG, "Logged in..."); 
     } else if (state.isClosed()) { 
     Log.i(TAG, "Logged out..."); 
     } 
       // Respond to session state changes, ex: updating the view 
     } 
} 

Я звоню OnClickLogin() метода с помощью щелчка по кнопке. Проблема в том, что ничего не происходит. переменная сессия - null.

Направьте меня, если я ошибаюсь, или это не правильный способ реализации концепции.

Причина реализации пользовательского интерфейса в основном заключается в том, что я хочу, чтобы пользователь заходил на одну кнопку, но выходил из другой кнопки из панели действий. Дайте мне знать, есть ли другой способ реализовать это.

EDIT -

Оставшийся код

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    button = (Button) findViewById(R.id.button1); 

    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      onClickLogin(); 
     } 
    }); 

} 

ответ

0

Используйте этот класс

import android.app.Activity; 
import android.content.Intent; 

import com.facebook.Session; 
import com.facebook.SessionDefaultAudience; 
import com.facebook.SessionLoginBehavior; 
import com.facebook.SessionState; 

import java.util.Arrays; 

/** 
* Created by Maks on 18.03.15. 
*/ 
public abstract class FacebookActivity extends Activity { 

public static final String APP_ID = "Facebook app id"; 

private MyLoginListener lst; 

public void setFacebookLoginListener(MyLoginListener lst){ 
    this.lst = lst; 
} 

public void startFacebookLogin(MyLoginListener lst){ 
    if(hasReadPermission()){ 
     lst.onSuccess(); 
    } else { 
     this.lst = lst; 
     requestReadPermission(); 
    } 
} 

private void requestReadPermission(){ 
    Session session = Session.getActiveSession(); 

    if(session!=null){ 
     session.closeAndClearTokenInformation(); 
     Session.setActiveSession(null); 
    } 
    session = new Session.Builder(this).setApplicationId(APP_ID).build(); 
    session.closeAndClearTokenInformation(); 

    session = new Session.Builder(this).setApplicationId(APP_ID).build(); 
    Session.setActiveSession(session); 
    session.removeCallback(ReadListener); 

    Session.OpenRequest openRequest = new Session.OpenRequest(this); 

    openRequest.setDefaultAudience(SessionDefaultAudience.EVERYONE); 
    openRequest.setPermissions(Arrays.asList("email")); 
    openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); 

    openRequest.setCallback(ReadListener); 

    session.openForRead(openRequest); 
} 

private Session.StatusCallback ReadListener = new Session.StatusCallback() { 

    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     if (state == SessionState.OPENED || state == SessionState.OPENED_TOKEN_UPDATED) { 
      if (hasReadPermission()) { 
       if(lst!=null) lst.onSuccess(); 
      } else { 
       if(lst!=null) lst.onError("!hasReadPermissions"); 
      } 
     } else if (state == SessionState.CLOSED_LOGIN_FAILED) { 
      session.closeAndClearTokenInformation(); 
      Session.setActiveSession(null); 

      if(lst!=null) lst.onError("user canceled"); 
     } else if (state == SessionState.CLOSED) { 
      session.close(); 
     } 
    } 
}; 

private boolean hasReadPermission() { 
    return hasReadPermission(Session.getActiveSession()); 
} 

private boolean hasReadPermission(Session session) { 
    return session != null && session.isOpened() && session.getPermissions().contains("email"); 
} 

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

    Session session = Session.getActiveSession(); 
    if(session!=null){ 
     session.onActivityResult(this, requestCode, resultCode, data); 
    } 
} 

public interface MyLoginListener{ 
    public void onError(String error); 
    public void onSuccess(); 
} 
} 

Затем создать свой собственный класс расширяет FacebookActivity:

import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

/** 
* Created by Maks on 18.03.15. 
*/ 
public class MyActivity extends FacebookActivity { 
private Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    button = (Button) findViewById(R.id.button1); 

    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      onClickLogin(); 
     } 
    }); 

} 

private void onClickLogin(){ 
    startFacebookLogin(lst); 
} 

private MyLoginListener lst = new MyLoginListener() { 
    @Override 
    public void onError(String error) { 
     // failed login in print error 
     // add your code here 
    } 

    @Override 
    public void onSuccess() { 
     // success logined in 
     // add your code here 
    } 
}; 
} 
Метод

Выхода:

private void logOut(){ 
    Session session = Session.getActiveSession(); 

    if(session!=null){ 
     session.closeAndClearTokenInformation(); 
     Session.setActiveSession(null); 
    } 
} 
+0

первой Ее не работает, вторая ли мы начали какую-либо деятельность, чтобы дать результат? – vp131

+0

Нам нужно начать работу, тогда мы сможем обработать результат из приложения Facebook или Facebook logindialog –

+0

Предоставить полный код от вашего класса –

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