Error invalid request error description sdk fingerprint is incorrect standoff

Такой сбой происходит каждый раз, когда кто-то хочет авторизоваться посредством применения соцсети ВКонтакте где-то на другом интернет-портале, а таких сегодня очень большое количество. Кстати, следует отметить, ошибка данная первостепенно возникает у пользователей браузера Гугл Хром, однако, и на других браузерах появится вполне может. Главное не переживать и постараться устранить проблему самостоятельно, следуя советам специалистов. Причины […]

На чтение 2 мин Просмотров 1.2к. Опубликовано 05.09.2022

Такой сбой происходит каждый раз, когда кто-то хочет авторизоваться посредством применения соцсети ВКонтакте где-то на другом интернет-портале, а таких сегодня очень большое количество. Кстати, следует отметить, ошибка данная первостепенно возникает у пользователей браузера Гугл Хром, однако, и на других браузерах появится вполне может. Главное не переживать и постараться устранить проблему самостоятельно, следуя советам специалистов.

Причины

Причина сбоя {«error»:»invalid_request»,»error_description»:»Security Error»} – проведенный заблаговременно вход в аккаунт ВКонтакте. По крайней мере, так сообщает непосредственно техподдержка популярной среди пользователей социальной сети. И, действительно, это так, практический опыт многих это доказывает.

Что делать?

Когда пользователю пришло сообщение с ошибкой {«error»:»invalid_request»,»error_description»:»Security Error»}, то необходимо руководствоваться инструкцией.

Алгоритм действий:

  1. Выйти из свой профиля в социальной сети ВКонтакте в своем браузере.
  2. После опять войти в свою учетную запись в соцсети ВК.
  3. Найти необходимый портал и войти на авторизовавшись посредством учетной записи ВКонтакте – ошибка пропадет.

Как становится понятно, если действовать по инструкции, то сбой {«error»:»invalid_request»,»error_description»:»Security Error»} будет устранен буквально за считанные минуты, после чего пользователь сможет входить на любые сайты в интернете через учетную запись социальной сети ВК.

Как сделать перезагрузку операционной системы Андроид?

Первым делом надо зайти в «Меню» смартфона и нажать на «Настройки», далее выбрать категорию «Восстановление и сброс».

По представленному перечню надо опустится в самый низ и кликнуть на «Сброс настроек» (этот пункт на различных мобильных устройствах может иметь разное название: «Сбросить настройки телефона», «Общий сброс», «Стереть все данные», например). Система направит предупредительное сообщение о том, что при сбрасывании настроек удалятся все личные информационные данные, программы, файловые документы.

Что дает перезагрузка смартфона?

Если перезагрузить мобильный, то очистится оперативная память всего лишнего, что ее захламляло, и нормализуется функционирование программ без каких-то негативных последствий для Андроид или другой операционной системы.

К примеру, веб-приложение «диспетчер памяти» элементарно убивает все программы, что применяет пользователь гаджета. Однако, отдельные приложения просто обязаны функционировать, и когда не знаешь, как действовать правильно, лучше обратиться к специалисту.

Содержание

  1. Как исправить ошибку <«error»:»invalid_request»,»error_description»:»Security Error»>?
  2. Ошибка при запуске sdk_fingerprint is incorrect #445
  3. Comments
  4. Footer
  5. Error invalid request error description sdk fingerprint is incorrect на Андроид: что это?
  6. Причины
  7. Что делать?
  8. Как сделать перезагрузку операционной системы Андроид?
  9. Что дает перезагрузка смартфона?
  10. Подключаем FB, VK, G+ в Android. Версия Light
  11. Архитектура решения
  12. Google+
  13. FaceBook
  14. ВКонтакте
  15. Использование кода
  16. sdk_fingerprint is incorrect #490
  17. Comments

Как исправить ошибку <«error»:»invalid_request»,»error_description»:»Security Error»>?

В сегодняшней статье мы рассмотрим с вами ошибку <«error»:»invalid_request»,»error_description»:»Security Error»>, которая наводит на многих пользователей шок, в первую очередь, благодаря своей ужасной длине.

Возникает данная ошибка всякий раз, когда кто-то попытается выполнить авторизацию с помощью социальной сети ВКонтакте где-нибудь на другом веб-ресурсе, а таких сейчас ужасно много. Причем, стоит заметить, ошибка эта прежде всего возникает у пользователей браузера Google Chrome, впрочем, и на других браузерах ее появление также возможно.

Причина ошибки <«error»:»invalid_request»,»error_description»:»Security Error»>– выполненный ранее вход в учетную запись ВК. По крайней мере, так утверждает сама техническая поддержка ВКонтакте. И, как показала практика, это действительно так.

Если вы и сами повстречались с ошибкой <«error»:»invalid_request»,»error_description»:»Security Error»>, то вам нужно сделать следующее:

  • выйдите из свой учетной записи ВК в браузере;
  • затем снова войдите в нее;
  • далее переходим на нужный вам сайт и проводим авторизацию с помощью ВК – проблема решена.

Как видите, ошибка <«error»:»invalid_request»,»error_description»:»Security Error»>решается буквально за пару-тройку минут, после чего вы можете заходить на любые веб-ресурсы в сети через учетку ВКонтакте. Мы надеемся, что данный материал помог вам устранить проблему.

