2016-02-13 21 views
6

I wdrożone znak Google i wszystko działa na iOS 8. Ale gdy zgłoszę tę linię na iOS 9:GIDSignIn biały ekran na iOS 9

GIDSignIn.sharedInstance().signIn() 

jestem w stanie zalogować się po raz pierwszy. Ale jeśli anuluję, następnym razem, gdy spróbuję się zalogować, wyświetli się biały ekran, na którym będzie zwykły widok sieciowy.

Zdarza się to nawet po usunięciu aplikacji i ponownym zainstalowaniu jej, co oznacza, że ​​coś może zostać zbuforowane na poziomie systemu operacyjnego.

Jedynym rozwiązaniem jest ponowne otwarcie symulatora systemu iOS lub ponowne uruchomienie telefonu iPhone.

Próbowałem alltheseanswers bez powodzenia. Próbowałem również GIDSignIn.sharedInstance().signIn().allowsSignInWithWebView = true mając nadzieję, że autoryzacja przez Safari może działać, ale Safari nigdy się nie otwiera. Mój Podfile ma pod 'Google/SignIn', więc nie sądzę, że jest to problem z wersją.

Brakuje mi w tym momencie, ponieważ wykracza to poza zakres mojej aplikacji i wszystko, co mogę wymyślić, to zdekonstruować działającą przykładową aplikację i porównać jej ustawienia z moją aplikacją wiersz po linii.

Czy ktoś ma link do działającej przykładowej aplikacji?

Odpowiedz

2

Mam również do czynienia z tym samym problemem. W rzeczywistości w jednym Viewcontrollerze działa on dla mnie i innego kontrolera viewcontroller, który nie działa.

Działa to dla mnie, jeśli zadzwonię pod wewnątrz jakiejś metody Button Action, a nie w. Ale jeśli zadzwonię do tego w viewDidLoad, otrzymam biały ekran.

znalazłem innego obejścia, ale nie będę o to, jak myślę, że nie jest niezawodny

[self performSelector:@selector(LogActionPresed:) withObject:self afterDelay:3.5]; 

Gdzie LogActionPresed jest metoda, która wewnętrznie wywołuje [[GIDSignIn sharedInstance] signIn]

Innym rozwiązaniem roboczy jest wywołanie tej metody wewnątrz viewDidAppear

- (void) viewDidAppear:(BOOL)animated { 
    [self LogActionPresed:self]; 
} 
5

Tak, miałem dokładnie ten sam problem co ty. Wydało mi się, że muszę wypróbować wszystko. W końcu znalazłem rozwiązanie, które może nie być w 100% poprawne, ale działa dla mnie i rozwiązało problem.

Tak właśnie zrobiłem w moim projekcie. Najpierw zaimplementowałem trzy funkcje GIDSignInUIDelegate, co jest konfliktem z oficjalnym dokumentem, ponieważ mój GIDSignInUIDelegate jest podklasą do UIViewController. Ale używam mojego niestandardowego przycisku podpisu i nie działało, gdy śledziłem oficjalny dokument google. Więc wypróbowałem wszystko i okazało się, że działa.

Po zaimplementowaniu funkcji delegata konieczne są dwie ważne rzeczy.

  1. W poniższej funkcji ustaw viewController.view.layoutIfNeeded()

    func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) { 
        //This line does the trick to fix signin web not showing issue 
        viewController.view.layoutIfNeeded() 
    
        self.present(viewController, animated: true, completion: nil) 
        } 
    
  2. nie należy instalować delegata w viewDidLoad()

    GIDSignIn.sharedInstance().uiDelegate = self 
    

Zamiast ustawić je w działaniu przycisku. W przeciwnym razie, w jakiś sposób pokazuje delegatowi. Mam nadzieję, że pomoże to Twojemu problemowi.

+0

Mam do czynienia z tym samym problemem, ale nie udało się znaleźć rozwiązania. Chociaż moja metoda delegatów również nie jest wywoływana. –

0

Po usunięciu wskaźnika aktywności zadziałało dla mnie.

2

W systemie iOS 10 obserwuję, że działa on, jeśli kontroler widoku przedstawiający znajduje się w stosie kontrolera UINavigationController. Widok sieci pozostaje pusty i biały, jeśli kontroler widoku prezentacji nie znajduje się w takim stosie.

Powiązane problemy