Програма неправильно налаштована для входу в Facebook: проблема інтеграції Android у Facebook


76

Я інтегрував свою програму з Facebook, і для цього я використовую графічний API Facebook . Я отримую інформацію про профіль та друзів. Це добре працює на моєму пристрої, який має Android 2.3 (Gingerbread), але нещодавно мій клієнт зіткнувся з проблемою, коли він намагається підключитися до Facebook через мій додаток. На його пристрої встановлено Android 4.0 (Ice Cream Sandwich). Коли він натискає кнопку в додатку, який переводить його на екран входу в Facebook, після входу він отримує повідомлення:

Мій додаток неправильно налаштовано для входу в Facebook. Натисніть Добре, щоб повернутися до програми без підключення до Facebook.

Повідомлення про помилку Facebook

Я не розумію, в чому проблема, пов’язана вона з версією Android чи що.

Як я можу вирішити цю проблему?


4
Ви впевнені, що це не пов’язано з SSO? У мене була та сама проблема, коли вона працювала нормально, коли додаток FB не було встановлено, але коли додаток FB було встановлено, я отримав помилку вище.
Крістер Нордвік,

4
@ AB1209, прийнятою відповіддю є неправильна відповідь на ваше запитання. Будь ласка, дивіться нижче мою відповідь і не використовуйте прийняту відповідь як своє рішення.
Jesse Chen

2
@JesseChen, дякую за вказівки.
Арун Бадоле,

@ AB1209 hii, ти можеш просто не прийняти відповідь, якщо якийсь орган хоче знати про те, що вони можуть зробити це не так ...
BBdev

1
Дійсно, ця помилка також трапляється у власних зразках SDK від Facebook! Піди розберися.
ІгорГанапольський

Відповіді:


90

Я працюю у Facebook, і це важливе питання, яке потрібно вирішити. Інша відповідь на це запитання свідчить про те, що відключення єдиного входу є дуже поганим і це відкриє ваш додаток для зловмисних програм, які можуть викрасти облікові дані вашого користувача у Facebook.

Злом запускає діалогове вікно WebView до Facebook без єдиного входу, і користувач повинен ввести свої облікові дані для входу в це діалогове вікно. Шкідливі програми можуть потім легко вкрасти цю інформацію. Завжди рекомендується правильно застосовувати Facebook SSO, щоб забезпечити безпеку вашого додатка та захистити конфіденційні дані вашого користувача.

До того, як додати це повідомлення про помилку, діалогове вікно автоматично закривалося без попередження та мовчки виходило з ладу. Ми додали це повідомлення про помилку, щоб наочно показати, що на інформаційній панелі програми Facebook існує проблема з конфігурацією вашого додатка. Якщо ви перевірите свій LogCat для Android, ви побачите, що після натискання кнопки «Гаразд» має з’явитися повідомлення про помилку, яке відображатиме більш технічний опис того, що спричиняє помилку автентифікації.

Наприклад, якщо ви використовуєте наш приклад Hackbook і не вказали свій власний APP_ID у вихідному коді та не додали свій хеш-ключ на інформаційну панель, ви побачите цю помилку в LogCat після натискання "Добре" в рідному діалоговому вікні єдиного входу (якщо Util.ENABLE_LOG має значення true):

D / Facebook-авторизація (24739): Помилка входу: invalid_key: Невідповідність клавіш Android. Ваш ключ "uk3udeH7vrOGNFH2FJjdJbdWJWI" не відповідає дозволеним клавішам, вказаним у налаштуваннях програми. Перевірте налаштування програми на веб- сайті http://www.facebook.com/developers

Ми додали візуальне повідомлення про помилку, щоб допомогти вам. Теоретично це не порушує попередніх реалізацій, якщо для початку було реалізовано правильно . Якщо ви бачите це повідомлення про помилку, це означає, що ви неправильно налаштували параметри програми на своїй інформаційній панелі .
Перевірте свою назву класу / пакета Android, хеш-клавіші Android тощо. Ви не побачите цього повідомлення, якщо все зробили правильно.

Таким чином , ви отримуєте це повідомлення про помилку, оскільки існує проблема з конфігурацією вашого додатка, наприклад, невідповідність між хеш-клавішами Android на вашій інформаційній панелі. Перш ніж Facebook додав це повідомлення про помилку, діалогове вікно запустилось, а потім автоматично закрилося та не вдалося. Щоб виправити це, перевірте LogCat на наявність повідомлень про помилки та переконайтесь, що все правильно виконано. Ви можете прочитати нашу документацію, щоб переконатися, що у вас все правильно. Не використовуйте прийняту відповідь на це запитання.