Источник

Ошибка при запуске sdk_fingerprint is incorrect #445

Создал программу в Android Studio, использовал VK api. Вроде бы, авторизация должна работать. Я скомпилировал apk и установил на телефон, но при запуске пишет следующие(пишет в activity авторизации): <«error»:»invalid_request»,»error_description»:»sdk_fingerprint is incorrect»>. Что это значит? Я в настройках своего приложения VK прописал, как положено: Main Activity для Android, Название пакета для Android и отпечаток сертификата и все это происходит, если установлено официальное приложение VK с play market, если удалить приложение VK , то авторизация работает и в приложение заходит.

The text was updated successfully, but these errors were encountered:

Создал программу в Android Studio, использовал VK api. Вроде бы, авторизация должна работать. Я скомпилировал apk и установил на телефон, но при запуске пишет следующие(пишет в activity авторизации): <«error»:»invalid_request»,»error_description»:»sdk_fingerprint is incorrect»>. Что это значит? Я в настройках своего приложения VK прописал, как положено: Main Activity для Android, Название пакета для Android и отпечаток сертификата и все это происходит, если установлено официальное приложение VK с play market, если удалить приложение VK , то авторизация работает и в приложение заходит.

Столкнулись с похожей проблемой. Помогло указать ключ SHA256, не смотря на то, что в инструкции указан SHA1

А я не обратил внимание на эту строчку

By deleting all the colons you’ll get your key’s fingerprint.

После этого взял SHA1, удалил все двоеточия, вставил одной строкой и заработало.

© 2023 GitHub, Inc.

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Источник

Error invalid request error description sdk fingerprint is incorrect на Андроид: что это?

Такой сбой происходит каждый раз, когда кто-то хочет авторизоваться посредством применения соцсети ВКонтакте где-то на другом интернет-портале, а таких сегодня очень большое количество. Кстати, следует отметить, ошибка данная первостепенно возникает у пользователей браузера Гугл Хром, однако, и на других браузерах появится вполне может. Главное не переживать и постараться устранить проблему самостоятельно, следуя советам специалистов.

Причины

Причина сбоя <«error»:»invalid_request»,»error_description»:»Security Error»>– проведенный заблаговременно вход в аккаунт ВКонтакте. По крайней мере, так сообщает непосредственно техподдержка популярной среди пользователей социальной сети. И, действительно, это так, практический опыт многих это доказывает.

Что делать?

Когда пользователю пришло сообщение с ошибкой <«error»:»invalid_request»,»error_description»:»Security Error»>, то необходимо руководствоваться инструкцией.

Алгоритм действий:

  1. Выйти из свой профиля в социальной сети ВКонтакте в своем браузере.
  2. После опять войти в свою учетную запись в соцсети ВК.
  3. Найти необходимый портал и войти на авторизовавшись посредством учетной записи ВКонтакте – ошибка пропадет.

Как становится понятно, если действовать по инструкции, то сбой <«error»:»invalid_request»,»error_description»:»Security Error»>будет устранен буквально за считанные минуты, после чего пользователь сможет входить на любые сайты в интернете через учетную запись социальной сети ВК.

Как сделать перезагрузку операционной системы Андроид?

Первым делом надо зайти в «Меню» смартфона и нажать на «Настройки», далее выбрать категорию «Восстановление и сброс».

По представленному перечню надо опустится в самый низ и кликнуть на «Сброс настроек» (этот пункт на различных мобильных устройствах может иметь разное название: «Сбросить настройки телефона», «Общий сброс», «Стереть все данные», например). Система направит предупредительное сообщение о том, что при сбрасывании настроек удалятся все личные информационные данные, программы, файловые документы.

Что дает перезагрузка смартфона?

Если перезагрузить мобильный, то очистится оперативная память всего лишнего, что ее захламляло, и нормализуется функционирование программ без каких-то негативных последствий для Андроид или другой операционной системы.

К примеру, веб-приложение «диспетчер памяти» элементарно убивает все программы, что применяет пользователь гаджета. Однако, отдельные приложения просто обязаны функционировать, и когда не знаешь, как действовать правильно, лучше обратиться к специалисту.

Источник

Подключаем FB, VK, G+ в Android. Версия Light

Встала передо мной задача – сделать постинг ссылок из Андроида в пару-тройку соцсетей. Причем, максимально простой и легкий – чтобы не плодить сущности и как можно меньше заморачиваться с токенами, сессиями и прочая. Задача, действительно, минимум – только размещение ссылки в собственном аккаунте пользователя. Если к ссылке можно легко добавить описания или картинки – сделать, но не упираться.

В силу разных причин были выбраны Facebook, Vkontakte и Google+. Планировала добавить Twitter, но его Fabric к тому времени еще не вышел, а использовать стороннюю библиотеку не хотелось (см. п.2 ниже). Позже добавлю.

В итоге, задача для этих трех соцсетей получилась следующей:

  1. Максимально простой программный интерфейс постинга ссылок.
  2. Использование только нативных SDK (из тех соображений, что эти знания пригодятся в дальнейшем).
  3. Минимум кода – только самое необходимое для работы.
  4. Работать все должно вне зависимости от наличия у пользователя установленного клиента соцсети. Но если он есть – использовать диалоговые окна клиента.
  5. Пользователю должно выводиться сообщение об успешном или нет размещении записи.
  6. Должна быть возможность программно реагировать на успешное размещение записи.

