5

Я представляю вход в Google для своего приложения, а документация Google и Firebase достаточно полная, то, что я сделал по их предложению, недостаточно. Я все еще получаю эту ошибку. Надеюсь, это поможет другим в поиске решения проблемы при внедрении их SDK .... спасибо заранее за рецензирование коренастый один:Вход в Google через Firebase: GIDSignInDelegate не соответствует ViewController

Error Image

Вот Firebase guide и Google guide:

Так

  1. Добавлена ​​Google для podfile - ПРОВЕРКА
  2. Adde д линии в Bridging-заголовка - ПРОВЕРКА
  3. Добавлено GoogleService-Info.plist & расслоение идентификатор & обратный идентификатор клиента в схемы URL - Проверьте
  4. приложение делегат имеет следующее, без каких-либо ошибок но я замечаю, что, вероятно, будут конфликты между входом в систему Facebook (работает корректно) и новым Google, о котором я не знаю, как обращаться вместе:

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

    P.S. я не добавил GIDSignInDelegate к AppDelegate здесь, потому что я планирую для моего VC справиться с логикой входа в систему, как вы увидите ниже ...

  5. LoginVC ViewController код здесь:

    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 
        } 
    

Тогда это, что от того, что я могу видеть ... должно быть все, что Google нужно поговорить с 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? Извините за давних парней ... но я сделал все, что предлагает руководство Firebase, и это означает, что логика в документе Google для AppDelegate присутствует там в ProfileVC. Любые указатели?

+0

Я сам изучаю программирование на iOS и просто получил сегодня знак google. Я предполагаю, что это проблема с GISSignInDelegate, хотя вы сказали, что позаботились об этом. Мое предложение состоит в том, чтобы начать с чистого проекта, следовать учебному курсу в Google буквально, пока вы его не запустили, тогда вы можете изменить все, что хотите –

+0

Да, с тех пор, как он начал работать с новой firebase, спасибо! –

+0

Такая же проблема при обновлении до быстрого 3. –

ответ

-1

Перейти к: Ссылка Binary с библиотеками. Затем нажмите «Добавить», затем «Добавить другое». Нажмите «Cmd + shift + G». Затем введите: «/ usr/lib». Затем нажмите «libz.1.dylib». Нажмите Ok, чтобы добавить, и ошибки исчезнут. Кроме того, вы, вероятно, не выполняете все функции, которые прилагаются к этому протоколу. Вам необходимо будет добавить:

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

Кроме того, убедитесь, что вы добавили foll. строка в заголовке моста.

#import <GoogleSignIn/GoogleSignIn.h> 

UPDATE: GIDSignInDelegate не может быть добавлен в View Controller. Вместо этого вы должны добавить «GIDSignInUIDelegate» в VC и попытаться выполнить другие (Gidsigndwlwgate) операции в App Delegate. Это будет работать.

+0

Как вы увидите выше, у меня есть эти элементы кода уже в моем VC. Я попробовал библиотеку «libz.1 ...», но я считаю, что это для Google Analytics, и в любом случае это не обязательно. Независимо от того, ни одно из упомянутых вами изменений не является решением моей проблемы. –

+0

Обновлен ответ. –

+0

Мне нравится ваш оптимизм, но это не решает проблему ... это просто переносит проблему на AppDelegate: «Тип AppDelegate не подтверждает протокол GIDSignInDelegate. Если он не может использоваться внутри VC, почему Документация Firebase показывает это так? –

2

я нашел необходимые методы, введя "Func s" и поиска в окне предложений

О, я скучаю по Alt + Enter функцию в Android Studio

(КСТАТИ это для Swift 3 в XCode 8 бета-версия)

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

Это говорит ваш класс не реализован необходимый метод для GIDSignInDelegate. Есть существенное изменение в имени метода в Swift 3. Таким образом, ваш новый метод будет

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

Пожалуйста, проверьте библиотеки снимок экрана. Таким образом, In отсутствует в новом соглашении с быстрым 3 об именах методов или классов. enter image description here

1

Просто замените

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

с

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

Просто добавьте

#import "GoogleSignIn/GoogleSignIn.h"

к вашему Bridging заголовочный файл и нажмите Shift + Ctrl + K, чтобы очистить.

Смежные вопросы