Вход в приложение Android через Facebook не работает с установленным приложением Facebook

Этот код работает хорошо, когда я удалил приложение Facebook, но не работал с установленным приложением Facebook. Я использую Facebook SDK 4.0.

Это мой код

package com.example.nhp04.gqfood;
import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;



public class Login extends AppCompatActivity implements Animation.AnimationListener {

private String info = "";
private LoginButton loginButton;
private CallbackManager callbackManager;
private AccessTokenTracker tracker;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        setContentView(R.layout.activity_login);
loginButton = (LoginButton)findViewById(R.id.login_button);



loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            AccessToken accessToken = loginResult.getAccessToken();
            Profile profile = Profile.getCurrentProfile();
            info = ("User ID: " + 

    loginResult.getAccessToken().getUserId() + "\n" + "Auth Token: " + loginResult.getAccessToken().getToken());
                }

                @Override
                public void onCancel() {
                    info = ("Login attempt canceled.");
                }

                @Override
                public void onError(FacebookException e) {
                    info = ("Login attempt failed.");
                }
            });
            System.out.println(info);
            tracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {

            }
        };
        tracker.startTracking();
    }
    }

эта функция для проверки входа

public boolean isLoggedIn() {
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    return accessToken != null;
}

это в методах Resume и Stop

@Override
protected void onResume() {
    super.onResume();
    if (isLoggedIn()){
        Intent home = new Intent(this, home.class);
        startActivity(home);
    }
}

@Override
protected void onStop() {
    super.onStop();
    tracker.stopTracking();
    finish();
}

А это мой onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        Intent home = new Intent(this, home.class);
        startActivity(home);
    } else {
        Toast.makeText(getApplicationContext(), "Unable to login please check your internet connection",Toast.LENGTH_LONG).show();
    }
}

person Yaseen Ahmad    schedule 25.04.2016    source источник
comment
Я уже сделал это, я просто предлагаю этот вопрос в качестве контрольного вопроса, чтобы он помог другим узнать больше.   -  person Yaseen Ahmad    schedule 16.08.2017


Ответы (4)


где ваш onActivityResult() код. В onActivityResult() вам нужно использовать callbackmanager. Пользователь ниже кода:

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);

}

выше будет работать как во фрагменте/активности. Убедитесь, что у вас есть

1. facebook app installed on your testing device
2. In facebook developer account check whether you have mentioned 
- correct package name : refer your android project manifestfile.xml

- check that have you mentioned correct launcher class
- Check that you have given correct debug/release hash key

3. Cross check your facebook application id and that mentioned in your manifestfile.xml facebook meta data are same

В вашем коде измените ниже

создать вас callbackmanager после setContentView(...);

измените его на ниже FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(this); setContentView(R.layout.activity_login); callbackManager = CallbackManager.Factory.create();

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

Напишите комментарий, если у вас все еще есть проблема

person MobDev    schedule 05.05.2016
comment
поместите свой callbackmanager после setContentView в метод onCreate и повторите попытку - person MobDev; 05.05.2016
comment
выполните проверки для 1. идентификатора приложения facbook в файле манифеста, как в вашей учетной записи разработчика fb 2. проверьте правильность имени вашего пакета и MainActivity, упомянутых в учетной записи разработчика fb 3. Убедитесь, что вы добавили правильный хеш-ключ на основе хранилища ключей отладки или выпуска - person MobDev; 05.05.2016
comment
реализовать @Override public void onError (ошибка FacebookException) { } - person MobDev; 05.05.2016
comment
внедрить onError в вызов регистрации fb и проверить, какое сообщение об ошибке он показывает - person MobDev; 05.05.2016
comment
также проверьте журнал .. он выдаст какое-то сообщение от facebook с некоторой ошибкой - person MobDev; 05.05.2016
comment
проверьте код, я уже добавляю методы onError и onCancel - person Yaseen Ahmad; 05.05.2016
comment
Хорошо, вот обновление: ваш код Android хорош. Я приложил к этому руку. Я смог войти. но проверьте свой идентификатор приложения facebook и настройки файла manifestfile.xml - person MobDev; 05.05.2016
comment
да!!! необходимо переопределить onActivityResult, чтобы обратный вызов входа в систему работал. Спасибо, вы спасли мой день! - person mili; 25.10.2017

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

person Idrish Multani    schedule 29.04.2016

Пожалуйста, измените версию facebook sdk, после того, как вы очистите и пересоберете приложение, оно заработает.

person Krishnan    schedule 04.05.2016

если вы получаете сообщение об ошибке, которое выглядит следующим образом: Ошибка

Неверный хэш ключа. Хэш ключа "...5GAvm/gHi..." не соответствует ни одному из сохраненных хэшей ключей. Настройте хэши ключей вашего приложения на странице https://developers.facebook.com/apps/...55.../

затем скопируйте хэш-ключ, указанный в сообщении об ошибке, и замените им старый и повторите попытку с приложением Facebook, установленным на вашем устройстве.

person Chidi    schedule 30.10.2019