Архитектура решения

Вариант с отдельной библиотекой в конечном итоге оказался чересчур громоздким – итоговый код составил порядка 250 строк вместе с комментариями и пустыми строками. Причем, все инкапсулировалось в один класс, использовать который достаточно просто.

Поскольку ряд объектов из SDK все же пришлось встраивать в жизненный цикл, то нужен был некий контейнер – или Activity, или Fragment. Я выбрала решение с abstract Activity, т.к. мне нужно было вешать команды постинга на кнопку ActionBar. Причем, делать это для нескольких Activity с разными фрагментами внутри.

В abstract Activity я зашила весь код управления постингом, а наружу выставила 3 метода – по одному для каждой сетки. От этой самой abstract Activity потом унаследовала остальные Activity приложения, в которых были нужны соцсети. В них доступ к нужному коду свелся к вызову метода из родительского класса.

Все, что здесь описано, наверняка можно сделать и с фрагментом. Хотя где-то я наталкивалась на сообщение, что встраивание в жизненный цикл все равно нужно делать для родительской Activity. Не знаю, не пробовала.

Чтобы описанный ниже код заработал, нужно подключить в проект для каждой соцсети свой SDK и зарегистрировать приложение в разделе разработчиков. Все описано здесь:

  • developers.google.com/+/mobile/android
  • vk.com/dev/android_sdk
  • developers.facebook.com/docs/android/getting-started

При разработке использовались описания SDK на родных сайтах соцсетей, статьи на Хабре и SO, код библиотеки ASNE (спасибо автору!)

Google+

Самым простым кодом логично оказалось решение для G+. Вся работа с аутентификацией и сессиями уже встроена в систему. Нужное диалоговое окно (нативное от клиента или веб, если клиента нет) выбирается само, и само же сообщает об успешном постинге. Вот в последнем и крылась единственная засада – реализация п.6 требований. Для отслеживания успешности публикации пришлось добавить одну константу и один условный оператор в onActivityResult:

Сама процедура постинга:

FaceBook

C Фейсбуком пришлось повозиться подольше, и не все требования удалось реализовать.

Получилось:

  • обойтись без токенов, сессий и пр.;
  • добавить к ссылке кучу описаний и картинку – в G+ и VK такого функционала нет или он реализуется нетривиально;
  • использовать нативного клиента, если он установлен, но проверку и вызов нужного диалога в отличие от G+ и VK пришлось писать ручками.

Не получилось:

  • отследить закрытие пользователем диалогового окна (Cancel), если клиент установлен (для веб-диалога все работает) – в этом случае слушатель (см. код ниже) радостно рапортовал об успешной публикации записи. Поиски решения увенчались сомнительным успехом – если не реализована аутентификация из самого приложения, то в принципе невозможно отследить закрытие окна без публикации записи. Невозможно от слова «совсем». Городить только ради этого обработку авторизации и сессий не хотелось, поэтому пришлось выкручиваться текстом сообщения пользователю.

Что в коде…

Прежде всего, надо добавить в string.xml айдишник приложения и вписать в манифест метаданные (не забыв разрешить доступ в интернет – это для всех сетей надо!):

Для работы понадобится вспомогательный объект, который довольно плотно «садится» на методы жизненного цикла. Он нужен для постинга нативным клиентом, если тот установлен. Можно было бы, конечно, обойтись только вебом, но без сессий тот требует ввода пароля каждый раз, что сильно раздражает. А раздражать пользователя лишний раз нехорошо…

Отслеживание успешности публикации тоже пришлось писать ручками. Вот здесь и вылезла та самая бяка с клиентом:

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

ВКонтакте

Пожалуй, самая жуткая документация. Пришлось изрядно попотеть. К тому же, полностью избавиться от использования токенов не удалось – без них никак. Но по порядку…

Здесь тоже придется залезть в манифест ради одной строки кода:

В доках мягко написано, что «стоит добавить, иначе могут быть проблемы с запуском авторизационной activity», но если у пользователя не стоит VK-клиент, то приложение вылетит с ошибкой ActivityNotFoundException.

В самом классе в самом начале надо добавить код для хранения айдишника, прав доступа и управления авторизацией:

В методы жизненного цикла Activity эта зараза тоже влезает глубоко, хотя и не так как ФБ:

Однако при публикации ссылки придется заставить пользователя сначала авторизоваться, а потом уже повторно жать на кнопку публикации. Это плохо с точки зрения юзабилити, но другого варианта я не нашла. Выданный один раз токен вроде как действует около часа. Геморно, но не хуже регистрации при каждом постинге, как в веб-диалоге ФБ.

Еще одна засада скрывалась там, где я подставы не ожидала ну никак. При отладке из Эклипса на реальном устройстве все работало как часы. Но стоило мне установить то же самое приложение из Гугл Плея, как VK-клиент при постинге ссылки начал ругаться:

