Аутентификация Facebook работает на эмуляторе, но не на физическом устройстве - PullRequest
6 голосов
/ 16 апреля 2011

Привет всем, кто только недавно разработал мое первое приложение для Android, которое входит в Facebook и пытается обновить статус без диалогового окна, используя API графа.Приведенный ниже код является кодом авторизации (который был на самом сайте разработчика fbook), и до недавнего времени он работал нормально для меня.Теперь мое приложение нормально регистрируется в моем эмуляторе, но когда я экспортирую файл APK и помещаю его в свой телефон, это дает мне «ошибку аутентификации». Кто-то может объяснить это? Он просто больше не показывает мне страницу входа в систему, после того как я создалновое хранилище ключей и хеш-ключ И, как обычно, обновил этот хеш-ключ на странице моего приложения на Facebook.

Я думаю, что это из-за хеш-ключа и т. д., но я не понимаю этого достаточно хорошо, чтобы понять, что не так. Что я делаюя нажимаю экспорт, приложение, затем я создаю новое хранилище ключей (первый раз, в противном случае я использую существующее хранилище ключей), затем я нахожу свой хеш-ключ с помощью «keytool exportcert» и т. д., как показано на сайте разработчика fbook. Затем я ввожу этот хеш-ключв приложение на моей учетной записи Facebook. Но иногда, хотя пароль хранилища ключей правильный, он говорит, что «формат хранилища ключей» отличается, хотя я использовал его до того же приложения! Тогда мне нужно создать новое хранилище ключей, и exportcert снова и всеэто боль! Должен быть более легкий путь?

Может кто-нибудь объяснитькак работает хэш-ключ для приложений Facebook?

Заранее спасибо!

Мой код аутентификации:

public void login()
{

    facebook.authorize(this,new String[] { "email", "read_stream", "publish_stream"}, new DialogListener(){
        int fbcheck=0;
        @Override
        public void onComplete(Bundle values) {
            fbcheck=1;
        facebookauthcheck(fbcheck);
        }

        @Override
        public void onFacebookError(FacebookError error) {
            fbcheck=0;
            facebookauthcheck(fbcheck);
        }

        @Override
        public void onError(DialogError e) {
        fbcheck=0;
        facebookauthcheck(fbcheck);
        }

        @Override
        public void onCancel() {
            fbcheck=2;
            facebookauthcheck(fbcheck);
            }

    });
}

public void facebookauthcheck(int fbcheck)
{
    if (fbcheck == 0)   {
        Toast.makeText(this, "Authentication Error", Toast.LENGTH_LONG).show();
    }
    else if (fbcheck==1)
    {
        Toast.makeText(this, "Authenticated", Toast.LENGTH_LONG).show();
    }
    else
        Toast.makeText(this, "Authentication Cancelled", Toast.LENGTH_LONG).show(); 
}

Ответы [ 2 ]

4 голосов
/ 23 августа 2011

Да, у меня была эта проблема,

Он отлично работал на эмуляторе, отлично работал на моем телефоне разработчика, но не удался на телефоне тестового пользователя.

Это связано с приложением Facebook и SSO.

Прочитайте это: http://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/

Имеет 3 решения.

Я не смог заставить SSO работать, поэтому я выбрал второй вариант (отказаться от SSO!) Это делается:

  facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, this);

Если вы хотите исправить это и заставить SSO работать:

Правильно сгенерируйте ваш хэш-ключ для отладочного сертификата apk. (подробно описано в ссылке выше).

Ref:

Соответствующий вопрос SO

0 голосов
/ 13 мая 2013

Я использую логин на Facebook с фрагментами (пожалуйста, замените 'активность') на 'this':

 private void loginToFacebook()
    {
        mPrefs = activity.getPreferences(Context.MODE_PRIVATE);
        facebook = new Facebook(APP_ID);
        accessToken = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if (accessToken != null)
        {
            facebook.setAccessToken(accessToken);
        }

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

        if (!facebook.isSessionValid())
        {
            facebook.authorize(activity, new String[] {"publish_stream"}, Facebook.FORCE_DIALOG_AUTH, new DialogListener() {

                public void onFacebookError(FacebookError arg0) {
                    // TODO Auto-generated method stub

                }

                public void onError(DialogError arg0) {
                    // TODO Auto-generated method stub

                }

                public void onComplete(Bundle arg0) {
                      SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token", facebook.getAccessToken());
                        editor.putLong("access_expires", facebook.getAccessExpires());
                        editor.commit();                        
                        uploadPhoto(facebook, bitmap, null); // calling another method to upload an image to FB after logging in..              
                }

                public void onCancel() {
                    // TODO Auto-generated method stub

                }
            });

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