- PVSM.RU - https://www.pvsm.ru -
Привет! Недавно понадобилось интегрировать соц. сеть в проекте для Android. Выбор пал на ВК и, соотвественно, их офиц.библиотеку VKCOM/vk-android-sdk [1]. Использовал ее раньше и ещё тогда не был от неё в восторге из-за малого количества примеров. Сейчас смотрю в исходный код, а он всё также далеко не идеален.
Обычно всегда просматриваю ключи в преференсах при запуске приложения и увидел такое вот (после авторизации):
Ключ: VK_SDK_ACCESS_TOKEN_PLEASE_DONT_TOUCH
Значение: scope=offline&https_required=1&access_token=e5cd068be722caafd3c449557e19c19eeed3f54c295a65cd097ed087f61c44394bd985975364fc34641cc&expires_in=0&created=1476876628588&user_id=220436550
Насторожило. Не думаю, что это хорошо хранить такие данные в открытом виде. Вообще, ещё после первого знакомства думал о возможности считывания вводимых данных при авторизации. Почему бы нет?
Нужно всего лишь импортировать как модуль. Убираем возможность авторизации через основного клиента (оставляем второй вариант):
if (VKUtil.isAppInstalled(ctx, VK_APP_PACKAGE_ID)
&& VKUtil.isIntentAvailable(ctx, VK_APP_AUTH_ACTION)
&& fingerprints.length > 0
&& fingerprints[0].equals(VK_APP_FINGERPRINT)) {
if (savedInstanceState == null) {
intent = new Intent(VK_APP_AUTH_ACTION, null);
intent.setPackage(VK_APP_PACKAGE_ID);
intent.putExtras(bundle);
startActivityForResult(intent, VKServiceType.Authorization.getOuterCode());
}
} else {
new VKOpenAuthDialog().show(this, bundle, VKServiceType.Authorization.getOuterCode(), null);
}
» Исходник здесь [2]
Немного модернизируем их кастомный webview:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new BaseInputConnection(this, false);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
super.dispatchKeyEvent(event);
// Без условия event дублируется
if (event.getAction() == KeyEvent.ACTION_UP) {
Log.d("TAG", event.getKeyCode() + " | " + event.toString());
}
return true;
}
» Исходник здесь [3]
Спасибо ответу на StackOverFlow [4]. Получается пароль и логин полностью считывается при ручном вводе в их диалоговом окошке (без копипаста). Можно определить даже регистр символа:
Всё это открывает широкие возможности. Возможно ещё можно подобрать подобные примеры (пытался найти что-нибудь с cookie, но вроде ничего интересного).
Думаю для ВК лучше полностью перенести авторизацию на основного клиента [5]. А что касаемо API, наполнить примерами подробными (Wiki на GiHub неплох в дополнение javadoc имеющемуся). Но сейчас использовать такой подход сомнительно.
Спасибо за внимание!
Автор: mr-cpp
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/200863
Ссылки в тексте:
[1] VKCOM/vk-android-sdk: https://github.com/VKCOM/vk-android-sdk
[2] Исходник здесь: https://github.com/VKCOM/vk-android-sdk/blob/master/vksdk_library/src/main/java/com/vk/sdk/VKServiceActivity.java
[3] Исходник здесь: https://github.com/VKCOM/vk-android-sdk/blob/master/vksdk_library/src/main/java/com/vk/sdk/WebView.java
[4] StackOverFlow: http://stackoverflow.com/a/29649212/5279156
[5] основного клиента: https://play.google.com/store/apps/details?id=com.vkontakte.android
[6] Источник: https://habrahabr.ru/post/313132/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.