При этом авторизация проходит успешно, да и то же самое приложение без VK-клиента через веб работает прекрасно. Т.е. fingerprint корректный. Подозреваю глюк клиента. Или не глюк, а намеренно закрытая возможность, что вполне вероятно, глядя на вот эту ссылку (ближе к концу). Буду разбираться дальше, но если кто в курсе и может помочь – буду признательна.

Еще один нерешенный вопрос – почему заголовок ссылки, видимый в окне предпросмотра, теряется при публикации. Ответа не нашла, увы. Тоже буду признательна за подсказки.

Сам код постинга:

Я писала приложение под Support Library, поэтому в коде используется getSupportFragmentManager. Для версий 3.0+ надо заменить его на вызов родного метода.

Использование кода

Ну, вот, вкратце и все. Теперь наследуем нужную Activity от этой и где требуется используем вызовы хххPublish(). Можно на кнопки вешать, а можно и на popup-меню в ActionBar (правда, в этом случае вызов будет не очень красивый, зато само меню рабочее):

Исходный код всей Activity можно скачать здесь.

Источник

sdk_fingerprint is incorrect #490

Интегрировал OAuth vk с помощью com.vk:androidsdk:2.2.0 в приложение для аутинфикации. При аутинфикации с устройства без установленного приложения Vk — всё работает корректно, а при установленном — вылетает ошибка, указанная выше. Отпечаток сертификата — корректен, проверялся не раз.

Используемые технологии/устройства:
com.vk:androidsdk:2.2.0
minSdkVersion 21
targetSdkVersion 29
versionCode 34
Redmi Note 7
Android 10 QKQ1
MIUI Gobal 12.5.1

The text was updated successfully, but these errors were encountered:

sha вводил и с двоеточием, и без.
проверил лишних пробелов не стоит

Один или два у вас сертификата? необходимо проверить, что используется нужный.
На всякий случай рекомендую использовать последнюю версию 3.2.2

При попытке подключить версию 3.2.2:
Could not find com.vk:androidsdk:3.2.2.
Required by:
project :app
Указано один sha, но 2 раза. Один с двоеточиями, второй без, какой оставить?

SHA-1 отпечаток сертификата нужно указывать без двоеточий.
Обратите внимание на имя пакета и главной Activity — может там опечатка?

Удалю с двоеточиями.
Перепроверил несколько раз.
Main activity для Android — MainActivity
Название пакета для Android — ru.ecoline.app

При попытке подключить версию 3.2.2:
Could not find com.vk:androidsdk:3.2.2.

Проверьте пожалуйста, совпадает ли сертификат, которым подписывается приложение и тот от которого берется fingerprint?

Источник

@leks2

Создал программу в Android Studio, использовал VK api. Вроде бы, авторизация должна работать. Я скомпилировал apk и установил на телефон, но при запуске пишет следующие(пишет в activity авторизации): {«error»:»invalid_request»,»error_description»:»sdk_fingerprint is incorrect»} . Что это значит? Я в настройках своего приложения VK прописал, как положено: Main Activity для Android, Название пакета для Android и отпечаток сертификата и все это происходит, если установлено официальное приложение VK с play market, если удалить приложение VK , то авторизация работает и в приложение заходит.

@atom1cx

Создал программу в Android Studio, использовал VK api. Вроде бы, авторизация должна работать. Я скомпилировал apk и установил на телефон, но при запуске пишет следующие(пишет в activity авторизации): {«error»:»invalid_request»,»error_description»:»sdk_fingerprint is incorrect»} . Что это значит? Я в настройках своего приложения VK прописал, как положено: Main Activity для Android, Название пакета для Android и отпечаток сертификата и все это происходит, если установлено официальное приложение VK с play market, если удалить приложение VK , то авторизация работает и в приложение заходит.

Столкнулись с похожей проблемой. Помогло указать ключ SHA256, не смотря на то, что в инструкции указан SHA1

@shushper

А я не обратил внимание на эту строчку

By deleting all the colons you’ll get your key’s fingerprint.

После этого взял SHA1, удалил все двоеточия, вставил одной строкой и заработало.

В сегодняшней статье мы рассмотрим с вами ошибку {«error»:»invalid_request»,»error_description»:»Security Error»}, которая наводит на многих пользователей шок, в первую очередь, благодаря своей ужасной длине.

Как исправить ошибку {«error»:»invalid_request»,»error_description»:»Security Error»}?

Возникает данная ошибка всякий раз, когда кто-то попытается выполнить авторизацию с помощью социальной сети ВКонтакте где-нибудь на другом веб-ресурсе, а таких сейчас ужасно много. Причем, стоит заметить, ошибка эта прежде всего возникает у пользователей браузера Google Chrome, впрочем, и на других браузерах ее появление также возможно.

Причина ошибки {«error»:»invalid_request»,»error_description»:»Security Error»} – выполненный ранее вход в учетную запись ВК. По крайней мере, так утверждает сама техническая поддержка ВКонтакте. И, как показала практика, это действительно так.

Если вы и сами повстречались с ошибкой {«error»:»invalid_request»,»error_description»:»Security Error»}, то вам нужно сделать следующее:

  • выйдите из свой учетной записи ВК в браузере;
  • затем снова войдите в нее;
  • далее переходим на нужный вам сайт и проводим авторизацию с помощью ВК – проблема решена.

