Android Facebook вход не работает с установленным приложением Facebook
Я установил простой логин facebook. Для Android 2.3.6 все работает так, как должно, пользователь получает диалоговое окно входа в систему, вводит данные и приложение продолжается. Я думал, что это ошибка android-версий, но выходит, что логин не работает, когда на телефоне установлено приложение facebook!
проверили это на: Гэлакси Эйс 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 Эмулятор Android 4.1.2
даже образцы facebook не работают!
каждый время выполнения приложения -else {
Log.d("SESSION NOT OPENED", "SESSION NOT OPENED");
}
Кажется, что сессия не открыта, но почему это? Следуя этому руководству ... https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
код:
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
Log.d("Access_token", session.getAccessToken());
}
}
});
} else {
Log.d("SESSION NOT OPENED", "SESSION NOT OPENED");
}
}
});
6 ответов
проверьте нижнюю часть шага 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
Если вы не ввели хэш ключа приложения должным образом, Facebook войти через всплывающее окно WebView (если приложение не установлено) будет по-прежнему работать, но войти через родное приложение Facebook не будет.
вы должны увидеть это исключение в LogCat:
com.facebook.http.protocol.ApiException: remote_app_id does not match stored id
Facebook SDK печатает свои исключения, так что проверьте там в любом случае, если есть остальные проблемы.
я пишу этот ответ для тех, кто использует Facebook SDK 4.X
вы можете открыть портал входа в facebook любым из двух способов:
если у вас есть Android устройство с
Android 1.9.X
иFacebook App
устанавливается в устройстве под названиемNative Login
метод здесь, вам не нужно использовать facebookWebView
если вы не установили
Facebook App
в вашем Android устройстве, то это хорошо использоватьWebView
так что для этого Facebook предоставить 3 Constants
-
NATIVE_ONLY
(используется, когда вы хотите открыть только в Facebook приложение) -
WEB_ONLY
(используется, когда вы хотите открыть вWebView
только) -
NATIVE_WITH_FALLBACK
(рекомендуется Facebook обнаружения и opnewebView
если приложение не установлено)
Проверьте ссылку ниже деталь https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting
LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY);
LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);
получите хэш-ключ, используя эту функцию для обоих (debug и release apk), и поместите его в свое приложение в developer.facebook.com/apps
private void calculateHashKey(String yourPackageName) {
try {
PackageInfo info = getPackageManager().getPackageInfo(
yourPackageName,
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:",
Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
это мне очень помогает.. Надеюсь, это вам тоже поможет..
похоже, я не мог получить данные, если бы у меня был активный сеанс facebook (из приложения facebook).
поэтому, прежде чем я открою сеанс, я прошу Force login, даже если у пользователя есть открытый сеанс facebook из приложения facebook.
openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
Так что теперь все работает, но пользователь должен ввести данные вручную. Это не идеально, но это работает.
даже образцы facebook не работали для меня с открытым приложением facebook.
Если кто-то имеет лучшее решение, не стесняйтесь предлагать.
если хэш-ключ неправильно сгенерирован, вы можете столкнуться с такими проблемами, как
отображается собственное диалоговое окно входа в систему, но после принятия разрешений всплывающее окно идет, и ничего не происходит в log cat
но Login и share будут работать нормально, если родное приложение на устройстве отключено (Диалог входа открывается в веб-представлении в этом случае, и для этого не требуется правильный хэш-ключ)
я столкнулся с той же проблемой и решил ее, получив хэш-ключ с помощью этого кода. Хэш-ключ отличался от ключа, созданного с помощью openSSl и keytool
и после обновления этого хэш-ключа в приложении Facebook все работает нормально
//================================== To Get Facebook Hash key Programmatically =========================//
PackageInfo info;
try {
info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.e("hash key", something);
}
} catch (NameNotFoundException e1) {
Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
Log.e("exception", e.toString());
}
просто измените имя пакета и получите правильный хэш-ключ
Отключить Режим Песочницы...Это позволит вашему приложению работать на всех устройствах. Попробуйте это решение