it-swarm.com.de

Wie bekomme ich einen Facebook-Benutzerzugriffstoken in Android?

Ich verwende restfb API , um auf die Fotos meines Freundes in Java zuzugreifen. Um auf diese Fotos zuzugreifen, generiere ich den Zugriffscode manuell mit Graph API Explorer und übergebe ihn als Parameter an den restfb API-Aufruf.

Aber jetzt möchte ich dieses Zugriffstoken durch Code (programmgesteuert) generieren. Ich habe fb Android-Beispiele gesehen, insbesondere Hackbook. Es wird kein Zugangscode generiert, den ich für meine eigene Anwendung verwenden kann. Muss ich eine neue App erstellen und ein Geheimnis usw. erlangen? Jeder Vorschlag wird geschätzt.

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

Update-1 ::

Ich verwende folgenden Code, um mich anzumelden und das Zugriffstoken für den angemeldeten Benutzer zu erhalten. Das Problem ist aber, dass es nur für den Account funktioniert, mit dem ich eine App auf Facebook erstellt habe, um eine app_id zu generieren. Es wird kein Rückruf für andere Konten erhalten. Irgendein Vorschlag bitte.

Und für den Fall, dass Sie nicht wissen, wo Sie anfangen sollen, folgen Sie Schritt-6 , um eine neue App von Grund auf 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() + "!");
                                    }
                                }
                            });
                }
            }
        });

    }

    }
10
Junaid

Die 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 den Sandkasten-Modus falsch gewählt, der den Zugriff auf Apps nur auf Entwickler beschränkt, die auf der App-Konfigurationsseite hinzugefügt wurden. Nachdem ich diesen Modus deaktiviert hatte, konnte ich das Zugriffstoken auch für andere Benutzer generieren. 

0
Junaid

Wenn Sie das Facebook SDK verwenden, können Sie die Authentifizierung des Benutzers besser mithilfe der Session-Klasse verwalten. Wenn Sie über eine gültige Instanz der Session-Klasse verfügen, müssen Sie lediglich die getAccessToken() aufrufen, um diese Funktion zu erhalten der String, der das Zugriffstoken darstellt.

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

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

Ich habe AccessToken.getCurrentAccessToken () verwendet und es hat funktioniert:

    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();
8
Scott McMullan

GET /oauth/access_token? Client_id = {app-id} & Client_secret = {app-secret} & Grant_type = client_credentials

1
user3142006