Ви також можете стежити за зовнішнім звітом про помилки, про який повідомляв розробник Facebook, щоб отримати додаткові оновлення.


5
Привіт, це Ширіш з Facebook. Я тут погоджуюсь з Джессі. Будь ласка, не слідкуйте за прийнятою відповіддю тут. Це, безумовно, проблема з налаштуваннями вашого додатка. Зафіксуйте помилку та перегляньте деталі. Це допоможе вам виправити проблему як на Android, так і на iOS.
Shireesh Asthana

1
FWIW У мене теж була ця проблема; Я вирішив це, видаливши всі хеші та перебудувавши свої розробницькі та виробничі ключі та додавши їх на портал fb dev. +1 за цю відповідь
Nirvana Tikku

1
Питання вирішено. Чим вам за вхід. Я новачок у розробці Android. Надане мною рішення "вирішує" проблему, але пропонує інші проблеми.
rmcc

1
Ага, я вважаю, що моя проблема полягала в тому, що у мене був лише хеш ключа випуску у моєму додатку Facebook, але мені також потрібно було включити хеш ключа налагодження, тому, коли я працював у режимі налагодження, він постійно видавав мені цю помилку. Хоча я так і не отримав logcat, щоб передати мені це повідомлення ...
WOUNDEDStevenJones

2
Цей хлопець знає, про що він говорить. У мене була та сама проблема, і я виявив, що мій маркер / ключ / все, що було неправильним через погану версію openSSL. після виправлення це повідомлення зникло. Дякую Джессі!
Еван Р.

15

Спробуйте встановити його так:

Спочатку завантажте OpenSSL (якщо у вас 64-розрядна машина, ви повинні завантажити openssl-0.9.8e X64 , не останню версію, openssl-0.9.8k X64, оскільки вихідні дані будуть недійсними). Витягніть свої файли, створіть папку openssl, наприклад в C: /, і скопіюйте туди файли.

Знайдіть свій шлях до keytoo. Моє C: \ Program Files \ Java \ jdk1.7.0_05 \ bin.

Знайдіть свій шлях до debug.keystore. YВи можете побачити, що таке шлях, якщо відкрити в Eclipse, меню Вікно -> Налаштування -> Android -> Збірка , і ви побачите сховище ключів налагодження за замовчуванням: -і шлях.

Знайдіть свій шлях до openssl. У мене C: \ openssl8e \ bin /.

Відкрийте cmd і введіть:

"C: \ Program Files \ Java \ jdk1.7.0_05 \ bin \ keytool" -exportcert -alias androiddebugkey -keystore "C: \ Users \ User.android \ debug.keystore" | "C: \ openssl8e \ bin \ openssl" sha1 -двійковий | "C: \ openssl8e \ bin \ openssl" base64

І потім натисніть Enter.

Введіть пароль: android

Ви отримаєте свій хеш-ключ для debug.keystore .

Коли ви експортуєте підписаний файл .apk і створюєте сховище ключів для програми, просто замініть у cmd debugkeystore псевдонім вашим псевдонімом для програми, шлях до магазину ключів шляхом до вашого новоствореного магазину ключів для програми та вставте пароль для вашого app.keystore, і ви отримаєте новий хеш-ключ для підписаного додатка.


2
Єдине рішення, яке працювало для мене ... Важливий X64 openssl-0.9.8e .
Baseer

2
У мене була ця проблема, версія k створила недійсний хеш. Дякуємо, що знайшли це!
SimpsOff

2
Я люблю тебе це допомогло лише останнє.
Prateek

12

Відповідь Джессі Чена чудова. Facebook SDK чудово працює, не ламайте його.

Я знову зіткнувся з цією проблемою і виявив, що документація Facebook SDK виправлена ​​і зараз дуже гарна. Тепер це керівництво, як налагоджувати та відпускати хеш-ключі, які можна встановити; просто робіть так, як сказано.

Нижче моя стара історія. Не вистачає того, що ви можете встановити два хеш-ключі, один для налагодження та другий для підписаної, випущеної програми для старого Play Store .


Я виявив, що проблема була в моєму випадку в документації Facebook SDK в. Це допомогло нам використовувати хеш ключа налагодження та помістити його в конфігурацію програми Facebook. Хеш керується таким чином:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Це чудово працює, коли ви дублюєте або запускаєте програму від Eclipse .

