Как проверить, вошел ли пользователь в Facebook, используя его access_token и graph api - PullRequest
0 голосов
/ 31 марта 2011

У меня есть приложение iframe на Facebook.Я делаю свои запросы в Facebook на стороне сервера, используя график API.У меня есть автономный доступ, поэтому access_token никогда не истекает.

Я хотел бы знать, если текущий пользователь вошел в facebook, поэтому, когда он выходит из Facebook, я могу выйти из своего приложения.Я не хочу использовать javascript sdk.

Я пытался использовать поле online_presence пользовательской таблицы, но оно всегда возвращает ноль.Есть ли способ, которым я могу это сделать?

Есть ли лучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 31 марта 2011

Вам нужно другое разрешение, user_online_presence.Взято из списка разрешений на страницах разработчиков Facebook: http://developers.facebook.com/docs/authentication/permissions/

0 голосов
/ 31 июля 2017

Уже поздно отвечать, но теперь в версии 4.25.0 из Facebook SDK есть метод:

public void retrieveLoginStatus(Context context,
                                LoginStatusCallback responseCallback)

, который гласит:

Получает статус входа в систему для пользователя.Это вернет маркер доступа к приложению, если пользователь вошел в приложение Facebook для Android на том же устройстве, и этот пользователь ранее вошел в приложение.Если маркер доступа был получен, то будет показан тост, сообщающий пользователю, что он вошел в систему.

И может использоваться следующим образом:

LoginManager.getInstance().retrieveLoginStatus( this, new LoginStatusCallback()
{
    @Override
    public void onCompleted( AccessToken accessToken )
    {
        GraphRequest request = GraphRequest.newMeRequest( accessToken, new GraphRequest.GraphJSONObjectCallback()
        {
            @Override
            public void onCompleted( JSONObject object, GraphResponse response )
            {
                Log.e( TAG, object.toString() );
                Log.e( TAG, response.toString() );

                try
                {
                    userId = object.getString( "id" );
                    profilePicture = new URL( "https://graph.facebook.com/" + userId + "/picture?width=500&height=500" );
                    Log.d( "PROFILE_URL", "url: " + profilePicture.toString() );
                    if ( object.has( "first_name" ) )
                    {
                        firstName = object.getString( "first_name" );
                    }
                    if ( object.has( "last_name" ) )
                    {
                        lastName = object.getString( "last_name" );
                    }
                    if ( object.has( "email" ) )
                    {
                        email = object.getString( "email" );
                    }
                    if ( object.has( "birthday" ) )
                    {
                        birthday = object.getString( "birthday" );
                    }
                    if ( object.has( "gender" ) )
                    {
                        gender = object.getString( "gender" );
                    }

                    Intent main = new Intent( LoginActivity.this, MainActivity.class );
                    main.putExtra( "name", firstName );
                    main.putExtra( "surname", lastName );
                    main.putExtra( "imageUrl", profilePicture.toString() );
                    startActivity( main );
                    finish();
                }
                catch ( JSONException e )
                {
                    e.printStackTrace();
                }
                catch ( MalformedURLException e )
                {
                    e.printStackTrace();
                }

            }
        } );
        //Here we put the requested fields to be returned from the JSONObject
        Bundle parameters = new Bundle();
        parameters.putString( "fields", "id, first_name, last_name, email, birthday, gender" );
        request.setParameters( parameters );
        request.executeAsync();
    }

    @Override
    public void onFailure()
    {
        Toast.makeText( LoginActivity.this, "Could not log in.", Toast.LENGTH_SHORT ).show();
    }

    @Override
    public void onError( Exception exception )
    {
        Toast.makeText( LoginActivity.this, "Could not log in.", Toast.LENGTH_SHORT ).show();
    }
} );

Thisуже был дан ответ здесь .

0 голосов
/ 31 марта 2011

Мне нужно то же самое для моего приложения.Насколько я видел, нет никакого официального способа проверить, вошел ли пользователь в систему, такого как метод checkToken ().Я быстро проверяю его профиль и проверяю, получу ли я ответ.Даже ваш токен offline_access станет недействительным, если пользователь выйдет из Facebook, насколько мне известно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...