我是否可以在登录视图控制器按钮操作中执行google登录功能。
现在使用谷歌登录sdk ,我们正在appdelegate中实现并使用另一个视图控制器来查看该登录按钮。
而不是在 appdelegate 中实现该功能,我们能否在视图控制器上实现登录视图控制器并处理谷歌按钮动作中的功能。
我是ios中实现SDK的新手。如果任何帮助有用。
答案 0 :(得分:4)
我已经发布了针对iOS 9和iOS 8的Google +登录目的的完整解决方案,并且还注意到Google登录流程没有移动到Safari浏览器中的应用程序之外,这是拒绝应用的常见原因来自Appstore。
这是链接
Google + login iOS App rejection from appstore using google sdk v3.x
您只需在自己的自定义视图控制器中实现GIDSignInDelegate
,而不是在AppDelegate
中执行。因此,根据您的问题,您的自定义视图控制器将为LoginViewController
。
答案 1 :(得分:2)
如果您想在v5.0.2和Swift 5的Google登录过程中使用自定义视图控制器,请执行以下操作...
按照说明将GoogleSignIn工具包下载并安装到您的应用中。参见Start integrating Google Sign-In into your iOS app。
在您的AppDelegate.swift
文件中,执行以下操作:
将以下内容添加到导入部分:
import GoogleSignIn
在此函数的底部添加以下行:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// other code here...
// Initialize Google sign-in
GIDSignIn.sharedInstance().clientID = "YOUR_CLIENT_ID"
return true
}
确保您从自己的AppDelegate.swift
文件中删除这一行:
GIDSignIn.sharedInstance().delegate = self // REMOVE THIS LINE!
此外,请勿在您的GIDSignInDelegate
类标题中使用AppDelegate.swift
!
添加此功能(如果尚不存在),然后在其中添加以下内容:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return GIDSignIn.sharedInstance().handle(url)
}
如果您的应用程序使用Facebook 和 Google登录,请使用以下命令:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
var flag: Bool = false
if ApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) {
// Handle Facebook URL scheme
flag = ApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
} else {
// Handle Google URL scheme
flag = GIDSignIn.sharedInstance().handle(url)
}
return flag
}
您的AppDelegate.swift
文件已完成!接下来,在您的自定义登录视图控制器上执行以下操作,我们将其称为LogInViewController.swift
,如下所示:
将以下内容添加到导入部分:
import GoogleSignIn
将GIDSignInDelegate
添加到您的类标题中,如下所示:
class LoginViewController: UIViewController, UITextFieldDelegate, UINavigationControllerDelegate, GIDSignInDelegate {
// your class code here...
}
在您的override func viewDidLoad()
中,在底部添加以下内容:
GIDSignIn.sharedInstance().delegate = self
要符合GIDSignInDelegate
,请确保添加以下功能:
// Retrieve user profile details from Google
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if (error == nil) {
// perform your log in functions here...
// ex. assign user profile data to variables
self.appUser.email = user.profile.email
self.appUser.firstname = user.profile.givenName
self.appUser.lastname = user.profile.familyName
// etc.
// Sign out of Google when logic completes for security purposes
GIDSignIn.sharedInstance().signOut()
} else {
print(error.localizedDescription)
}
}
并添加此功能以符合委托:
func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
if let error = error {
print(error.localizedDescription)
}
}
这就是创建自定义视图控制器所需要的。我不不使用GIDSignInDelegate
或AppDelegate.swift
中的委托函数,实际上,我完全删除了它们。该应用程序执行完美。我希望这对某人有帮助!
只需将您为我所做的一切回报给StackOverflow社区。 p>