Как видите, ошибка {«error»:»invalid_request»,»error_description»:»Security Error»} решается буквально за пару-тройку минут, после чего вы можете заходить на любые веб-ресурсы в сети через учетку ВКонтакте. Мы надеемся, что данный материал помог вам устранить проблему.

#fingerprint #vk

#отпечаток пальца #vk

Вопрос:

Когда пользователь нашего приложения пытается войти в систему с помощью VKontakte, у него появляется белый экран с "error":"invalid_request","error_description":"sdk_fingerprint is incorrect" Основная проблема заключается в том, что эта проблема возникает не на каждом устройстве пользователя, а только на случайных устройствах. На некоторых устройствах он работает нормально, но на других мы получили этот результат. И последнее, если мы распространяем наш apk-релиз из другого источника (Skype, Telegram и т. Д.), Проблема исчезает. Итак, подведем итог. Проблема появляется только при распространении через Play Market и только на части устройств.

Я попытался: 1. вставить release SHA-1 из консоли Google Play в консоль приложений ВКонтакте; 2. вставить извлеченный с помощью VKUtil.getCertificateFingerprint(this, this.getPackageName()); 3. извлечь SHA-1 из консоли и вставить в консоль VK

Мы ожидаем, что он должен работать на каждом устройстве во время распространения Play Market

Ответ №1:

Решаемая проблема путем копирования и вставки всех ключей в консоль VK и удаления всех : символов двоеточия. Будьте внимательны! Больше ничего не удаляйте.

Время прочтения
9 мин

Просмотры 28K

Встала передо мной задача – сделать постинг ссылок из Андроида в пару-тройку соцсетей. Причем, максимально простой и легкий – чтобы не плодить сущности и как можно меньше заморачиваться с токенами, сессиями и прочая. Задача, действительно, минимум – только размещение ссылки в собственном аккаунте пользователя. Если к ссылке можно легко добавить описания или картинки – сделать, но не упираться.

В силу разных причин были выбраны Facebook, Vkontakte и Google+. Планировала добавить Twitter, но его Fabric к тому времени еще не вышел, а использовать стороннюю библиотеку не хотелось (см. п.2 ниже). Позже добавлю.

В итоге, задача для этих трех соцсетей получилась следующей:

  1. Максимально простой программный интерфейс постинга ссылок.
  2. Использование только нативных SDK (из тех соображений, что эти знания пригодятся в дальнейшем).
  3. Минимум кода – только самое необходимое для работы.
  4. Работать все должно вне зависимости от наличия у пользователя установленного клиента соцсети. Но если он есть – использовать диалоговые окна клиента.
  5. Пользователю должно выводиться сообщение об успешном или нет размещении записи.
  6. Должна быть возможность программно реагировать на успешное размещение записи.

Архитектура решения

Вариант с отдельной библиотекой в конечном итоге оказался чересчур громоздким – итоговый код составил порядка 250 строк вместе с комментариями и пустыми строками. Причем, все инкапсулировалось в один класс, использовать который достаточно просто.

Поскольку ряд объектов из SDK все же пришлось встраивать в жизненный цикл, то нужен был некий контейнер – или Activity, или Fragment. Я выбрала решение с abstract Activity, т.к. мне нужно было вешать команды постинга на кнопку ActionBar. Причем, делать это для нескольких Activity с разными фрагментами внутри.

В abstract Activity я зашила весь код управления постингом, а наружу выставила 3 метода – по одному для каждой сетки. От этой самой abstract Activity потом унаследовала остальные Activity приложения, в которых были нужны соцсети. В них доступ к нужному коду свелся к вызову метода из родительского класса.

Все, что здесь описано, наверняка можно сделать и с фрагментом. Хотя где-то я наталкивалась на сообщение, что встраивание в жизненный цикл все равно нужно делать для родительской Activity. Не знаю, не пробовала.

Итак…

Чтобы описанный ниже код заработал, нужно подключить в проект для каждой соцсети свой SDK и зарегистрировать приложение в разделе разработчиков. Все описано здесь:

  • developers.google.com/+/mobile/android
  • vk.com/dev/android_sdk
  • developers.facebook.com/docs/android/getting-started

При разработке использовались описания SDK на родных сайтах соцсетей, статьи на Хабре и SO, код библиотеки ASNE (спасибо автору!)

Google+

Самым простым кодом логично оказалось решение для G+. Вся работа с аутентификацией и сессиями уже встроена в систему. Нужное диалоговое окно (нативное от клиента или веб, если клиента нет) выбирается само, и само же сообщает об успешном постинге. Вот в последнем и крылась единственная засада – реализация п.6 требований. Для отслеживания успешности публикации пришлось добавить одну константу и один условный оператор в onActivityResult:

	private static final int GOOGLEPLUS_REQUEST_CODE = 1001;

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            ...
	    if ((requestCode == GOOGLEPLUS_REQUEST_CODE) && (resultCode == -1)) {
	    	//Do something if success
	    }
	} 

