5

Sto introducendo l'accesso di Google alla mia app e sebbene sia la documentazione di Google sia quella di Firebase siano sufficientemente approfondite, ciò che ho fatto come suggerito non è sufficiente .. . Sto ancora ricevendo questo errore Speriamo che questo aiuterà gli altri a trovare una soluzione al problema in sede di attuazione il loro SDK .... grazie in anticipo per la revisione di questo grosso uno:Accesso a Google tramite Firebase: GIDSignInDelegate non è conforme a ViewController

Error Image

Ecco il Firebase guide e la Google guide:

Così

  1. Aggiunto Google per podfile - CHECK
  2. Adde linea D in Colmare-Header - Mostra
  3. Aggiunto GoogleService-Info.plist & identificativo fascio & invertito ID cliente a schemi URL - Controllare
  4. App Delegato ha la seguente, senza errori ma noto che potrebbero esserci conflitti tra il login di Facebook (funzionante correttamente) e Google, che non ho idea di come gestire insieme:

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

    P.S. Non ho aggiunto GIDSignInDelegate a AppDelegate qui perché sto progettando per il mio VC per gestire la logica di accesso, come si vedrà in seguito ...

  5. LoginVC ViewController codice qui:

    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 
        } 
    

Allora questo, che da quello che posso vedere ... dovrebbe essere tutto Google ha bisogno di parlare con 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() 
     } 

sconcertato? Ci scusiamo per il lungo ragazzi ... ma ho fatto tutto ciò che la guida di Firebase suggerisce e ciò significa che la logica del doc di Google per AppDelegate è tutta lì nel ProfileVC. Qualche indicazione?

+0

Sto imparando iOS programmando me stesso e ho appena ricevuto il segnale di google che funziona oggi. La mia ipotesi è che questo è un problema con GISSignInDelegate anche se hai detto che ti sei preso cura di esso. Il mio suggerimento è di iniziare con un progetto pulito, seguire il tutorial su google letteralmente fino a farlo funzionare, quindi è possibile modificare tutto ciò che si desidera –

+0

Sì, da quando ha funzionato con il nuovo firebase, grazie! –

+0

Lo stesso problema durante l'aggiornamento a swift 3. –

risposta

-1

Vai a: Collega binario con le librerie. Quindi, fare clic su Aggiungi, quindi Aggiungi altro. Premere "Cmd + MAIUSC + G". Quindi, digita: "/ usr/lib". Quindi, fai clic su "libz.1.dylib". Premi Ok per aggiungere e gli errori andranno via. Inoltre, probabilmente non stai completando tutte le funzioni associate a questo protocollo. Dovrai aggiungere:

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. 
     // ... 
} 

Inoltre, assicurarsi di aver aggiunto il foll. linea in Bridging Header.

#import <GoogleSignIn/GoogleSignIn.h> 

UPDATE: GIDSignInDelegate non può essere aggiunto a View Controller. Invece, dovresti aggiungere "GIDSignInUIDelegate" in VC e provare ad eseguire altre operazioni (Gidsigndwlwgate) nel Delegato app. Funzionerà.

+0

Come vedrai sopra, ho già questi elementi di codice nel mio VC. Ho provato la libreria "libz.1 ..." ma credo che ciò sia per Google Analytics e non sia comunque necessario. Indipendentemente da ciò, nessuna delle modifiche che hai citato sono una soluzione al mio problema. –

+0

Aggiornamento della risposta. –

+0

Mi piace il tuo ottimismo, ma questo non risolve il problema .... trasferisce semplicemente il problema a AppDelegate: "Digitare AppDelegate non conferma il protocollo" GIDSignInDelegate ". Se non può essere usato all'interno di un VC, perché dovrebbe la documentazione di Firebase lo mostra in questo modo? –

2

ho trovato metodi necessari digitando "func s" e la ricerca di suggestioni casella

Oh, mi manca Alt + Invio funzionalità di Android Studio

(BTW questo è per Swift 3 in 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

sta dicendo la vostra classe non ha implementato il metodo richiesto per il GIDSignInDelegate. Ci sono grandi cambiamenti in nome del metodo nella Swift 3. Così il vostro nuovo metodo sarà

public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: NSError!)

prega di controllare schermata Biblioteca. Quindi In manca nella nuova convenzione swift 3 di denominazione di metodi o classi. enter image description here

1

basta sostituire

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)") 
    }} 

con

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

Basta aggiungere

#import "GoogleSignIn/GoogleSignIn.h"

al file di intestazione Colmare e ha colpito shift + cmd + k per pulire.