2016-02-13 14 views
6

ho implementato Google segno e tutto funziona su iOS 8. Ma quando io chiamo questa linea su iOS 9:schermo bianco GIDSignIn su iOS 9

GIDSignIn.sharedInstance().signIn() 

io sono in grado di accedere per la prima volta. Ma se annullo, la prossima volta che provo ad accedere mostra una schermata bianca in cui la normale web view di approvazione dell'utente sarebbe.

Ciò accade anche quando si elimina l'app e la si reinstalla, il che significa che è possibile che venga memorizzato nella cache a livello di sistema operativo.

L'unica soluzione è riaprire iOS Simulator o riavviare il mio iPhone.

Ho provato alltheseanswers senza fortuna. Ho anche provato lo GIDSignIn.sharedInstance().signIn().allowsSignInWithWebView = true sperando che l'autorizzazione tramite Safari potesse funzionare, ma Safari non si apre mai. Il mio Podfile ha pod 'Google/SignIn' quindi non penso che sia un problema di versione.

Non sono a questo punto, perché questo va oltre lo scopo della mia app, e tutto quello che posso pensare è di decostruire un'app di esempio funzionante e confrontare le sue impostazioni con la mia app riga per riga.

Qualcuno ha un collegamento a un'app di esempio di lavoro?

risposta

2

Anche io sto affrontando lo stesso problema. Infatti in un Viewcontroller funziona per me e un altro viewcontroller non funziona.

Funziona per me se chiamo [[GIDSignIn sharedInstance] signIn] all'interno di un metodo Button Action e non in. Ma se lo chiamo in viewDidLoad ottengo lo schermo bianco.

ho trovato un'altra soluzione, ma non ho intenzione da questo come penso che non è affidabile

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

Dove LogActionPresed è il metodo che chiama internamente [[GIDSignIn sharedInstance] signIn]

Un'altra soluzione di lavoro è quello di chiamare questo metodo all'interno viewDidAppear

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

Quindi, ho avuto esattamente lo stesso problema di te. Mi ha passato ore per provare tutto. Ho finalmente trovato una soluzione, che potrebbe non essere corretta al 100%, ma funziona per me e ha risolto il problema.

Questo è quello che ho fatto nel mio progetto. In primo luogo, ho implementato personalmente le tre funzioni GIDSignInUIDelegate, che sono in conflitto con il documento ufficiale perché il mio GIDSignInUIDelegate è sottoclasse a UIViewController. Ma sto usando il mio pulsante per la firma personalizzata e non ha funzionato quando ho seguito il documento ufficiale di Google. Così ho provato tutto e ho trovato che funziona.

Dopo aver implementato la funzione di delegato, è necessario eseguire due operazioni principali.

  1. Nella seguente funzione, impostare 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. Non installare questo delegato nel viewDidLoad()

    GIDSignIn.sharedInstance().uiDelegate = self 
    

Invece, istituito nell'azione pulsante. Altrimenti, in qualche modo continua a mostrare delegato

Spero che possa aiutare il tuo problema.

+0

Sto affrontando lo stesso problema ma non sono stato in grado di trovare la soluzione. Anche se il mio metodo delegato non viene chiamato. –

0

Dopo aver rimosso l'indicatore di attività, ha funzionato per me.

2

Su iOS 10, sto osservando che funziona se il controller di visualizzazione presentarsi è nello stack di un UINavigationController. La visualizzazione Web rimane vuota e bianca se il controller della vista che presenta non è in una tale pila.