2016-02-13 115 views
6

我實現了谷歌登錄,一切工作在iOS 8但當我呼籲的iOS 9這一行:GIDSignIn白色屏幕上的iOS 9

GIDSignIn.sharedInstance().signIn() 

我能夠登錄的第一次。但是,如果我取消了,下次嘗試登錄時,會顯示一個白色屏幕,其中顯示普通用戶批准網絡視圖。

這甚至發生在我刪除應用程序並重新安裝時,這意味着某些東西可能會在操作系統級緩存。

唯一的解決方案是重新打開iOS模擬器或重新啓動我的iPhone。

我試過alltheseanswers沒有運氣。我也試過GIDSignIn.sharedInstance().signIn().allowsSignInWithWebView = true希望通過Safari授權可能會起作用,但Safari永遠不會打開。我的Podfile有pod 'Google/SignIn',所以我不認爲這是一個版本問題。

在這一點上,我很茫然,因爲這超出了我的應用程序的範圍,而我所能想到的就是解構一個正在運行的示例應用程序,並逐行比較它的設置與我的應用程序。

有人有鏈接到工作示例應用程序的鏈接嗎?

回答

2

我也面臨同樣的問題。事實上,在一個ViewController中,它正在爲我和另一個viewcontroller工作,它不工作。

如果我在某些Button Action方法中調用[[GIDSignIn sharedInstance] signIn],並且不在中,它對我有用。但是如果我在viewDidLoad中調用它,則會出現白屏。

我發現了另外一個解決辦法,但我沒有這個打算,因爲我認爲這是不可靠的

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

哪裏LogActionPresed是方法,它在內部調用[[GIDSignIn sharedInstance] signIn]

另一個工作解決辦法是內調用此方法viewDidAppear

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

所以,我和你有完全一樣的問題。它花了我的時間去嘗試一切。我終於找到了一個解決方案,這可能不是100%正確的,但它適用於我並解決了問題。

這就是我在我的項目中所做的。 首先,我自己實現了三個GIDSignInUIDelegate函數,這與官方文檔衝突,因爲我的GIDSignInUIDelegate是UIViewController的子類。但是我正在使用我的自定義簽名按鈕,並且在我跟蹤谷歌官方文檔時它不起作用。所以我嘗試了一切,發現它的工作原理。

執行委託功能後,需要做兩件大事。

  1. 在下面的函數中,設置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. 不要設置此委託在viewDidLoad中()

    GIDSignIn.sharedInstance().uiDelegate = self 
    

相反,在按鈕動作設置它們。否則,它以某種方式不斷顯示代表

希望它會幫助你的問題。

+0

我面臨同樣的問題,但一直未能找到解決方案。即使我的委託方法也沒有被調用。 –

0

刪除活動指標後,爲我工作。

2

在iOS 10上,我觀察到,如果呈現視圖控制器位於UINavigationController的堆棧中,它就可以工作。如果呈現視圖控制器不在這樣的堆棧中,則Web視圖保持空白。