AndrewShmig / Vkontakte-iOS-SDK-LV

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

Wrong logic #66

Closed agitka closed 10 years ago

agitka commented 10 years ago

If we already have access token, below block is not called.

if ([self showVKModalViewForWebView:webView]) {
        if (!_webViewIsShown && [self.delegate respondsToSelector:@selector(VKConnector:willShowWebView:)]) {

            _webViewIsShown = YES;

            [self.delegate VKConnector:self
                       willShowWebView:webView];
        }
    }

and that's not called

if ([url hasPrefix:kVkontakteBlankURL]) {
        if (_webViewIsShown && [self.delegate respondsToSelector:@selector(VKConnector:willHideWebView:)]) {

            _webViewIsShown = NO;

            [self.delegate VKConnector:self
                       willHideWebView:webView];
        }
    }

And we can't do anything in delegate's implementation. So the webview wouldn't hide. Because _webViewIsShown's not synced with webView.hidden property.

AndrewShmig commented 10 years ago

@agitka имеешь ввиду, что, если программист указал UIWebView и его свойство hidden == YES, то логика работы нарушается?

agitka commented 10 years ago

@AndrewShmig Попробуй два раза запустить приложение, подчистив в начале кэши. Первый норм, второй раз у тебе вебвью остается на экране. Попробуй.

AndrewShmig commented 10 years ago

@agitka мда уж, судя по логам при первом запуске даже не вызывается метод делегата willShow / willHide

2013-11-12 19:04:39.580 Project[75765:80b] +[VKConnector sharedInstance]
2013-11-12 19:04:39.582 Project[75765:80b] -[VKConnector startWithAppID:permissons:webView:delegate:]
2013-11-12 19:04:39.781 Project[75765:80b] -[VKConnector webView:shouldStartLoadWithRequest:navigationType:]
2013-11-12 19:04:39.782 Project[75765:80b] -[VKConnector webViewDidStartLoad:]
2013-11-12 19:04:41.395 Project[75765:80b] -[VKConnector webViewDidFinishLoad:]
2013-11-12 19:04:41.396 Project[75765:80b] -[VKConnector showVKModalViewForWebView:]
2013-11-12 19:04:41.396 Project[75765:80b] -[ASAAppDelegate VKConnector:willShowWebView:]
2013-11-12 19:04:41.398 Project[75765:80b] -[VKConnector webView:shouldStartLoadWithRequest:navigationType:]
2013-11-12 19:04:41.399 Project[75765:80b] -[VKConnector webViewDidStartLoad:]
2013-11-12 19:04:44.574 Project[75765:80b] -[VKConnector webViewDidFinishLoad:]
2013-11-12 19:04:44.574 Project[75765:80b] -[VKConnector showVKModalViewForWebView:]

Надо поковырять сейчас, в чем может быть проблема и как исправить.

agitka commented 10 years ago

@AndrewShmig Я описал ее наверху, _webViewIsShown лишняя сущность. Да и логика с удаленным приложением грязная, зачем это обрабатывать, если приложение удалили это трындец, зачем сдк это обрабатывать я не понимаю.

agitka commented 10 years ago

@AndrewShmig почему в первом норм ASAAppDelegate VKConnector:willShowWebView:

AndrewShmig commented 10 years ago

@agitka насчет удаления приложения с тобой соглашусь, но убрать проще, чем написать, пусть пока будет. Линк на просьбу и обсуждение: https://github.com/AndrewShmig/Vkontakte-iOS-SDK-LV/issues/50

AndrewShmig commented 10 years ago

@agitka у меня даже в первом не вызывается, если судить по логам.

agitka commented 10 years ago

@AndrewShmig У меня при регистрации нормально, второй запуск окно

Пожалуйста, не копируйте данные из адресной строки для сторонних сайтов. Таким образом Вы можете потерять доступ к Вашему аккаунту.

остается.

agitka commented 10 years ago

@AndrewShmig ну ветвление скажем у тебя "хитроватое", немного пахнет, как говорят.

AndrewShmig commented 10 years ago

@agitka вру, всё нормально. но я не понял в чем проблема в том, что ты выше сообщил. Если вебвьюха УЖЕ показана, то нет смысл вызывать метод делегата willShow, а значит будет только вызван willHide. Или я не догоняю?

Исправил правда всего одну строку: _webViewIsShown = webView.hidden; // should default to NO

AndrewShmig commented 10 years ago

@agitka так стоп, окно остается потому, что ты должен сам обработать процесс спрятывания окна (вебвьюхи) в методе делегата.

AndrewShmig commented 10 years ago

@agitka насчет "пахнет", ну в комментарии там в коде четко написано, что это грязный хак.

agitka commented 10 years ago

@AndrewShmig там написанно скрывать, но блок

- (void)VKConnector:(VKConnector *)connector
    willHideWebView:(UIWebView *)webView
{
    NSLog(@"%s", __FUNCTION__);
    self.webView.hidden = YES;
}

не вызовится второй раз когда токен уже есть, где надо спрятать вью во второй запуск?

AndrewShmig commented 10 years ago

А фикс текущий не исправил косяк? Никак не могу автологина добиться, каждый раз приходится вводить пароль в ВК.

AndrewShmig commented 10 years ago

@agitka да, воспроизвел косяк.

agitka commented 10 years ago

@AndrewShmig :sweat_smile:

AndrewShmig commented 10 years ago

@agitka проверь пожалуйста. Теперь должно всё нормально прятаться.

agitka commented 10 years ago

@AndrewShmig Сейчас прячется.

AndrewShmig commented 10 years ago

@agitka отлично! значит closed #66

agitka commented 10 years ago

@AndrewShmig Посмотри остальные методы, где заменил переменную. Например

- (void)     webView:(UIWebView *)webView
didFailLoadWithError:(NSError *)error
{
    LOG();

    if ([self.delegate respondsToSelector:@selector(VKConnector:connectionErrorOccured:)]) {

        if (webView.hidden) {
            [self.delegate VKConnector:self
                       willHideWebView:webView];
        }

        [self.delegate VKConnector:self
            connectionErrorOccured:error];
    }
}

странно звучит.

AndrewShmig commented 10 years ago

@agitka что именно странно звучит?

agitka commented 10 years ago

@AndrewShmig

if (webView.hidden) {
            [self.delegate VKConnector:self
                       willHideWebView:webView];
        }
agitka commented 10 years ago

@AndrewShmig Don't forget cocoa pod with error. Feel the lack of unit tests with the issue.

AndrewShmig commented 10 years ago

@agitka updated cocoa pods. yep, unit tests are needed here... soon they will be added.