Сама процедура постинга:

	/**
	* Publish link in Google+
	* @param text - message about link (may be changed or deleted by user)
	* @param link - http:// etc
	*/
	public final void googleplusPublish(String text, String link) {
		Intent shareIntent = new PlusShare.Builder(this)
                       .setType("text/plain")
                       .setText(text)
                       .setContentUrl(Uri.parse(link))
                       .getIntent();
		startActivityForResult(shareIntent, GOOGLEPLUS_REQUEST_CODE);
	}

FaceBook

C Фейсбуком пришлось повозиться подольше, и не все требования удалось реализовать.

Получилось:

  • обойтись без токенов, сессий и пр.;
  • добавить к ссылке кучу описаний и картинку – в G+ и VK такого функционала нет или он реализуется нетривиально;
  • использовать нативного клиента, если он установлен, но проверку и вызов нужного диалога в отличие от G+ и VK пришлось писать ручками.

Не получилось:

  • отследить закрытие пользователем диалогового окна (Cancel), если клиент установлен (для веб-диалога все работает) – в этом случае слушатель (см. код ниже) радостно рапортовал об успешной публикации записи. Поиски решения увенчались сомнительным успехом – если не реализована аутентификация из самого приложения, то в принципе невозможно отследить закрытие окна без публикации записи. Невозможно от слова «совсем». Городить только ради этого обработку авторизации и сессий не хотелось, поэтому пришлось выкручиваться текстом сообщения пользователю.

Что в коде…

Прежде всего, надо добавить в string.xml айдишник приложения и вписать в манифест метаданные (не забыв разрешить доступ в интернет – это для всех сетей надо!):

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>

Для работы понадобится вспомогательный объект, который довольно плотно «садится» на методы жизненного цикла. Он нужен для постинга нативным клиентом, если тот установлен. Можно было бы, конечно, обойтись только вебом, но без сессий тот требует ввода пароля каждый раз, что сильно раздражает. А раздражать пользователя лишний раз нехорошо…

Отслеживание успешности публикации тоже пришлось писать ручками. Вот здесь и вылезла та самая бяка с клиентом:

	private UiLifecycleHelper fbUIHelper;

	protected void onCreate(Bundle savedInstanceState) {
            ...
	    fbUIHelper = new UiLifecycleHelper(this, null);
	    fbUIHelper.onCreate(savedInstanceState);
        }

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	    ...
	    fbUIHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
	    	//Listener for Facebook-client if installed
	    	@Override
	    	public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
	    		toastMessage("Запись не опубликована");
	    	}

	    	@Override
	    	public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
	    		toastMessage("Если вы сами не отменили команду, то запись опубликована");
	    	}
	    });

	protected void onResume() {
	   ...
	    fbUIHelper.onResume();
	}

	protected void onSaveInstanceState(Bundle outState) {
	    ...
	    fbUIHelper.onSaveInstanceState(outState);
	}

	protected void onPause() {
	    ...
	    fbUIHelper.onPause();
	}

	protected void onDestroy() {
	    ...
	    fbUIHelper.onDestroy();
	}

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

	/**
	* Publish link in FaceBook
	* @param name - title of block
	* @param caption - text on bottom of block
	* @param description - description of link (between title and caption)
	* @param link - http:// etc
	* @param pictureLink - http:// etc - link on image in web
	*/
	public final void facebookPublish(String name, String caption, String description, String link, String pictureLink) {
  	  if (FacebookDialog.canPresentShareDialog(getApplicationContext(), FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) {
  		  //Facebook-client is installed
  		  FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this)
	    	.setName(name)
	    	.setCaption(caption)
	    	.setDescription(description)
	    	.setLink(link)
	    	.setPicture(pictureLink)
	    	.build();
  		  fbUIHelper.trackPendingDialogCall(shareDialog.present());	    	  
	  } else {
		  //Facebook-client is not installed – use web-dialog
		  Bundle params = new Bundle();
		  params.putString("name", name);
		  params.putString("caption", caption);
		  params.putString("description", description);
		  params.putString("link", link);
		  params.putString("picture", pictureLink);
		  WebDialog feedDialog = new WebDialog.FeedDialogBuilder(this, Utility.getMetadataApplicationId(this), params)
		  	.setOnCompleteListener(new OnCompleteListener() {
		  		//Listener for web-dialog
		  		@Override
		        public void onComplete(Bundle values, FacebookException error) {
		  			if ((values != null) && (values.getString("post_id") != null) && (error == null)) {
		  				toastMessage("Запись опубликована");
		  			} else {
		  				toastMessage("Запись не опубликована");
		  			};
		  		};
		  	})
		  	.build();
		  feedDialog.show();
	  }
	}

ВКонтакте

Пожалуй, самая жуткая документация. Пришлось изрядно попотеть. К тому же, полностью избавиться от использования токенов не удалось – без них никак. Но по порядку…

Здесь тоже придется залезть в манифест ради одной строки кода:

	<activity android:name="com.vk.sdk.VKOpenAuthActivity"/>

В доках мягко написано, что «стоит добавить, иначе могут быть проблемы с запуском авторизационной activity», но если у пользователя не стоит VK-клиент, то приложение вылетит с ошибкой ActivityNotFoundException.

