2013-05-02 3 views
10

Ich verwende restfb API, um auf die Fotos meiner Freunde in Java zuzugreifen. Und um auf diese Fotos zuzugreifen, erzeuge ich den Zugriffscode manuell unter Verwendung von Graph API explorer und gebe dies als Parameter an den Restfb-API-Aufruf weiter.Wie erhalten Sie Facebook Benutzerzugriffstoken in Android?

Aber jetzt möchte ich dieses Zugriffs-Token durch Code (programmgesteuert) generieren. Ich habe fb Android-Proben gesehen, besonders Hackbook. Ich sehe keinen Zugriffscode, den ich für meine eigene Anwendung verwenden kann. Muss ich eine neue App erstellen und ein Geheimnis usw. bekommen? Jeder Vorschlag wird geschätzt.

Ich habe diese Lösungen (solution-1 & solution-2) auf Stackoverflow gesehen, aber ich bekomme immer noch nicht, wo ich anfangen soll?

-Update-1 ::

ich folgenden Code verwende um sich einzuloggen und Zugang bekommen Token angemeldeten Benutzers für. Das Problem ist nur, dass es nur für den Account funktioniert, mit dem ich auf Facebook eine App erstellt habe, um eine App_ID zu generieren. Es erhält keinen Rückruf für andere Konten. Irgendein Vorschlag bitte.

Und für den Fall, dass Sie nicht wissen, wo Sie anfangen sollen, folgen Sie step-6, um eine neue App von Grund auf neu zu erstellen.

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() + "!"); 
            } 
           } 
          }); 
       } 
      } 
     }); 

    } 

    } 

Antwort

0

Antwort auf die ursprüngliche Frage wurde bereits als update-1 eingegeben. Aber es funktionierte nur für Admin-Benutzer.

Eigentlich hatte ich während der App-Erstellung fälschlicherweise den Sandbox-Modus gewählt, der den Zugriff der App nur auf Entwickler beschränkt, die auf der App-Konfigurationsseite hinzugefügt wurden. Nachdem ich diesen Modus deaktiviert hatte, konnte ich das Token für andere Benutzer generieren.

8

der Facebook-SDK die bessere Art und Weise Mit der Authentifizierung des Benutzers zu verwalten, ist mit Hilfe der Session Klasse. Wenn Sie eine gültige Instanz der Session-Klasse haben, müssen Sie nur die getAccessToken() aufrufen, um die Zeichenfolge zu erhalten, die das Access-Token darstellt.

+0

Dank für die Antwort danken, ich bin ein Objekt der Session nicht erlaubt erstellen. Bitte lass mich wissen, warum das passiert! – TharakaNirmana

+0

In der Tat müssen Sie keine neue Session-Instanz erstellen, verwenden Sie einfach die Methode 'getActiveSession()' oder 'openActiveSession()', falls Sie eine Null-Sitzung von der vorherigen erhalten. Siehe dazu auch [meine andere Antwort] (http://stackoverflow.com/questions/16140771/login-with-facebook-android-sdk-3-0-using-shared-preferences-session/16143102#16143102) – 5agado

+0

Danke für die Antwort, meine Situation ist ein bisschen seltsam. Ich habe ein Facebook-Objekt (Facebook facebook = neues Facebook()). Aber mit diesem Objekt kann ich facebook.getActiveSession() oder facebook.openActiveSession() nicht aufrufen. Kannst du mir bitte sagen warum? Meine Absicht ist, irgendwie ein Zugangsmarker zu schaffen und es mit params (im Bündel) zu senden, um ein Foto hochzuladen. – TharakaNirmana

1

GET/oauth/access_token? client_id = {app-id} & client_secret = {app-secret} & grant_type = client_credentials

8

Ich war das gleiche Problem mit dem neuesten Facebook Android SDK (4.0.1).

I verwendet AccessToken.getCurrentAccessToken() und es funktionierte:

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

Sie können den gesamten Code Ihrer Aktivität, die den obigen Code enthält, posten. Ich bin verwirrt darüber, wo Sie Ihren Code setzen, versuchte, in onCreate setzen, aber nichts zu helfen. –

+0

Ich benutze auch SDK 4.0.1 & Android Studio 1.1.0. –

+0

Funktioniert gut !!! vielen Dank sdk 4.5 –