iOS Swift: Google登录出现错误

12
我按照这个教程,使用Swift在我的iOS应用程序中添加Google登录。我按照所有步骤操作,但是当我尝试构建应用程序时,我的appdelegate.swift文件出现了问题。
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().clientID = "client id"

    return true

}

所以以下代码行

GGLContext.sharedInstance().configureWithError(&configureError)

错误信息是“使用未解决的标识符GGLContext”。可能存在什么问题?


还有一件事,我正在我的现有应用中添加Google登录,所以我不使用Pod,只是按照教程中提供的方式手动集成文件。 - Anil Kumar
我也遇到了同样的问题。我按照谷歌开发者网站上的教程进行操作,链接为https://developers.google.com/identity/sign-in/ios/start-integrating 。但是我认为对于那些没有使用pods集成的人来说,该教程中缺少一些内容。你找到解决方案了吗? - user4615157
谷歌在干什么?他们甚至连教程都写不正确! - DàChún
4个回答

5

在Bridging-Header.h中

import <GoogleSignIn/GoogleSignIn.h>

import <Google/Core.h>

在AppDelegate.swift中

import Google

这似乎不再适用于GoogleSignIn 4.0.0,我看到了“'Google/Core.h'文件未找到”的错误。 - danny
3
实际上,版本并不是问题所在,我的问题应该是清楚的,因为CocoaPod框架不需要桥接头文件。以防万一其他人在使用CocoaPods时也遇到此问题:有一个名为“GoogleSignIn”的pod库,我包含了它,但这是错误的选择,因为它没有所有必需的依赖项。你需要安装Google/SignIn这个pod库,它依赖于Google框架(以及一堆看起来毫不相关的内容,如FirebaseCore和FirebaseAnalytics)。如果使用正确的pod库,文档中的说明是正确的。 - danny
@danny "使用正确的Pod,文档中的指示是正确的。" ... Google有文件说明要同时使用两个。找到正确的文档非常困难。 - Sethmr
https://github.com/googlesamples/google-services/blob/master/ios/signin/SignInExampleSwift/AppDelegate.swift 显示 "var configureError: NSError?; GGLContext.sharedInstance().configureWithError(&configureError);" 甚至不需要。 - Sethmr

2

前言:

最近几天我一直被困扰,当我集成Cocoapod Google/SignIn时,我一直收到线程警告。经过深入研究,我可能已经找到了一个解决方案。如果您的项目中只需要Google的登录功能,那么这可能是值得考虑的。如果您已经集成了Firebase或Google的任何其他部分,您可能永远不会遇到导致您进入此线程的问题。

好的, 在研究了一段时间后,我发现我的解决方案是:

在桥接头文件中仅导入#import <GoogleSignIn/GoogleSignIn.h>

在AppDelegate中仅导入import GoogleSignIn

在Podfile中仅导入pod 'GoogleSignIn'

在AppDelegate didFinishLaunchingWithOptions方法中做如下操作:

if let path = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist"),
    let googleInfo = NSDictionary(contentsOfFile: path),
    let clientId = googleInfo["CLIENT_ID"] as? String {
    GIDSignIn.sharedInstance().clientID = clientId
}
GIDSignIn.sharedInstance().delegate = self

"并删除:"
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError!)")

通过这个设置,一切似乎都很顺利。我是通过查看下面的链接得到灵感的。如果这对您有用,请告诉我。

https://github.com/googlesamples/google-services/blob/master/ios/signin/SignInExampleSwift/AppDelegate.swift


1
我找到了解决方案,您可以使用Bridge-Header.h文件并像这样导入。
#ifndef Bridge_header_h
#define Bridge_header_h

#import "Google/Core.h"
#import "GoogleSignIn.h"

#endif /* Bridge_header_h */

在我的端上它完美地工作。


0

在Swift中,以下代码适用于我。

导入GoogleSignIn


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接