Подтвердить что ты не робот

Как избежать уже авторизированных в Android Facebook SDK

Я получаю совершенно бесполезную страницу, когда я использую Single Sign on для Android Android SDK.

"Вы уже разрешили happyapp. Нажмите" ОК", чтобы продолжить.

Эта страница разрушит пользовательский интерфейс. Как я могу избавиться от этого. Многие люди видели это, но решение не опубликовано.

Даже Facebook признает, что это проблема, см.: http://forum.developers.facebook.net/viewtopic.php?id=84548

Кто-нибудь знает какую-нибудь работу?

4b9b3361

Ответ 1

То, как я это делал (без дополнительного решения OAuth), заключалось в том, чтобы хранить токен доступа в настройках, как предложил Кивели. Когда начинается основное действие, найдите токен из настроек, если он не инициирует процесс авторизации и сохраняет полученный токен в настройках.

Более сложная задача заключается в том, чтобы обрабатывать токен или отмену авторизации вашего приложения (т.е. токен находится в настройках, но уже недействителен).

В этом случае при каждом вызове FB API/graph проверьте, не произошло ли исключение, указывающее на аутентификацию. Если это не удается, снова запустите процедуру авторизации/хранения токена.

Ответ 2

используя предложение здесь, это код, который работал у меня, надеюсь, что это поможет кому-то

прежде чем войти в систему, выполните

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this); 
                        String access_token = prefs.getString("access_token", null); 
                        Long expires = prefs.getLong("access_expires", -1);


                        if (access_token != null && expires != -1)
                        {
                            facebook.setAccessToken(access_token);
                            facebook.setAccessExpires(expires);
                        }


                        if (!facebook.isSessionValid())
                        {
                            facebook.authorize(FacebookLogin.this, new DialogListener() {
...

после успешного входа в систему выполните

String token = facebook.getAccessToken();
long token_expires = facebook.getAccessExpires();

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this);

prefs.edit().putLong("access_expires", token_expires).commit();

prefs.edit().putString("access_token", token).commit();

Ответ 3

Я столкнулся с этой проблемой после того, как любое устройство разрешило мое приложение с помощью facebook. Мой эмулятор продолжал работать отлично, но я не мог заставить телефон пройти "хороший" диалоговый экран и сделать что-нибудь значимое. Я добавил параметр facebook.FORCE_DIALOG_AUTH для вызова authorize(). Теперь он просит меня войти один раз на устройство и установить TOKEN и истечение в общих настройках, как и должно быть.

Button button_facebook = (Button) findViewById(R.id.button_share_on_facebook);
button_facebook.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        if (access_token != null) {
            facebook.setAccessToken(access_token);
        }

        if (expires != 0) {
            facebook.setAccessExpires(expires);
        }

        if (!facebook.isSessionValid()) {
            facebook.authorize(YourActivity.this, new String[] { "user_photos,publish_checkins,publish_actions,publish_stream" }, facebook.FORCE_DIALOG_AUTH, new DialogListener() {
                @Override
                public void onComplete(Bundle values) {
                    SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("access_token", facebook.getAccessToken());
                    editor.putLong("access_expires", facebook.getAccessExpires());
                    editor.commit();
                    postSomethingToFacebook();
                }

                @Override
                public void onFacebookError(FacebookError e) {
                    Log.e("Facebook-Authorize", "FacebookError Error: " + e.getMessage());
                }

                @Override
                public void onError(DialogError e) {
                    Log.e("Facebook-Authorize", "DialogError Error: "   + e.getMessage());
                }

                @Override
                public void onCancel() {
                    Log.w("Facebook-Authorize", "Cancelled.");
                }
            });
        } else {
            postSomethingToFacebook();
        }
});

Ответ 4

Обходите SDK и используйте свое собственное решение OAuth. Сохраните токен доступа после его получения. Попытайтесь использовать его напрямую, не отправляя пользователя на страницу разрешения на facebook. Как только токен истечет, вам понадобится разрешение на повторное предоставление. С расширенными функциями появляются обязанности более низкого уровня (и больше работы).

Ответ 5

Если у вас нет приложения FB на вашем устройстве, всплывающее окно появится в вашем браузере Safari.  Установите приложение FB на свое устройство и попробуйте войти в систему с помощью FB, и уже разрешенный экран не появился. Спасибо.