2016-04-11 20 views
2

Vor allem muss ich sagen, dass ich nicht CocoaPods verwenden. Und es ist das erste Mal, wenn ich Google API verwende.
In Google Guide sagt, dass ich GIDSignIn in application:didFinishLaunchingWithOptions: Methode konfigurieren muss, aber ich verwende auch Facebook API, die in dieser Methode konfiguriert ist. Auch wenn ich versuche, G API in dieser Methode zu konfigurieren, erhalte ich Fehler: Type 'AppDelegate' does not conform to protocol 'GIDSignInDelegate' und Value of type 'GIDSignIn' has no member 'configureWithError'.
Wie kann ich GIDSignIn nicht in der AppDelegate konfigurieren?Google Anmelden API

Bridging Header 

#ifndef Bridging_Header_h 
#define Bridging_Header_h 

#import <FBSDKCoreKit/FBSDKCoreKit.h> 
#import <FBSDKLoginKit/FBSDKLoginKit.h> 
#import <Bolts/Bolts.h> 
#import <GoogleSignIn/GoogleSignIn.h> 

#endif 

AppDelegate 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
//  var configureError: NSError? 
//  GGLContext.sharedInstance().configureWithError(&configureError) 
//  assert(configureError == nil, "Error configuring Google services: \(configureError)") 
// 
//  GIDSignIn.sharedInstance().delegate = self 
     return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
    } 

    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 
     return FBSDKApplicationDelegate.sharedInstance().application(
      application, 
      openURL: url, 
      sourceApplication: sourceApplication, 
      annotation: annotation) 
    } 

    func applicationDidBecomeActive(application: UIApplication) { 
     FBSDKAppEvents.activateApp() 
    } 
} 

ViewController 

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { 
     if (error == nil) { 
      // Perform any operations on signed in user here. 
      let userId = user.userID     // For client-side use only! 
      let idToken = user.authentication.idToken // Safe to send to the server 
      let fullName = user.profile.name 
      let givenName = user.profile.givenName 
      let familyName = user.profile.familyName 
      let email = user.profile.email 

      print(userId) 
      print(idToken) 
      print(fullName) 
      print(givenName) 
      print(familyName) 
      print(email) 

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

    @IBAction func gPlusLoginButtonPressed(sender: AnyObject) { 
     var googleSignIn: GIDSignIn! 
     googleSignIn = GIDSignIn.sharedInstance(); 
     googleSignIn.delegate = self 
     googleSignIn.uiDelegate = self 
     googleSignIn.shouldFetchBasicProfile = true; 
     googleSignIn.clientID = "24189713900-d5i1fokf9eubmb03thavk7ht371210ji.apps.googleusercontent.com" 
     googleSignIn.scopes.append("https://www.googleapis.com/auth/plus.login") 
     googleSignIn.scopes.append("https://www.googleapis.com/auth/plus.me") 
     googleSignIn.scopes.append("profile") 
//  googleSignIn.signInSilently() 
     googleSignIn.signIn(); 
    } 
+0

post einige code hier ..... –

+0

Ich habe meine Frage aktualisiert. – Ookey

Antwort

2

entfernen Sie diese Zeile aus didFinishLaunch GIDSignIn.sharedInstance(). Delegat = Selbst

und in Ihrer View-Controller-Klasse implementieren GIDSignInDelegate, protocolos GIDSignInUIDelegate

und in Ihrer Ansicht Controller ViewDidload-Methode schreiben Sie diese

func viewDidLoad() { 
    GIDSignIn.sharedInstance().delegate = self 
    GIDSignIn.sharedInstance().uiDelegate = self 
} 

und vergessen Sie nicht, URL in App-Delegate zu behandeln.

func application(application: UIApplication, 
       openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 

var flag: Bool = false 

// handle Facebook url scheme 
if let wasHandled:Bool = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) { 
    flag = wasHandled 
} 

if let googlePlusFlag: Bool = GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation) { 
    flag = googlePlusFlag 
} 

return flag 
} 
1

GGLContext ist ein Teil von Google, daher wird nur der Import von GoogleSignIn diesen Fehler verursachen. Sie müssen Google Bibliothek importieren.

Link zu Google-Bibliothek 2.0.3 https://www.gstatic.com/cpdc/a96d915a636d0afb-Google-2.0.3.tar.gz

Verwenden von Google Anmelden. Sie müssen den Methoden GIDSignInDelegate und GIDSignInUIDelegate und Delegate-Methoden implementieren entsprechen.

class LoginViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { 

    func viewDidLoad() { 
     GIDSignIn.sharedInstance().clientID = Resources.googlePlusClientId() 
     GIDSignIn.sharedInstance().shouldFetchBasicProfile = true 
     GIDSignIn.sharedInstance().scopes = ["profile", "email"] 
     GIDSignIn.sharedInstance().delegate = self 
     GIDSignIn.sharedInstance().uiDelegate = self 
    } 

    func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, 
      withError error: NSError!) { 
    } 

} 

Und In AppDelegate

func application(application: UIApplication, 
    openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { 
     let isFacebookURL = FBSDKApplicationDelegate.sharedInstance().application(application, 
      openURL: url, 
      sourceApplication: sourceApplication, 
      annotation: annotation) 

     let isGooglePlusURL = GIDSignIn.sharedInstance().handleURL(url, 
      sourceApplication: sourceApplication, 
      annotation: annotation) 

     return isFacebookURL || isGooglePlusURL 
} 
Verwandte Themen