2012-10-24 1 views
4

Android 용 FB API 3.0을 사용하고 있으며 적절한 방식으로 세션을 설정하려고합니다.안드로이드 FB API 3.0 프래그먼트가있는 세션 설정

하지만 뭔가 잘못하고있는 것 같아요. 뭔가 놓치고있는 것 같아요. 내 실행 활동에서

, 난 이미 세션이 있는지 확인하고 존재하지 않는 경우 나는 (FB의 예에서와 같이) 새로 만들 :이 시점에서

Settings.addLoggingBehavior(LoggingBehaviors.INCLUDE_ACCESS_TOKENS); 

    Session session = Session.getActiveSession(); 
    if (session != null){ 
    String sesija = session.toString(); 
    Log.w ("ss", sesija);} 

    if (session == null) { 
     if (savedInstanceState != null) { 
      session = Session.restoreSession(this, null, MyGlobals.INSTANCE.statusCallback, savedInstanceState); 
      Log.w("No Session found", "Loading saved session as it exists"); 
     } 
     if (session == null) { 
      session = new Session(this); 
      Log.w("No Session found", "CreatingNewSession"); 

      String sesija2 = session.toString(); 
      Log.w ("ss2", sesija2); 
     } 
     Session.setActiveSession(session); 
     if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
      session.openForRead(new Session.OpenRequest(this).setCallback(MyGlobals.INSTANCE.statusCallback)); 
      Log.w("There is an active session", "Active Session Exists"); 
     } 

    } 

내 로그이 말한다 :

:
10-24 09:11:52.284: W/ss(1404): {Session state:CREATED, token:{AccessToken token: permissions:[}, appId:xxxxxx} 

내 조각에서 다음

,이 코드를 사용하여 페이스 북에 로그온 할 (APPID 올바른 것입니다)

Session session = Session.getActiveSession(); 
if (!session.isOpened() && !session.isClosed()) { 
      Log.w("Session is not opend", "Session is not closed"); 
      session.openForRead(new Session.OpenRequest(getActivity()).setCallback(MyGlobals.INSTANCE.statusCallback)); 
     } else { 
      Session.openActiveSession(getActivity(), true, MyGlobals.INSTANCE.statusCallback); 
      Log.w("Open Active Session", "Status Callback"); 
     } 

이 시점에서 FB webview가 나타납니다. 사용자 이름을 설정하고 전달하고 친절하게 작동 한 다음 사라집니다.

이제 저는 일종의 응답이 없으며 TOKEN이 암송했습니다. 동일한 버튼에서 다시 로그인하면 내 앱이 다운됩니다. ,

10-24 09:12:31.944: W/ss(1404): {Session state:OPENING, token:{AccessToken token: permissions:[}, appId:xxxxxx} 

내가이 FB에서 제공 SessionLoginExample에 비교하면 나는 거기 : 로그에서

나는 다음이이 나는대로 뭔가를 잘못하고 있어요 의미

10-24 09:08:50.004: W/ss(1356): {Session state:OPENED, token:{AccessToken token:AAAFaKtb7Pg4BALYg4B5eosa0ZAE9ZAXB0ZBMFDJdNbsDsZAkGJUfKtGs71OEJikDxT2VBfo4QMXiNASz23ZAa6D76eUxW0mZAMa013HP2kxgZDZD permissions:[}, appId:xxxxxxx} 

반환 된 AccessToken을 catch하지 않으며 제대로 저장되지 않습니다.

그건 내가 잘못 생각한 것이지만, 적절한 방법으로 세션 정보를 읽는 방법, 또는 조각 내에서 토큰 정보를 어디에서 붙잡고 저장해야 하는지를 이해할 수 없습니다. 이 같이

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Boolean session = Session.getActiveSession().onActivityResult(getSherlockActivity(), requestCode, resultCode, data); 

} 

이 예에서 "onActivityResult를"했지만, 그것은 아무것도하지 않는 것 같습니다 :

나는 조각에 넣어하려고 노력했다.

두 가지를 요약하면 다음과 같습니다. 런처 활동 뒤에 세션을 만듭니다. 그런 다음 FB app이 설치되어 있지 않으면 Tab4 (설정)에서 사용자가 webview를 사용하여 FB에 로그온 할 수 있어야합니다. 그런 다음 Tab1과 Tab2 사용자는 Instagram에서와 같이 FB로 이미지를 공유 할 수 있어야합니다. 앱이 설치되어있는 경우 탭 4를 사용하지 않도록 설정하고 Tab1과 Tab2를 사용하여 사용자가 공유 할 수 있도록합니다.

Tnx.

이 해결 : 쓰여지지는 않았지만 잘 알려 져야하는 것. FB 인증이 수행되면 토큰을 세션과 함께 저장하려면 "On Activity Result"코드를 실행해야합니다. 그러나 내가하는 것처럼 단편과 탭을 다루는 경우 "onActivityResult"함수는 단편 코드 내에서 실행되지 않지만 단편/탭을 관리하는 활동에서 실행되어야합니다.

+0

이 필요하다는 다소 좋네요. 어떤 행동을 시도합니까? – ania

+0

예, 알아 냈습니다. 문제는 프래그먼트가 "onActivityResult"를 호출하지 않지만 탭과 프래그먼트를 처리하는 주 활동입니다. – Balkyto

+0

예, 조각에 대한 일반적인 문제입니다. 그게 효과가있어! – ania

답변

4

당신이 이미이 문제를 해결하고 해결 방법이 잘되어있는 것처럼 보입니다.하지만 대신 다른 사람이이 조각을 대신 사용하는 것이 더 깔끔한 경우에 대비하여 다른 옵션을 제공하고 싶습니다.

FacebookActivity에서 파생 될 수 없거나 파생되기를 원하지 않는 경우 활동 또는 단편을 사용하여 세션을 초기화 할 수 있습니다. 액티비티와 프래그먼트 모두 onActivityResult를 재정의 할 수 있으며, 사용되는 인스턴스는 Session.OpenRequest를 초기화하기 위해 전달한 내용에 따라 다릅니다.

그래서 당신은 콜백이 조각에 와서하려는 경우, 당신은 호출 할 수

...new Session.OpenRequest(myFragment)... 

그런 다음 조각에 onActivityResult를 무시하고 사용자 세션에 대한 호출을 전달합니다.

이것은 당신의 조각은 더 이상이 실행되는 것을 활동의 특별한 지식을 가지고. 당신이 FB API를 사용하여 원하는 모든 것을 할 수 있어야 onActivityResult를 한 후

+0

Tnx. 이 옵션이 더 적절하거나 적어도 더 잘 이해하려면이 옵션을 살펴 보겠습니다. :) – Balkyto