2016-06-06 8 views
6

Podążam za Instagram authentication [zalecanymi] krokami przy użyciu interfejsu UIWebView w aplikacji na iOS. Po wprowadzeniu danych logowania naciśnięcie przycisku logowania powoduje załadowanie strony z następującym błędem.Błąd logowania do Instagrama w aplikacji na iOS przy użyciu UIWebView

Nie można załadować tej strony. Jeśli masz wyłączone pliki cookie w przeglądarce lub przeglądasz w trybie prywatnym, spróbuj włączyć obsługę plików cookie lub wyłączyć tryb prywatny, a następnie ponów próbę działania.

I dzieje się tak tylko przy pierwszym uruchomieniu przez kolejne etapy uwierzytelniania; przy następnej próbie wszystko działa gładko jak jedwab. Dostaję kod suffixed do przekierowania url i żądam tokena dostępu używającego go.

Zrzut ekranu:

enter image description here

Jest już inna kwestia here i to nie pomaga.

EDYTOWANIE: Wygląda na to, że pliki cookie. Chociaż nie udało mi się jeszcze tego naprawić.

+0

może zrobić przekierowanie siły, gdy pojawi się ten błąd? – Shubhank

+0

Czy możesz rozwiązać ten problem? – Borzh

+0

Nie, nie całkowicie. Zauważyłem, że webView powinien shouldStartLoadWithRequest przeżywa trochę opóźnienia redukuje częstotliwość występowania tego błędu. –

Odpowiedz

1

Miałem podobny problem podczas usuwania plików cookie, aby upewnić się, że pojawił się ekran logowania, a nie tylko za pomocą aktualnie zalogowanego użytkownika. Spróbuj (szybko):

let storage = HTTPCookieStorage.shared 
storage.cookieAcceptPolicy = .always 
+1

Próbowałem go przed opublikowaniem pytania. –

0

Udało mi się rozwiązać ten problem około godzinę temu.

Po pierwsze, NIE używaj interfejsu UIWebView ani WebView; zamiast tego użyj WKWebView.

Widzisz, trzeba wdrożyć metodę

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error 

gdy Instagram na stronę logowania do przodu Cię do REDIRECT_URL, nie udaje mu się poruszać. Prawdopodobnie dlatego, że nie wykonujemy uwierzytelniania po stronie serwera, ale tylko uwierzytelnianie po stronie klienta i adres_przekierowania nie jest poprawnym adresem URL. Oczekujemy stronę przekierować do nieprawidłowego adresu URL, ale jeśli tak się stanie, WKWebView nie wywołać metodę

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation 

lub metoda

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation 

So. To, co musisz zrobić, to skupić się na tej pierwszej metodzie, sprawdzić zmienną error i wyodrębnić error.userInfo.

W moim przypadku, to jak mogę rozwiązać ten problem:

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error 
{ 

    NSURL *err = [error.userInfo objectForKey:@"NSErrorFailingURLKey"]; 

    if([err.absoluteString hasPrefix:INSTA_REDIRECT_URL]){ 
     NSString *token = [[err.absoluteString componentsSeparatedByString:@"#access_token="] objectAtIndex:1]; 


     [Utils saveToken:token]; 
     [self.webView setHidden:YES]; 
     //open next view controller 
    }else{ 
     //TODO: No internet? something else went wrong.. 

     NSLog(@"Error: %@", error); 
    } 

} 

nadzieję, że to pomaga. Powodzenia! ;)

Powiązane problemy