В самом классе в самом начале надо добавить код для хранения айдишника, прав доступа и управления авторизацией:

	private String appId = "1234567"; // Need to change to real app_id
	private static String vkTokenKey = "VK_ACCESS_TOKEN";
	private static String[] vkScope = new String[]{VKScope.WALL};
	private final VKSdkListener vkSdkListener = new VKSdkListener() {
		@Override
	    public void onCaptchaError(VKError captchaError) {
	    	new VKCaptchaDialog(captchaError).show();
		}
	    @Override
	    public void onTokenExpired(VKAccessToken expiredToken) {
	    	VKSdk.authorize(vkScope, true, false);
	    }
	    @Override
	    public void onAccessDenied(VKError authorizationError) {
	    	new AlertDialog.Builder(SocialNetworkActivity.this)
	        	.setMessage(authorizationError.errorMessage)
	            .show();
	    }
	    @Override
	    public void onReceiveNewToken(VKAccessToken newToken) {
	    	newToken.saveTokenToSharedPreferences(getApplicationContext(), vkTokenKey);
	    }
	 };

В методы жизненного цикла Activity эта зараза тоже влезает глубоко, хотя и не так как ФБ:

	protected void onCreate(Bundle savedInstanceState) {
	    ...
            VKUIHelper.onCreate(this);
	    VKSdk.initialize(vkSdkListener, appId, VKAccessToken.tokenFromSharedPreferences(this, vkTokenKey));
	}

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	    ...
	    VKUIHelper.onActivityResult(this, requestCode, resultCode, data); 
	} 

	protected void onResume() {
	    ...
	    VKUIHelper.onResume(this); 
	}

	protected void onDestroy() {
	    ...
	    VKUIHelper.onDestroy(this); 
	}

Однако при публикации ссылки придется заставить пользователя сначала авторизоваться, а потом уже повторно жать на кнопку публикации. Это плохо с точки зрения юзабилити, но другого варианта я не нашла. Выданный один раз токен вроде как действует около часа. Геморно, но не хуже регистрации при каждом постинге, как в веб-диалоге ФБ.

Еще одна засада скрывалась там, где я подставы не ожидала ну никак. При отладке из Эклипса на реальном устройстве все работало как часы. Но стоило мне установить то же самое приложение из Гугл Плея, как VK-клиент при постинге ссылки начал ругаться:

{«error»:«invalid_request»,«error_description»:«sdk_fingerprint is incorrect»}

При этом авторизация проходит успешно, да и то же самое приложение без VK-клиента через веб работает прекрасно. Т.е. fingerprint корректный. Подозреваю глюк клиента. Или не глюк, а намеренно закрытая возможность, что вполне вероятно, глядя на вот эту ссылку (ближе к концу). Буду разбираться дальше, но если кто в курсе и может помочь – буду признательна.

Еще один нерешенный вопрос – почему заголовок ссылки, видимый в окне предпросмотра, теряется при публикации. Ответа не нашла, увы. Тоже буду признательна за подсказки.

Сам код постинга:

	/**
	* Publish link in Vkontakte
	* @param message - message about link (may be changed or deleted by user)
	* @param link - http:// etc
	* @param linkName - title of link - not published (don't know why...)
	*/
	public final void vkontaktePublish(String message, String link, String linkName) {
		VKAccessToken token = VKAccessToken.tokenFromSharedPreferences(this, vkTokenKey);
		if ((token == null) || token.isExpired()) {
			VKSdk.authorize(vkScope, true, false);
			toastMessage("Требуется авторизация. После нее повторите попытку публикации");
		} else {
			new VKShareDialog()
	        .setText(message)
	        .setAttachmentLink(linkName, link)
	        .setShareDialogListener(new VKShareDialog.VKShareDialogListener() {
	            @Override
	            public void onVkShareComplete(int postId) {
	            	toastMessage("Запись опубликована");
	            }
	            @Override
	            public void onVkShareCancel() {
	            	toastMessage("Запись не опубликована");
	            }
	        }).show(getSupportFragmentManager(), "VK_SHARE_DIALOG");    
		} 
	}

Я писала приложение под Support Library, поэтому в коде используется getSupportFragmentManager. Для версий 3.0+ надо заменить его на вызов родного метода.

Использование кода

Ну, вот, вкратце и все. Теперь наследуем нужную Activity от этой и где требуется используем вызовы хххPublish(). Можно на кнопки вешать, а можно и на popup-меню в ActionBar (правда, в этом случае вызов будет не очень красивый, зато само меню рабочее):

    public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
			case R.id.action_share:
				View view = findViewById(R.id.action_share);
				showPopupMenu(view, 
						"https://play.google.com/store/apps/details?id=ru.fantaversum.taleidoscope",
						"Талейдоскоп - бесплатная библиотека рассказов",
						"Талейдоскоп на Google Play",
						"Рассказы и повести с авторскими байками - все бесплатно и без рекламы. Тексты отобраны издательствами. Регулярные обновления.",
						"http://www.taleidoscope.ru/images/fb_logo.png",
						"Рекомендую: Талейдоскоп - бесплатная библиотека. Рассказы и повести с авторскими байками - все бесплатно и без рекламы. Тексты отобраны издательствами. Регулярные обновления.",
						"Талейдоскоп на Google Play");
				break;
		}
        return super.onOptionsItemSelected(item);
    }

    public void showPopupMenu(View view, final String link, 
    							final String fb_name, final String fb_caption, 
    							final String fb_description, final String fb_pictureLink,
    							final String message, final String linkName) {
        PopupMenu popup = new PopupMenu(this, view);
        popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                switch (menuItem.getItemId()) {
                    case R.id.menu_facebook:
                        facebookPublish(fb_name, fb_caption, fb_description, link, fb_pictureLink);
                        return true;
                    case R.id.menu_vkontakte:
                        vkontaktePublish(message, link, linkName);
                        return true;
                    case R.id.menu_googleplus:
                        googleplusPublish(message, link);
                        return true;
                }
                return false;
            }
        });
        popup.show();
    }

