Приложение неправильно настроено для входа в Facebook: Kindle Fire Integration Issue
Мы интегрировали логин Facebook в наше приложение Kindle Fire для Android. Это работает без проблем большую часть времени. Но иногда для некоторых пользователей, когда они пытаются зарегистрироваться с помощью входа в Facebook, происходит сбой с ошибкой "APP неправильно настроен для входа в Facebook". Мы проверили ключ хеша, имя пакета и все такое, все они верны. Как я уже сказал, это работает для 95% пользователей. Для тех пользователей это терпит неудачу, это терпит неудачу неоднократно. Кто-нибудь из Facebook может помочь нам решить эту проблему? Оценил. (Кстати, мы используем то же самое приложение для Facebook для нашей версии Google Play для Android и с другим ключом хеша, у нас никогда не было этой проблемы для нашего приложения Google Play. Мы получили ключ хеша для Kindle от Amazon.) Поскольку это не так Сбой на любом из наших устройств и сбой только на устройствах некоторых случайных пользователей, мы не смогли получить никаких отладочных сообщений.
PS: Я уже читал ветку " Приложение неправильно настроено для входа в Facebook: проблема интеграции Android с Facebook. Я новый пользователь, я не мог задать этот вопрос там.
5 ответов
У нас была такая же проблема с одним из наших приложений в магазине приложений Amazon. В нашем случае мы поняли, что проблема возникает только в том случае, если выполняются эти три условия:
- Kindle Fire HD
- Приложение Facebook установлено и пользователь вошел в систему
- Пользователь также вошел в Facebook через Настройки -> Моя учетная запись -> Управление социальными учетными записями
Это может объяснить, почему в вашем случае это происходит только в 5% случаев.
Насколько мы могли судить, Amazon отказывается от.apk, который нарушает проверку хэша ключа Android-приложения Facebook.
Решение включает в себя:
- Получение Amazon .apk нашего приложения (не того, которое мы отправили, а того, которое распространяется в магазине приложений Amazon)
- Извлеките сертификат подписи из файла.apk
- Base64 кодирует дайджест SHA закодированного сертификата
- Добавьте полученный хэш Base64 к настройкам нашего приложения Facebook
Это решило проблему.
Получение.apk оказалось сложным. Приложения находятся в папке /data/app файловой системы устройства. Тем не менее, этот каталог защищен для предотвращения его перечисления, поэтому, если вы не знаете имя файла, который вы ищете, вам не повезло. Вы можете, конечно, получить root права на устройство. В качестве альтернативы вы можете испытать свою слепую удачу, выполнив adb pull /data/app/<app-id><suffix>.apk
где суффикс является пустой строкой или -1
, -2
и т. д., пока не получится. Например:
$ adb pull /data/app/com.example.game.apk
remote object '/data/app/com.example.game.apk' does not exist
$ adb pull /data/app/com.example.game-1.apk
remote object '/data/app/com.example.game-1.apk' does not exist
$ adb pull /data/app/com.example.game-2.apk
3658 KB/s (1085140 bytes in 0.289s)
Если такой подход не работает, рутинг может быть единственным вариантом.
Получив файл.apk, вы можете использовать приведенный ниже код, чтобы получить хэш ключа. Сохранить как Main.java
скомпилировать с javac Main.java
и беги с java Main <APK>
Например:
$ javac Main.java
$ java Main com.example.game-1.apk
com.example.game-1.apk: 478uEnKQV+fMQT8Dy4AKvHkYibo=
Добавление 478uEnKQV+fMQT8Dy4AKvHkYibo=
к ключевым хэшам наших настроек приложения Facebook, а затем решает проблему. Мне любопытно, найдут ли другие люди такой же хэш, который мы получили (что означало бы, что все игры на Amazon отказываются с одним и тем же ключом). В нашем случае хеш начался с wwYPegrz...
,
Вот код:
import java.security.MessageDigest;
import java.security.cert.Certificate;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import sun.misc.BASE64Encoder;
public class Main {
public static void main(String[] args) throws Exception {
for (String jarFilename : args)
extractHash(jarFilename);
}
private static void extractHash(String jarFilename) throws Exception {
BASE64Encoder base64 = new BASE64Encoder();
MessageDigest sha1 = MessageDigest.getInstance("SHA");
Set<Certificate> certificates = new HashSet<Certificate>();
JarFile jarFile = new JarFile(jarFilename);
for (JarEntry jarEntry : Collections.list(jarFile.entries())) {
jarFile.getInputStream(jarEntry).skip(Long.MAX_VALUE);
Certificate[] certs = jarEntry.getCertificates();
if (certs == null)
continue;
certificates.addAll(Arrays.asList(certs));
}
System.out.printf("%s:", jarFilename);
for (Certificate cert : certificates) {
byte[] digest = sha1.digest(cert.getEncoded());
System.out.printf(" %s", base64.encode(digest));
}
if (certificates.isEmpty())
System.out.printf(" NOT SIGNED!");
System.out.println();
jarFile.close();
}
}
Ответ @ Бланки технически правильный, однако я нашел более простой способ: просто зайдите в консоль разработчика Amazon и скопируйте значение, которое я выделил красным прямоугольником:
Решение от Бланка работает.
Однако вот еще одно решение, которое легче сделать, если вы можете воспроизвести проблему на Kindle Fire.
Получите из LogCat запрос на аутентификацию, отправленный Facebook:
03-13 15:21:19.360: D/WebCore(26863): *-* Total load time: 1535.31 ms, thread time: 287.00 ms for
https://m.facebook.com/dialog/oauth?android_key=XXXXXXXXXXXXX&calling_package_key=<app_package_id>
&client_id=YYYYYYYYYYYY&display=touch&redirect_uri=fbconnect%3A%2F%2Fsuccess&scope=email%
2Cpublish_stream&type=user_agent&_rdr
android_key
параметр является Hash Key
вашего приложения. Вам нужно добавить этот ключ в Dashboad Facebook.
Примечание: будьте осторожны, формат кодирования вашего хэша в запросе https может отличаться от того, который нужен Facebook.
Я думаю, что проблема с hashkey, я также столкнулся с той же проблемой. Я решил это, загрузив openssl и сгенерировав хэш. Попробуйте следующий ответ /questions/36624662/oshibka-facebook-login-neverno-nastroen/36624680#36624680
Обнаружен еще более простой способ справиться с этим на Kindle или любом другом устройстве. Если у вас установлено приложение FB (в моем случае я не пробовал использовать другие пути входа, но может и работать?), А используемый вами логин указан как разработчик в приложении FB на developer.facebook.com для В рассматриваемом приложении хеш появится в сообщении об ошибке, которое оно выдает в самом приложении. Что-то говорит о том, что "Хэш-ключ xxxxxxxxxxxxxxxxx не был распознан. Управляйте своими хэш-ключами на портале разработчика для идентификатора приложения гггггггггггг".
Извините, если текст не совсем правильный, я не снимал его с экрана до того, как сам решил проблему, но в этом суть.