Але якщо ви публікуєте свою програму в Andoid Play, ви повинні використовувати власний ключ видавця, щоб експортувати підписаний файл .apk. З цим .apk хеш у консолі програми Facebook більше не діє! Ви повинні отримати хеш для ключа розробника таким чином:

keytool -exportcert -alias <developer alias> -keystore ~/.android/<developer keystore> | openssl sha1 -binary | openssl base64

І помістіть його в хеш-ключ Android на консолі програми Facebook для опублікованої програми. Після цього SSO знову добре працює для вашого підписаного файлу .apk.


8

З того, що я міг зрозуміти, це проблема Facebook і про неї повідомляється. Але проблема зберігається.

Шлях обійти це (протестовано на 2.3.3) - зламати Facebook SDK, знайти 2 способи авторизації та змінити DEFAULT_AUTH_ACTIVITY_CODE на FORCE_DIALOG_AUTH . Це вимкне функцію єдиного входу.

Якщо вам більше подобається

public void authorize(Activity activity, String[] permissions,
            int activityCode, final DialogListener listener) 

і вимкніть startSingleSignOn частину . Бажано не робити цього, оскільки врешті-решт Facebook вирішить проблему, і вам залишиться лише повернути стару константу назад.

РЕДАГУВАТИ

Це рішення породжує проблеми безпеки. Перевірте відповідь Джессі Чена.


Це працює, але я сподіваюся, незабаром Facebook вирішить цю проблему.
Арун Бадоле

4
Привіт усім, я працюю у Facebook, і ми не рекомендуємо використовувати цей хак. Це проблема безпеки та може порушити облікові дані вашого користувача у Facebook. Нижче я розмістив більш ґрунтовну відповідь.
Jesse Chen

5

Я зіткнувся з тією ж проблемою, витративши 24 години та багато пошуків, ми використовуємо цей метод для вирішення моєї проблеми.

  1. Перевірте ідентифікатор поточного пакета вашого проекту Xcode, наприклад: com.yourcompanyname.yourappname

  2. використовуйте той самий ідентифікатор набору com.yourcompanyname.yourappname для створення програми у Facebook, див. вкладення.

введіть тут опис зображення


це ANdroid, а не iOS
jesses.co.tt

3

У мене ця проблема була декілька хвилин тому, 4.0.4, і вона, здається, вирішила сама себе.


Тут точно так само. Я думаю, що у Facebook була гикавка.
Sander van't Veer

Чужий тут - один із моїх пристроїв показує цю проблему. Інші журнали чудові. Код на 100% однаковий. З тих пір, як їх IPO справи пішли вниз :)
Вайден

у мене така сама проблема. коли додаток Facebook. встановлено це повідомлення показано.
eyal

3

Хоча і пізно, але все-таки корисно: * Ось спосіб узгодження (для ключа налагодження змініть відповідно до випуску): *

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\<User>\.android\debug.keystore" > <Drive letter>:\debug.txt
openssl sha1 -binary "<Drive letter>:\debug.txt" > "<Drive letter>:\debug_sha.txt"
openssl base64 -in "<Drive letter>:\debug_sha.txt" > "<Drive letter>:\debug_base64.txt"

Хеш знаходиться в останньому створеному файлі: debug_base64.txt .... відкрийте його та скопіюйте хеш.

Не забудьте замінити "" на своє ім'я користувача та букву диска на ваш вибір


2

Створюючи хеш ключа, у вас може з’явитися щось, що в кінці має знак рівності "=", наприклад ga0RGNYHvNM5d0SLGQfpQWAPGJ8 = . Хоча Facebook із задоволенням приймає знак рівності як частину хеш-ключа, вам доведеться його видалити, щоб він запрацював.

Крім того, ознайомтесь із прийнятою відповіддю на Android Facebook SDK 3.0, яка надає "remote_app_id не відповідає збереженому ідентифікатору" під час входу в систему : отримуючи хеш ключа для налагоджувального сховища, використовуйте пароль "android". В іншому випадку хеш ключа буде неправильним, і ви отримаєте помилку, вказану у питанні (будьте приємні і проголосуйте там відповідь, якщо це допомогло вам).


1

Щодо програм, підписаних власним сховищем ключів: Провівши кілька годин, вирішуючи це питання, я нарешті отримав його і хочу надати відповідь тим, хто все ще страждає:

Мої кроки: я підписав свій додаток через eclipse своїм власним файлом сховища ключів (НЕ debug.keystore). Через командний рядок та відомі команди (keytool -exportcert -alias -keystore ~ ​​/ .android / | openssl sha1 -binary | openssl base64) я успішно отримав хеш ключа. Вставив хеш ключа на інформаційну панель розробника, зачекав кілька хвилин -> Все та ж ПОМИЛКА (як зазначено у питанні вище). я спробував декілька різницьких інструментів, на декількох jdk і т. д. нічого не змінилося.

