2016-06-10 15 views
7

Ho implementato l'accesso a Google esattamente come afferma Google in base al loro sito web. L'ho fatto funzionare circa un mese fa, ora non fa niente. Ho provato a rifare tutto cancellando il cocoapod e seguendo il loro sito Web su una T, ma non succede nulla. È come se nessuno dei metodi delegati fosse chiamato, e non sono sicuro del perché. Qualsiasi aiuto sarebbe riconoscente. Grazie!Il pulsante di accesso di Google non fa nulla

import GoogleSignIn 
import Google 
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    //Get Twitter and set Twitter keys for Application 
    Twitter.sharedInstance().startWithConsumerKey("uBedaxDuMDgImGbjun1oYf0ay", consumerSecret: "OaKqBZUesX5CypHCwrTvTZE22jrXIuRsUeZzVaMHej11R5Vh3b") 
    Fabric.with([Twitter.self]) 

    // Initialize sign-in GOOGLE 
    var configureError: NSError? 
    GGLContext.sharedInstance().configureWithError(&configureError) 
    assert(configureError == nil, "Error configuring Google services: \(configureError)") 

    GIDSignIn.sharedInstance().delegate = self 

    return true 
} 

func application(application: UIApplication, 
       openURL url: NSURL, options: [String: AnyObject]) -> Bool { 
    return GIDSignIn.sharedInstance().handleURL(url, 
               sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, 
               annotation: options[UIApplicationOpenURLOptionsAnnotationKey]) 
} 

func application(application: UIApplication, 
       openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { 
    var options: [String: AnyObject] = [UIApplicationOpenURLOptionsSourceApplicationKey: sourceApplication!, 
             UIApplicationOpenURLOptionsAnnotationKey: annotation!] 
    return GIDSignIn.sharedInstance().handleURL(url, 
               sourceApplication: sourceApplication, 
               annotation: annotation) 
} 

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, 
      withError error: NSError!) { 
    print("SIGNING IN") 
    if (error == nil) { 
     let email = user.profile.email 
     print(user.authentication) 
     // ... 
    } else { 
     print("ERROR = \(error.localizedDescription)") 
    } 
} 

View Controller

import GoogleSignIn 
class LoginViewController: UIViewController, UITextFieldDelegate, CLLocationManagerDelegate, GIDSignInUIDelegate 
override func viewDidLoad() { 

    //Default setup for View Controller 
    super.viewDidLoad() 

    GIDSignIn.sharedInstance().uiDelegate = self 
    var error:NSError? 
    GGLContext.sharedInstance().configureWithError(&error) 
    if(error != nil) { 
     print(error) 
    } 

    var signInButton = GIDSignInButton(frame: CGRect(x: 0, y: 0, width: 150, height: 400)) 
    view.addSubview(signInButton) 

} 

EDIT

dopo ore, lol, di capire questo fuori, l'accesso Google opere Button quando si è 1) premuto per più di 2 secondi, 2) Swiped sinistra/giù/destra ma non attivo Non sono sicuro di questa causa e sarei aperto a suggerimenti! Grazie!

+0

si prega di inviare un codice –

+0

ci si va. Grazie per l'aspetto – impression7vx

risposta

9

L'ho capito, vorrei far sapere a qualcun altro questo stupido stupido problema!

Il problema è con il pulsante Google e il rubinetto devo chiudere la tastiera. Non l'ho messo qui, ma eccolo qui.

let tap = UITapGestureRecognizer(target: self, action: #selector(LoginViewController.dismissKeyboard)) 
self.view.addGestureRecognizer(tap) 

func dismissKeyboard() { 
    self.view.endEditing(true) 
} 

I delegati di Google lo confondono per qualche motivo. Non ho ancora trovato una soluzione, visto che ho appena trovato il problema, ma se qualcun altro ha un problema, spero che questo aiuti!

+0

Ehi, non sono del tutto sicuro di cosa intendi. Penso che sto vivendo lo stesso problema. L'ho fatto funzionare e poi all'improvviso ha smesso di funzionare. Quando rimuovo "GIDSignIn.sharedInstance(). UiDelegate = self" questa riga di codice si interrompe e quando lo richiamo non ottengo errori ma assolutamente non succede nulla. – tryingtolearn

+0

Beh, il mio problema è: avevo un pulsante di accesso a google e, per di più, avevo aggiunto un gesto di tocco all'intera vista. Quindi registrerebbe il gesto di tocco invece del pulsante Google. Quindi, se avessi premuto più a lungo sul pulsante google, il tap non si registrerebbe ma il pulsante google lo farebbe. Quindi ho dovuto trovare un modo per registrare un tocco sullo schermo (che permetteva di nascondere la tastiera se era lì) e utilizzare il pulsante GID. – impression7vx

3

Implementare delegato del UITapGestureRecognizer e gestire il caso che avete battuto sul vostro segno Google nel pulsante:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 
    if touch.view is GIDSignInButton { 
     return false 
    } 
    return true 
} 

Swift 3:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 
    if touch.view is GIDSignInButton { 
     return false 
    } 
    return true 
} 

che ha risolto il problema per me.

+1

@EricD, ho aggiornato la mia risposta, grazie per il punto. – fic

7

Ho avuto lo stesso problema ed era un problema con un riconoscitore di gesti tocco che era associato alla vista principale per ignorare la tastiera. È stato accidentalmente catturato anche i tocchi all'interno di GIDSignInButton. La modifica di questa impostazione ha aiutato:

tapGesture.cancelsTouchesInView = false 
+0

Questo è il trucco! Mi hai letteralmente salvato. Risposta migliore anche dopo 17 mesi –

2

rapida, facile soluzione:

Passi:

  1. estendere a UIGestureRecognizerDelegate
  2. Incolla nei seguenti metodi
  3. aggiungere dismissOnTap() alla vista controller

Codice:

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

override func viewDidLoad() { 
     super.viewDidLoad() 

     // Call dismissOnTap 
     dismissOnTap() 

} 

func dismissOnTap() { 
     self.view.isUserInteractionEnabled = true 
     let tap = UITapGestureRecognizer(target: self, action: Selector("dismissKeyboard")) 
     tap.delegate = self 
     tap.cancelsTouchesInView = false 
     self.view.addGestureRecognizer(tap) 
} 

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 
     if touch.view is GIDSignInButton { 
      return false 
     } 
     return true 
    } 

    func dismissKeyboard() { 
     self.view.endEditing(true) 
    } 

} 
Problemi correlati