Исходный код всей Activity можно скачать здесь.

0 / 0 / 2

Регистрация: 25.04.2016

Сообщений: 71

1

17.06.2016, 09:07. Показов 4233. Ответов 4


Сделал программу в Android Studio, использовал VK api. Вроде бы, авторизация должна работать. Я скомпилировал apk и установил на телефон, но при запуске пишет следующие(пишет в activity авторизации): {«error»:»invalid_request»,»error_description»:»sd k_fingerprint is incorrect»} . Что это значит? Я в настройках своего приложения ВК прописал, как положено: Main Activity для Android, Название пакета для Android и отпечаток сертификата.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

17.06.2016, 09:07

4

petruchodd

129 / 126 / 22

Регистрация: 23.06.2009

Сообщений: 700

17.06.2016, 13:07

2

Есть такая беда. К сожелению с новым сдк от контакта я так и не смог запустить в работу.
В библиотеке в файле VKSdk.java

Java
1
2
3
4
    /**
     * App id for current application
     */
    private static int sCurrentAppId = YOU_ID;

sCurrentAppId принудительно поставь свой . Это как один из вариантов решения.(мне не помог, c новым сдк)

или вот прикрепляю старую версию сдк(какая не знаю/не помню), тут тоже нужно сменить sCurrentAppId на свой, но с этой либой хотя бы работает .

Вложения

Тип файла: zip vksdk_library.zip (3.27 Мб, 6 просмотров)



1



0 / 0 / 2

Регистрация: 25.04.2016

Сообщений: 71

17.06.2016, 17:43

 [ТС]

3

Спасибо, но не помогло( APP_ID на id своего приложения поменял.



0



1605 / 1337 / 291

Регистрация: 25.10.2009

Сообщений: 3,487

Записей в блоге: 2

17.06.2016, 19:01

4

vitos285380308, внимательно проверьте отпечаток сертификата. Ещё его можно узнать средствами самой Android SDK



0



129 / 126 / 22

Регистрация: 23.06.2009

Сообщений: 700

17.06.2016, 19:31

5

с старой библиотектой проверяли?



0



Ошибка:
{«error»:invalid_request», «error_description»:»sdk_fingerprint is incorrect»}

Интегрировал OAuth vk с помощью com.vk:androidsdk:2.2.0 в приложение для аутинфикации. При аутинфикации с устройства без установленного приложения Vk — всё работает корректно, а при установленном — вылетает ошибка, указанная выше. Отпечаток сертификата — корректен, проверялся не раз.

Используемые технологии/устройства:
com.vk:androidsdk:2.2.0
minSdkVersion 21
targetSdkVersion 29
versionCode 34
Redmi Note 7
Android 10 QKQ1
MIUI Gobal 12.5.1

sha вводил и с двоеточием, и без.
проверил лишних пробелов не стоит

Один или два у вас сертификата? необходимо проверить, что используется нужный.
На всякий случай рекомендую использовать последнюю версию 3.2.2

При попытке подключить версию 3.2.2:
Could not find com.vk:androidsdk:3.2.2.
Required by:
project :app
Указано один sha, но 2 раза. Один с двоеточиями, второй без, какой оставить?

SHA-1 отпечаток сертификата нужно указывать без двоеточий.
Обратите внимание на имя пакета и главной Activity — может там опечатка?

Удалю с двоеточиями.
Перепроверил несколько раз.
Main activity для Android — MainActivity
Название пакета для Android — ru.ecoline.app

При попытке подключить версию 3.2.2:
Could not find com.vk:androidsdk:3.2.2.

dependencies {
    implementation 'com.vk:android-sdk-core:3.x.x
    implementation 'com.vk:android-sdk-api:3.x.x // generated models and api methods
}

Проверьте пожалуйста, совпадает ли сертификат, которым подписывается приложение и тот от которого берется fingerprint?

Имплементировал эти либы:
dependencies {
implementation ‘com.vk:android-sdk-core:3.x.x
implementation ‘com.vk:android-sdk-api:3.x.x // generated models and api methods
}

оффтоп:

а какой командой смотреть в консоли SHA? раньше была вот такая функция, а теперь?

VKUtil.getCertificateFingerprint(this,this.getPackageName()) //это от androidsdk:1.6.9

UPD

VKUtils

Понравилась статья? Поделить с друзьями:
  • Error invalid request error description sdk fingerprint is incorrect free fire
  • Error invalid request error description redirect uri is blocked
  • Error invalid request error description redirect uri has wrong domain check application settings
  • Error invalid request error description incorrect app unavailable for apps with direct auth
  • Error invalid request error description application was deleted