UI에서 단추를 클릭하면 함수를 호출해야합니다 (fbLogin()).이 함수는 닫힌 경우 세션을 열고 사용자를 인증합니다.openActiveSession()을 호출 한 후에도 Android 앱에서 Facebook 승인 액세스 토큰을받지 못하고 있습니까?
public void fbLogin(View button) {
Log.e(getClass().getName(), "0");
Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
Session session = Session.getActiveSession();
if (session == null) {
Log.e(getClass().getName(), "1");
if (savedInstanceState != null) {
Log.e(getClass().getName(), "2");
session = Session.restoreSession(this, null, statusCallback,
savedInstanceState);
}
if (session == null) {
Log.e(getClass().getName(), "3");
session = new Session(this);
}
Log.e(getClass().getName(), "4");
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
Log.e(getClass().getName(), "5");
session.openForRead(new Session.OpenRequest(this)
.setCallback(statusCallback));
}
}
Log.e(getClass().getName(), "6");
updateView();
}
updateView() :
private void updateView() {
final Session session = Session.getActiveSession();
if (session.isOpened()) {
Log.e(getClass().getName(), "7");
Request.executeMeRequestAsync(session,
new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user,
Response response) {
Log.e(getClass().getName(), "8");
if (user != null) {
String str = user.getName();
Intent intent = new Intent(
getApplicationContext(), LoggedIn.class);
Log.e(getClass().getName(), user.getName());
intent.putExtra("UserName", str);
startActivity(intent);
}
}
});
}
else {
Log.e(getClass().getName(), "9");
Session.openActiveSession(this, true, statusCallback);
if(session.isOpened()) Log.e(getClass().getName(), "15");
Log.e(getClass().getName(), "AT : "+ session.getAccessToken());
Request.executeMeRequestAsync(session,
new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user,
Response response) {
Log.e(getClass().getName(), "10");
if(user==null) Log.e(getClass().getName(), "11");
if (user != null) {
Log.e(getClass().getName(), "12");
String str = user.getName();
Intent intent = new Intent(
getApplicationContext(), LoggedIn.class);
Log.e(getClass().getName(), user.getName());
intent.putExtra("UserName", str);
startActivity(intent);
}
}
});
}
}
내 SessionStatusCallback 클래스 :
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state,
Exception exception) {
Log.e(getClass().getName(), "13");
// updateView();
}
}
그러나 나는 그것이 토큰을 가져 오는 것처럼 (활동이로드 계속해서 로그인 버튼을 클릭 할 때), 세션이 열리지 않음 (Logger가 LogCat에 15을 기록하지 않음)
LogCat 출력 :
08-12 16:11:35.836: E/com.example.usemeone.UsemeOne(1725): 0
08-12 16:11:35.846: E/com.example.usemeone.UsemeOne(1725): 1
08-12 16:11:35.846: E/com.example.usemeone.UsemeOne(1725): 3
08-12 16:11:35.886: E/com.example.usemeone.UsemeOne(1725): 4
08-12 16:11:35.896: E/com.example.usemeone.UsemeOne(1725): 6
08-12 16:11:35.896: E/com.example.usemeone.UsemeOne(1725): 9
08-12 16:11:36.046: E/com.example.usemeone.UsemeOne(1725): AT :
08-12 16:11:36.366: E/com.example.usemeone.UsemeOne$SessionStatusCallback(1725): 13
08-12 16:11:37.196: E/com.example.usemeone.UsemeOne$2(1725): 10
08-12 16:11:37.196: E/com.example.usemeone.UsemeOne$2(1725): 11
샘플 Android-facebook 앱을 사용하셨습니까? – MiStr
참조 : https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/ 또는 https://github.com/fbsamples – MiStr
음 샘플 (SessionLoginSample)을 사용하여 만들었습니다. 약간의 수정과 모든 전제 조건은 페이스 북 개발자 페이지에서 이루어집니다. – Akshay