5

Wprowadzam logowanie Google do mojej aplikacji i chociaż zarówno dokumentacja Google, jak i Firebase jest wystarczająco dokładna, to co zrobiłem zgodnie z sugestią, nie jest wystarczające .. Nadal dostaję ten błąd. Mam nadzieję, że to pomoże innym w znalezieniu rozwiązania problemu przy wdrażaniu ich SDK .... Dzięki z góry za przegląd ten masywny jedno:Logowanie przez Google za pomocą Firebase: GIDSignInDelegate nie jest zgodny z ViewController

Error Image

Oto Firebase guide i Google guide:

Więc

  1. Dodany Google podfile - SPRAWDŹ
  2. Adde d linia do Bridging-Header - SPRAWDŹ
  3. Dodany GoogleService-Info.plist & identyfikator pakietu & odwrócone ID klienta do schematów URL - Sprawdź
  4. App Delegat ma następującą, bez błędów ale zauważam, że mogą wystąpić konflikty między logowaniem się na Facebooku (działa poprawnie) a nowymi Googleami, z którymi nie mam pojęcia jak sobie poradzić:

    Code added to AppDelegate - sorry not written in here, StackOverflow formatting was hating me on this occasion

    P.S. jeszcze nie dodałem GIDSignInDelegate do AppDelegate tutaj, ponieważ mam zamiar do mojej VC do obsługi logiki logowania, jak widać poniżej ...

  5. LoginVC ViewController kod tutaj:

    class LoginVC: UIViewController, UIViewControllerTransitioningDelegate, UITextViewDelegate, UITextFieldDelegate, GIDSignInDelegate, GIDSignInUIDelegate { 
    
        override func viewDidLoad() { 
        super.viewDidLoad() 
        let ref = Firebase(url: "https://MYAPPID.firebaseio.com") 
        GIDDSignIn.sharedInstance().delegate = self 
        GIDSignIn.sharedInstance().uiDelegate = self 
        GIDSignIn.sharedInstance().signInSilently() // for if the user has recently been authenticated 
        } 
    

Wtedy ten, który z tego co widzę ... powinno być wszystko, Google musi rozmawiać Firebase:

 // Implementing the required GIDSignInDelegate methods 
     func googleSignIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { 
      if (error == nil) { 
       // Auth with Firebase 
       let userId = user.userID 
       let idToken = user.authentication.idToken 
       let fullName = user.profile.name 
       let givenName = user.profile.givenName 
       let familyName = user.profile.familyName 
       let email = user.profile.email 
       ref.authWithOAuthProvider("google", token: user.authentication.accessToken, withCompletionBlock: { (error, authData) in 
        // User is logged in! 
       }) 
      } else { 
       print("\(error.localizedDescription)") 
      } 
     } 


     func googleSignOut() { 
      GIDSignIn.sharedInstance().signOut() 
      ref.unauth() 
     } 

     // Implement the required GIDSignInDelegate methods and Unauth when disconnected from Google 
     func signIn(signIn: GIDSignIn!, didDisconnectWithUser user:GIDGoogleUser!, withError error: NSError!) { 
      ref.unauth() 
     } 


     // IBAction to handle the sign-in process 
     @IBAction func googleButtonPressed(sender: TKTransitionSubmitButton!) { 
      GIDSignIn.sharedInstance().signIn() 
     } 

Baffled? Przepraszam za długich facetów ... ale zrobiłem wszystko, co sugeruje poradnik Firebase, a to oznacza, że ​​logika w dokumencie Google dla AppDelegate jest tam w ProfilVC. Jakieś wskazówki?

+0

Uczę się programowania iOS i właśnie dostałem znak Google działa dzisiaj. Zgaduję, że to jest problem z GISSignInDelegate, chociaż powiedziałeś, że się tym zajmujesz. Moja sugestia to zacząć od czystego projektu, postępuj zgodnie z tutorialem w google dosłownie, dopóki go nie uruchomisz, wtedy możesz zmienić wszystko, co tylko chcesz –

+0

Tak, od czasu, gdy udało mi się pracować z nową bazą firewall, dzięki! –

+0

Ten sam problem podczas aktualizacji do szybkiego 3. –

Odpowiedz

-1

Idź do: Link Binary z bibliotekami. Następnie kliknij Dodaj, a następnie Dodaj inne. Naciśnij "Cmd + shift + G". Następnie wpisz: "/ usr/lib". Następnie kliknij "libz.1.dylib". Naciśnij Ok, aby dodać i błędy znikną. Prawdopodobnie nie kończysz wszystkich funkcji, które towarzyszą temu protokołowi. Będziesz musiał dodać:

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, 
    withError error: NSError!) { 
     if (error == nil) { 
      // Perform any operations on signed in user here. 

     } else { 
      print("\(error.localizedDescription)") 
     } 
} 

