2016-04-11 209 views
2

首先需要說的是我不使用CocoaPods。這是我第一次使用Google API。
在谷歌指南說,我需要配置GIDSignInapplication:didFinishLaunchingWithOptions:方法,但我也使用Facebook API,這是在這種方法配置。此外,當我嘗試在此方法中配置G API時,我收到錯誤:Type 'AppDelegate' does not conform to protocol 'GIDSignInDelegate'Value of type 'GIDSignIn' has no member 'configureWithError'
如何配置GIDSignIn不在AppDelegate中?Google登錄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

在此處張貼一些代碼..... –

+0

我已更新我的問題。 – Ookey

回答

2

移除didFinishLaunch GIDSignIn.sharedInstance()。委託=自

並在視圖控制器類實現GIDSignInDelegate這條線,GIDSignInUIDelegate protocolos

並在你的視圖控制器中viewDidload方法寫這個

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

並且不要忘記在應用程序委託中處理url。

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是Google的一部分,所以只需導入GoogleSignIn就會給你那個錯誤。您需要導入Google資料庫。

鏈接到谷歌圖書館2.0.3 https://www.gstatic.com/cpdc/a96d915a636d0afb-Google-2.0.3.tar.gz

使用谷歌登錄。您需要符合GIDSignInDelegate和GIDSignInUIDelegate以及實現委託方法。

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!) { 
    } 

} 

和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 
}