Авторизуется только через webView после обновления #69
Обновился с версии 1.0.6.5 на 1.0.6.8, код не менял. Раньше авторизация проходила через сафари, все было ок. Сейчас решил обновиться, чтобы была возможность авторизовываться через vkApp. Всегда открывается web view Код:
The text was updated successfully, but these errors were encountered:
ItsTipTop commented May 29, 2014Так а vkApp в каком случае будет открываться?
RomanTruba commented May 29, 2014Когда новую версию одобрят (когда-нибудь её должны одобрить)
ItsTipTop commented May 29, 2014А, сейчас получается только webView (и safari только при неудаче). Как только приложение одобрят (vkapp в смысле), мне уже нет необходимости менять код. Правильно?
RomanTruba commented May 29, 2014 ItsTipTop commented May 29, 2014 RomanTruba commented May 29, 2014Если у вас авторизация в ВК не основная, можно вернуть старый код:
mkll commented Jun 26, 2014Не совсем понял, как сделать так, чтоб в Safari вообще не уходило. Мне нужно только webView либо vk app, если она есть на устройстве. Как этого добиться?
RomanTruba commented Jun 26, 2014Зачем запрещать уходить в сафари?
mkll commented Jun 26, 2014А зачем разрешать?
mkll commented Jun 26, 2014Это вообще странный подход - попеременно кидать юзера то туда, то сюда. Это сбивает его с толку.
Хотя мой вопрос продиктован вполне конретной причиной - после отмены авторизации в webView и попытке повторной авторизации оно переходит в Safari, а Safari ругается на bad page.
RomanTruba commented Jun 26, 2014Я уже устал объяснять всем, что webview небезопасен для пользователя. В сафари пользователь может быть уже залогинен, и ему не придется снова вводить данные. Если выкидывает bad page, значит вы не на строили URL схему вашего приложения
mkll commented Jun 26, 2014Небезопасен или неудобен?
Неудобство - это вопрос предпочтений.
Безопасность - это уже серьезный вопрос.
В любом случае, хотелось бы определенности в поведении - либо так, либо эдак, но никак не "и так, и эдак". Сделайте тогда какие-нибудь параметры, что ли, чтобы можно было явно задавать.
RomanTruba commented Jun 26, 2014Почему небезопасен: пользователь вводит данные своего аккаунта в какое-то непонятное приложение, которое, может быть, маскируется под страницу авторизации вконтакте.
SDK предусматривает следующее поведение по-умолчанию:
- пользователь входит в приложение и нажимает кнопку авторизации вконтакте (приложение вызывает [VKSdk authorize:SCOPE])
- проверяется наличие приложения вконтакте, способного провести авторизацию стороннего приложения
- если такое есть, оно будет открыто
- если такого не имеется, будет открыта webview с формой входа (проблема #64)
- если на 4 шаге авторизация была неуспешна (например, пользователь отменил авторизацию), при повторной попытке авторизации будет открыт Safari с формой авторизации (разрешения доступа приложению, если пользователь авторизован)
При этом SDK имеет лицензию MIT, что означает для вас возможности безграничной модификации под свои нужды.
mkll commented Jun 26, 2014Почему небезопасен: пользователь вводит данные своего аккаунта в какое-то непонятное приложение, которое, может быть, маскируется под страницу авторизации вконтакте.
Я понимаю, что отговорка "но так делают многие" не очень серьезна по сути, но по факту так действительно делают многие. :)
Модификации, конечно, допустимы, но вряд ли это хороший подход - встает проблема синхронизации версий при последующих обновлениях базового продукта, т.е. SDK.
Мне представляется, что авторизация через webView - это своего рода хак, он продиктован не функциональностью продукта, а требованиями цензоров Apple, и сделан он для них, а не для пользователей и/или разработчиков. Например, в моем случае авторизация через соцсети модераторами, судя по всему, не проверяется, иначе бы приложение не прошло проверку. Боюсь, что навязывать этот "хак" всем использующим ваш SDK - наверное, не совсем правильно.
В любом случае, спасибо за разъяснения.
RomanTruba commented Jun 26, 2014Мы и хотим от этого уйти, в общем-то. Собственно, я подумываю добавить флаг, с помощью которого разработчик сообщал SDK является ли авторизация вконтакте для приложения первоначальной
mkll commented Jun 26, 2014По поводу bad page в Safari - действительно, не обновил схему URL.
Но обнаружился еще один момент. Мне нужно, чтобы пользователь имел возможность входить под разными аккаунтами ВК. Поэтому по кнопке "выход" в своем приложении я делаю [VKSdk forceLogout] , и в этом случае при последующей попытке авторизации выдается webView с логином ВК.
В случае же, если пользователя перемещают в Safari, в котором он уже был залогинен ранее, у него нет возможности разлогиниться прямо в этот момент, поскольку Safari сразу же спрашивает "open this page in " и перенаправляет его обратно в приложение. Т.е., чтобы разлогиниться в приложении, пользователю нужно разлогиниться в ВК в Safari. Это очень большое неудобство на самом деле, и мало того, что это неудобство - многие пользователи вообще не сообразят, что же им делать в таком случае, а еще хуже, что все шишки будут сыпаться на разработчиков приложения. Плавали, знаем.
Сухой остаток - хочу авторизацию webView и только webView. :)
RomanTruba commented Jun 26, 2014Поэтому стоит использовать и второй параметр: revokeAccess:YES
mkll commented Jun 26, 2014Предлагаю компромиссное решение.
Добавьте в логику определения, вызывать ли webView или Safari после неудачного логина, опциональный метод делагата. Кому нужно - вернет YES/NO. Тогда малой кровью можно обойтись и все сыты. :)
mkll commented Jun 26, 2014Поэтому стоит использовать и второй параметр: revokeAccess:YES
RomanTruba commented Jun 26, 2014[VKSdk authorize:SCOPE revokeAccess:YES]
Можете сделать pull-request
mkll commented Jun 26, 2014[VKSdk authorize:SCOPE revokeAccess:YES]
В этот момент я не знаю, был ли до этого [VKSdk forceLogout] или не был. В случае с webView необходимость этого определяет сам SDK и все получается прозрачно.
RomanTruba commented Jun 26, 2014revokeAccess позволит показать пользователю экран разрешения доступа, где он может разлогиниться
mkll commented Jun 26, 2014Этот экран будет показываться каждый раз, а не только тогда, когда предварительно вызывался [VKSdk forceLogout] . Это неудобно для пользователя.
RomanTruba commented Jun 26, 2014Это нормально для пользователя
mkll commented Jun 26, 2014Это ненормально, поскольку мы используем OAuth, и это единственное применение VK SDK в приложении. Т.е. логин в ВК в нашем случае - это "сопутствующий" логин. У нас "главная" авторизация в приложении допускает возможность протухания сессии, поэтому пользователь в таких случаях логинится через ВК прозрачно и быстро. Заставлять его каждый раз вбивать реквизиты входа в ВК - неправильно и неудобно, теряется половина смысла OAuth.
RomanTruba commented Jun 26, 2014Нет, не допускает. С недавнего времени все сессии вечные. У вас всё равно не получится прозрачного логина, потому что Safari будет блокировать быстрые переходы в приложение. Используйте revoke, и не беспокойтесь. Для пользователя же лучше нажать одну кнопку "Разрешить", и иметь возможность разлогиниться, если ему надо.
mkll commented Jun 26, 2014Я о нашей собственной авторизации говорю. :)
У вас всё равно не получится прозрачного логина, потому что Safari будет блокировать быстрые переходы в приложение.
Уже получается - вот прямо сейчас так и есть. Сафари не всегда спрашивает даже "открыть ли страницу в приложении", обычно он показывается на секунду и тут же перенаправляет обратно в приложение. А так он будет постоянно спрашивать разрешения, причем ведь это разрешение пользователь уже ему давал раньше, т.е. еще одна непонятка для него.