AndrewShmig / Vkontakte-iOS-SDK-LV

[iOS] Powerful & flexible Vkontakte iOS SDK Latest Version
79 stars 23 forks source link

Принципы работы с VKConnector, VKUser и VKAccessToken #21

Closed beshanoe closed 11 years ago

beshanoe commented 11 years ago

Здравствуйте! Замечательная библиотека, уже довольно активно ее заюзал в проекте, тем не менее для меня тема как iOS дева, так и Вконтакте API довольно новая и главная проблема для меня сейчас реализация адекватной работы с авторизацией юзера. Расскажите пожалуйста, как правильно использовать классы VKConnector и VKUser. Например при первом запуске приложения, что необходимо проверить чтобы понять авторизирован ли пользователь? Следует ли делать какие-то проверки перед выполнением VKRequest? Что делать в случае ошибки запроса(например устаревший токен или другой IP-адрес). Заранее спасибо!

AndrewShmig commented 11 years ago

Добрый день! Спасибо за отзыв, действительно приятно.

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

Сейчас же, вопросы вроде

Расскажите пожалуйста, как правильно использовать классы VKConnector и VKUser.

кажутся слишком обширными.

Если быть очень кратким, то логика работы всегда такая: вызвать из VKConnector startAppID:WithPermissions: для авторизации, если пользователь авторизовыл приложение, то токен будет сохранен в хранилище (после этого просто вызывайте методы класса VKUser и всё), если пользователь отказался авторизовывать приложение, то будет вызван соответствующий метод делегата VKConnector (ознакомьтесь в целом какие там методы и зачем могут пригодиться). Авторизацию прошли. Дополнительно не надо никак проверять авторизован ли пользователь или нет, просто берете и используете VKUser, никаких дополнительных инициализаций - всё просто работает :) Перед выполнением VKRequest не надо делать никаких проверок как таковых, но чтобы четко понимать, каким образом можно использовать запросы и какие возможности они предоставляют, стоит ознакомиться с документацией и рассмотреть примеры.

Что касается ошибок запроса (устаревший токен, ответа с ошибкой от сервера), то изучите внимательно VKConnectorDelegate & VKRequestDelegate, которые предоставляют достаточно широкие возможности по "отлову" этих самых ошибок.

AndrewShmig commented 11 years ago

Например при первом запуске приложения, что необходимо проверить чтобы понять авторизирован ли пользователь? Перечитал и понял иначе ваш вопрос. Если вы хотите проверить, есть ли хоть какой-то авторизованный пользователь можете выполнить проверку [VKUser currentUser] на равенство nil. Есть и другой способ, через хранилище: [[[VKStorage sharedStorage] storageItesm] count], это решение позволит узнать кол-во авторизованных пользователей, которые хоть раз авторизовывались в приложении. Если это значение не равно нулю, значит какие-то пользователи уже проходили авторизацию приложения.

Следует ли делать какие-то проверки перед выполнением VKRequest? Проверки - хм, в общем нет. Но обрабатывать ошибки и ответ сервера обязательно, смотрите методы делегата VKRequestDelegate. Сам по себе класс запросов VKRequest достаточно автономный, чтобы его использовать отдельно без VKUser. VKUser лишь "заглушает" установку таких параметров, как токен доступа текущего пользователя и еще кое-какие детали с запросами вроде установки времени жизни кэша в один час и тд.

Что делать в случае ошибки запроса(например устаревший токен или другой IP-адрес) Зависит от типа ошибки. Основные варианты: обновить токен доступа либо ввести капчу (смотрите методы делегата VKRequestDelegate для работы с ошибками)

AndrewShmig commented 11 years ago

Закрываю, но обсуждением можем продолжать, ибо данную запись добавлю в раздел "Документация".