Здравствуй дорогой друг, в этой статье, на простом примере мы рассмотрим, каким образом можно реализовать авторизацию и использование api социальной сети "ВКонтакте"  без подключения официального SDK. Пример приложения можно скачать на github по ссылке в конце статьи. В проекте я буду использовать kotlin, mvvm, binding, navgraph подразумевается, что ты уже знаешь, что это такое :) Создаем новый проект на основе Empty Activity, я назову его OAuthWithVK_Example  Добавляем в зависимости. Создадим класс "App" расширяющий "Application", он будет представлять наше приложение и содержать экземпляр "AccountService" для хранения токена и  экземпляр "Retrofit" с url для запросов к ВК api. Через companion object будем получать доступ к App и созданным экземплярам. По хорошему это нужно делать через DI, но для простоты примера сделаем так. Создадим интерфейс "IAccountService" и его реализацию "VKAccountService", сервис будет предоставлять возможность сохранять и получать token и userId. Создадим класс активити с именем "MainActivity" и соответствующий ему файл разметки "activity_main". Он будет содержать FragmentContainerView для навигации. Обновим файл манифеста, указав корневое активити. Для навигации по фрагментам понадобится файл "nav_graph". Теперь создадим первый класс фрагмента для авторизации, назовем его "AuthFragment". Здесь нам нужен только виджет WebView, который создадим программно. Для открытия окна авторизации нужен url с параметрами, создаем приватное поле с именем "_authParams", оно будет содержать строку с необходимой конфигурацией, далее передадим ее в WebView. В методе onViewCreated будем открывать окно аутентификации, реагировать на события 'Подтверждение разрешений', 'Ошибка ввода логина/пароля', 'Успех' и др. В коде я оставил TODO куда нужно будет вставить ваш client_id приложения, как его получить рассмотрим в конце статьи. В зависимости от того какое событие сейчас происходит (ввод пароля, ошибка, заблокированный аккаунт), текущий url у WebView будет изменяться, на основе этого будем определять текущий статус аутентификации. Для этого создадим класс "AuthWebViewClient" расширяющий "WebViewClient", переопределим метод onPageFinished в котором будем парсить текущую открытую ссылку. Перечислим статусы аутентификации в enum, который назовем "AuthStatus", этот enum будем передаваться кэлбеком из класса AuthWebViewClient во фрагмент. После верного ввода логина/пароля и подтверждения разрешений, будет получен и записан в память токен и идентификатор пользователя. С фрагментом аутентификации на этом все. Приступим к созданию второго фрагмента, здесь мы сделаем всего 1 запрос на получение списка друзей. На экране покажем кнопку для выхода, textview для показа кол-ва друзей и скролящийся textview для показа списка друзей. Создадим фрагмент с именем "InfoFragment" и соответствующий ему xml файл с разметкой "info_fragment". Запрос на список друзей будем делать во ViewModel, эту вью модель передадим в биндинг, LiveData сама будет устанавливать данные в TextView. Осталось написать интерфейс "FriendsGetRequest" с запросом для ретрофит и на этом с программной частью будем заканчивать :) Теперь разберемся, как получить client_id, это один из параметров запроса на авторизацию, его выдает ВК для понимания, какое приложение собирается  обращаться к его api. Что бы его получить зайдите на свою страницу ВК и найдите меню "Управление", если его нет в списке, нужно добавить его в настройках страницы. Кликнув по меню "Управление" мы попадем в раздел "Мои приложения", для создания нового приложения нажмите кнопку "Создать" В открывшемся окне укажите название приложения и выберите тип "Standalone-приложение" далее жмем кнопку "Подключить приложение". После нажатия на кнопку, вам придет смс на подключенный к странице номер. Когда приложение будет создано перейдите в меню "Настройки", там будет указан client_id, который нужно вставить в код на место TODO, все остальные настройки по желанию :) Скачать пример проекта можно здесь