Рішення: Я увімкнув налагодження у маніфесті, увімкнув налагодження у facebook sdk. тоді я підписав apk своїм власним сховищем ключів і завантажив його на реальний пристрій. я підключив пристрій через usb і відкрив перспективу DDMS, щоб побачити logcat на пристрої.
Я запустив програму і дозволив повідомлення про помилку. Він виводить ключ, абсолютно відмінний від ключа, сформованого keytool. Я взяв цей ключ з logcat, вставив його на інформаційну панель розробника і вуаля -> ВСЕ ПРАЦЮЄ

Я досі не знаю, чому це відбувається або що спричиняє неправильний ключ, але таким чином це працює для мене.


1

В системі Debian як Убунту використовувати keytoolв javaFOUND в директорії /usr/lib/jvm/jdk*.*.*/bin/keytoolі генерувати як це

/usr/lib/jvm/jdk1.7.0/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Таким чином ви отримаєте справжній хеш-ключ, який можна помістити під хеш вашого додатка на facebook.


1

Зазвичай цю проблему можна було вирішити двома перевірками:

  • прапорець на консолі facebook, щоб опублікувати конфігурацію facebook у реальному часі
  • невідповідність клавіш API

1

Мені вдалося вирішити проблему, яку я мав з неправильно налаштованим для Facebook на Android, переконавшись, що я маю правильний хеш-ключ для версії випуску.

Щоб отримати хеш-ключ випуску версії, знайдіть ключ, який ви використовували для підпису програми, і виконайте наступне, вставте ім’я псевдоніма вашого сховища ключів (без дужок). Якщо ви не знаєте свого псевдоніма, його можна знайти, експортувавши програму як підписану програму, а псевдонім знаходиться на другій сторінці майстра. Також вставте шлях до вашого сховища ключів (без дужок).

keytool -exportcert -alias [Alias of your keystore] -keystore [Path to keystore] | openssl sha1 -binary | openssl base64

0

Я зробив Toastдля винятків і виявив, що він видає виняток невідповідності ключів, сьогодні додав ключ на FBсторінці програми, і він працює нормально


0

Також зіткнувся з цією проблемою.

Просто зайдіть на розробників Facebook сторінці Початок тут

і виконайте крок 4 - річ із командного рядка.

Працював у мене.

Насолоджуйтесь.


0

У мене просто була та сама проблема, і рішення виявилося надзвичайно простим. Коли я створював програму на інформаційній панелі, я додав лише хеш ключа для сховища відладок Android. Все це чудово працює, якщо ви встановите програму як розробник за допомогою кабелю USB.

Отримавши програму в магазині Play, ви використовуватимете робочий ключ для підписання програми. Це також означає, що вам потрібно отримати хеш ключа виробничого ключа, як для ключа налагодження, і додати його як другий хеш до списку рідних хешів додатків.

щоб просто пам’ятати вам, як працює хеш ключа: keytool -exportcert -alias -keystore ~ ​​/ keys / android_keystore | openssl sha1 -двійковий | openssl base64

Сподіваюся, це допоможе!


0

У мене була подібна проблема, але для iOS.

Рішення полягає у налаштуванні програми Facebook на інформаційній панелі розробника Facebook.

Для iOS потрібно зробити 2 речі:

  1. Увімкнено Facebook Login

  2. Ідентифікатор пакета повинен збігатися з додатком


0

Це проблема магазину ключів. Налаштуйте своє затемнення для використання того самого магазину ключів, для якого було налаштовано додаток.


Чому він використовує debug.keystore keyhash? Після випуску програми, чи не слід використовувати keyhash із файлу магазину ключів, який використовується для підписання програми?
Rameez Hussain

0

Я отримав ту ж помилку кілька днів тому. У моєму випадку це було пов’язано з невідповідністю ключів Android. Ось як я це виправив, якщо це може допомогти і вам:

Відкрийте Util.java у Facebook SDK, встановлений private static boolean ENABLE_LOG = true;. Тепер запустіть програму та введіть ідентифікатор електронної пошти та пароль. Facebook надсилає назад підпис, якщо є невідповідність ключів. Цей ключ (підпис) ви знайдете в LogCat . Просто скопіюйте цей ключ і вставте його на інформаційну панель програми. Це має вирішити проблему. Не забудьте private static boolean ENABLE_LOG = true;повернути значення false.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.