2013-05-02 16 views
10

Używam restfb API, aby uzyskać dostęp do zdjęć mojego przyjaciela w Javie. Aby uzyskać dostęp do tych zdjęć, generuję kod dostępu ręcznie przy użyciu adresu Graph API explorer i przekazuję go jako parametr do wywołania funkcji API restfb.Jak zdobyć token dostępu do Facebooka w Androidzie?

Ale teraz chcę wygenerować token dostępu za pomocą kodu (programowo). Widziałem próbki androidów fb, szczególnie hackbook. Nie widzę generowanego kodu dostępu, który można wykorzystać do mojej własnej aplikacji. Czy muszę utworzyć nową aplikację i uzyskać jakieś tajne itp.? Wszelkie sugestie zostaną docenione.

Widziałem te rozwiązania (solution-1 & solution-2) na stackoverflow, ale nadal nie jestem, gdzie zacząć?

Update-1 ::

używam następujący kod, aby zalogować się i coraz token dostępu dla zalogowanego użytkownika. Problem polega jednak na tym, że działa on tylko na koncie, na którym utworzyłem aplikację na Facebooku, aby wygenerować identyfikator app_id. Nie można odebrać połączenia z innych kont. Wszelkie sugestie proszę.

I na wszelki wypadek, jeśli nie wiesz od czego zacząć, wykonaj step-6, aby utworzyć nową aplikację od zera.

public class MainActivity extends Activity implements OnClickListener { 

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

     login = (Button) findViewById(R.id.login); 
     accessToken = (TextView) findViewById(R.id.accessToken); 

     login.setOnClickListener(this); 
     // start Facebook Login 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

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

    @Override 
    public void onResume() 
    { 
     Session session = Session.getActiveSession(); 
     if(session != null) 
      if (session.isOpened()) { 
       //Toast.makeText(this, session.getAccessToken(), Toast.LENGTH_LONG).show(); 
       accessToken = (TextView) findViewById(R.id.accessToken); 
       accessToken.setText(session.getAccessToken()); 
       System.out.println("----------------------" + session.getAccessToken() + "---------------------"); 

      } 
     super.onResume(); 
    } 

    @Override 
    public void onClick(View v) { 
     // start Facebook Login 
     Session.openActiveSession(this, true, new Session.StatusCallback() { 

      // callback when session changes state 
      @Override 
      public void call(Session session, SessionState state, 
        Exception exception) { 
       if (session.isOpened()) { 

        // make request to the /me API 
        Request.executeMeRequestAsync(session, 
          new Request.GraphUserCallback() { 

           // callback after Graph API response with user 
           // object 
           @Override 
           public void onCompleted(GraphUser user, 
             Response response) { 
            if (user != null) { 
             TextView welcome = (TextView) findViewById(R.id.welcome); 
             welcome.setText("Hello " 
               + user.getName() + "!"); 
            } 
           } 
          }); 
       } 
      } 
     }); 

    } 

    } 

Odpowiedz

0

Odpowiedź na pierwotne pytanie została już wprowadzona jako aktualizacja-1. Ale działało tylko dla administratorów.

Właściwie podczas tworzenia aplikacji nieprawidłowo wybrałem tryb "piaskownicy", który ogranicza dostęp aplikacji tylko do programistów dodanych na stronie konfiguracji aplikacji. Po wyłączeniu tego trybu udało mi się wygenerować token dostępu także dla innych użytkowników.

8

Korzystanie z lepszą drogę Facebook SDK do zarządzania uwierzytelniania użytkownika jest za pomocą klasy Session. Gdy masz prawidłową instancję klasy Session, musisz po prostu zadzwonić na nią pod numer getAccessToken(), aby uzyskać ciąg reprezentujący token dostępu.

Session session = Session.getActiveSession(); 
if (session != null && session.getState().isOpened()){ 
    Log.i("sessionToken", session.getAccessToken()); 
    Log.i("sessionTokenDueDate", session.getExpirationDate().toLocaleString()); 
} 
+0

dziękuję za odpowiedź, nie wolno mi utworzyć obiekt Session. Daj mi znać, dlaczego tak się dzieje! – TharakaNirmana

+0

W rzeczywistości nie trzeba tworzyć nowej instancji sesji, wystarczy użyć metody 'getActiveSession()' lub 'openActiveSession()' w przypadku, gdy otrzymasz sesję zerową z poprzedniej. W związku z tym zobacz także [moja druga odpowiedź] (http://stackoverflow.com/questions/16140771/login-with-facebook-android-sdk-3-0-using-shared-preferences-session/16143102#16143102) – 5agado

+0

Dziękuję za odpowiedź, moja sytuacja jest trochę dziwna. Mam obiekt na Facebooku (Facebook facebook = new Facebook()). Ale z tym obiektem nie mogę wywołać facebook.getActiveSession() ani facebook.openActiveSession(). Czy możesz mi powiedzieć dlaczego? Moim zamiarem jest jakoś stworzyć token dostępu i wysłać go z parametrami (w pakiecie), aby załadować zdjęcie. – TharakaNirmana

1

GET/oauth/access_token? CLIENT_ID = {app-ID} & client_secret = {aplikacja tajny} & grant_type = client_credentials

8

I był ten sam problem stosując najnowszą Facebook Android SDK (4.0.1).

użyłem AccessToken.getCurrentAccessToken() i to działało:

GraphRequest request = GraphRequest.newMeRequest(
      AccessToken.getCurrentAccessToken(), 
      new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject jsonObject, GraphResponse response) { 
        Log.d(LOG_TAG,"onCompleted jsonObject: "+jsonObject); 
        Log.d(LOG_TAG,"onCompleted response: "+response); 
        // Application code 
       } 
      }); 
    Bundle parameters = new Bundle(); 
    parameters.putString("fields", "id,name,link,cover,email"); 
    request.setParameters(parameters); 
    request.executeAsync(); 
+0

Można opublikować cały kod aktywności zawierający powyższy kod. Nie mam pojęcia, gdzie umieścić swój kod, próbowałem włożyć do niego w Creatate, ale nic, co mogłoby pomóc. –

+0

Używam także sdk 4.0.1 i Android Studio 1.1.0. –

+0

Działa dobrze !!! dziękuję bardzo sdk 4.5 –

Powiązane problemy