Ответ 1
да, я столкнулся с той же проблемой, разрешил ее, используя приведенный ниже код перед авторизацией
LoginManager.getInstance().logOut();
У меня есть приложение для Android, и я пытаюсь использовать facebook sdk (версия 4.1.0), чтобы получить токен и логин. Вот мой код:
public class LoginActivity extends Activity {
private CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken accessToken = loginResult.getAccessToken();
Log.v(TAG, "Facebook login was successful");
String authToken = accessToken.getToken();
// User authToken here:
}
@Override
public void onCancel() {
Log.v(TAG, "Facebook login was canceled");
}
@Override
public void onError(FacebookException e) {
Log.e(TAG, "Facebook login failed: " + e.getMessage());
}
});
Button facebook_button = (Button) findViewById(R.id.fbButton);
facebook_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
LoginManager.getInstance().logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
Вызывается код, переведенный на приложение facebook и обратно, и OnActivityResult. Однако каждый раз, когда вызывается метод обратного вызова onCancel(). Обратите внимание, что я не использую LoginButton, предоставленный facebook, и у меня есть собственная кнопка (хотя я пробовал этот подход, и результат был таким же). Я дважды и тройной проверил свой идентификатор приложения и keyhash, сгенерированные приложением, и они выглядят корректно. Итак, я не знаю, что еще может быть неправильно. Любая помощь на этом этапе очень ценится.
да, я столкнулся с той же проблемой, разрешил ее, используя приведенный ниже код перед авторизацией
LoginManager.getInstance().logOut();
Причина такого поведения заключается в том, что вы уже вошли в систему. Поэтому, когда вы отменяете его, oncancel() вызывается вместо onsubmit(). Так что просто выполните выход на кнопку выхода из приложения, как это
Импорт →
import com.facebook.login.LoginManager;
Реализация →
LoginManager.getInstance().logOut();
У меня была такая же проблема, в конце концов я нашел проблему. Активность, вызывающая фразу facebook login, содержала android:launchMode="singleInstance"
в файле манифеста.
Комментарий @Doru приведет меня к решению. Я использовал активность Facebook, а не фрагмент.
Вместо
<activity android:name="com.facebook.FacebookActivity"
android:screenOrientation="portrait"
android:launchMode="singleTask" />
Мне нужно было написать
<activity android:name="com.facebook.FacebookActivity"
android:screenOrientation="portrait" />
Что неприятно в этой ошибке, так это то, что это происходит только в старых версиях Android (например, 4.4.2, а не 5.0).
Проблема была просто потому, что идентификатор APP должен был быть в двойных кавычках.
Если кто-то столкнется с этим в будущем, это также может быть вызвано встроенным приложением Facebook, установленным на устройстве, блокирующим логирование по причине X.
В моем случае это бросалось каждый раз, когда я пытался войти в систему. Я, наконец, переключился на родное приложение Facebook, и, когда он был открыт, он потребовал аутентификации и снова зашел в систему из-за некоторой "подозрительной активности" (я думаю, что недавно я изменил свой номер).
Если вы делаете все, что указано выше, и пользователи все еще жалуются на это (и у них установлено приложение, вы можете использовать код внизу, чтобы узнать, установлено ли приложение Facebook в комплекте:), вы можете включить диалог, который просит их проверить приложение Facebook и убедиться, что они все еще вошли в систему, а затем предложит им исправить любые ошибки, прежде чем вносить вкладку в ваше приложение.
//Code to check if Facebook app is installed:
public static boolean doesUserHaveFacebookAppInstalled(Context context){
try{
context.getPackageManager().getApplicationInfo("com.facebook.katana", 0 );
return true;
} catch( PackageManager.NameNotFoundException e ){
return false;
}
}