func signIn(signIn: GIDSignIn!, didDisconnectWithUser user:GIDGoogleUser!, 
    withError error: NSError!) { 
     // Perform any operations when the user disconnects from app here. 
     // ... 
} 

Upewnij się również, że dodałeś foll. linia w nagłówku pomostowym.

#import <GoogleSignIn/GoogleSignIn.h> 

UPDATE: GIDSignInDelegate nie może zostać dodany do widoku Controller. Zamiast tego powinieneś dodać "GIDSignInUIDelegate" w VC i spróbować wykonać inne operacje (Gidsigndwlwgate) w Delegacie aplikacji. To będzie działać.

+0

Jak widać powyżej, mam te elementy kodu już w moim VC. Próbowałem biblioteki "libz.1 ...", ale uważam, że jest to w przypadku Google Analytics i nie jest to konieczne. Bez względu na to, żadna ze wspomnianych zmian nie jest rozwiązaniem mojego problemu. –

+0

Zaktualizowano odpowiedź. –

+0

Podoba mi się twój optymizm, ale to nie rozwiązuje problemu .... po prostu przenosi problem do AppDelegate: "Typ AppDelegate nie potwierdza protokołu" GIDSignInDelegate ".Jeśli nie można go użyć w VC, dlaczego dokumentacja Firebase pokazuje to w ten sposób? –

2

znalazłem potrzebnych metod wpisując "func s" i szukając w sugestie box

Och, tęsknię Alt + Enter funkcji w Android Studio

(BTW to dla Swift 3 w Xcode 8 beta)

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: NSError!) { 
     let authentication = user.authentication 
     let credential = FIRGoogleAuthProvider.credential(withIDToken: (authentication?.idToken)!, 
                  accessToken: (authentication?.accessToken)!) 
     let comp:FIRAuthResultCallback = { (user:FIRUser?, error:NSError?) in 
      if error == nil { 
       DataStorage.inst.user.id = user?.uid 
      } 
     } 
     FIRAuth.auth()?.signIn(with: credential, completion: comp) 
    } 

    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: NSError!) { 

    } 
5

Mówi, że Twoja klasa nie zaimplementowała wymaganej metody dla twojego GIDSignInDelegate. W Swift 3 nastąpiła istotna zmiana w nazwie metody. Tak więc nowa metoda będzie miała postać Proszę sprawdzić zrzut ekranu biblioteki. Tak więc w nowej, szybkiej konwencji 3 nazewnictwa metod lub klas brakuje In. enter image description here

1

Wystarczy zastąpić

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, 
withError error: NSError!) { 
    if (error == nil) { 
     // Perform any operations on signed in user here. 

    } else { 
     print("\(error.localizedDescription)") 
    }} 

z

public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 
    //Code 
} 
0

Wystarczy dodać

#import "GoogleSignIn/GoogleSignIn.h"

do Bridging pliku nagłówka i nacisnąć shift + cmd + K do czyszczenia.

Powiązane problemy