私は彼らのウェブサイトによるとグーグルが述べている通りにグーグルサインインを実装しました。私はそれを約1か月前に機能させていましたが、今では何もしません。 cocoapodを削除し、彼らのWebサイトをTまでたどってすべてをやり直そうとしましたが、まだ何も起きていません。デリゲートメソッドが呼び出されていないようで、理由はわかりません。どんな助けでもありがたいです。ありがとう!
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)
}
[〜#〜]編集[〜#〜]
何時間も経った後、笑、これを理解した後、Googleサインインボタンは1)2秒以上押し続けた、2)左/下/右にスワイプしたが上にない場合に機能しますこの原因はわかりません。提案を受け付けています!ありがとう!
私はそれを理解しました、他の誰かにこの愚かな愚かな問題を知らせたいです!
問題はグーグルボタンと私がキーボードを閉じる必要があるタップにあります。ここには載せませんでしたが、ここにあります。
let tap = UITapGestureRecognizer(target: self, action: #selector(LoginViewController.dismissKeyboard))
self.view.addGestureRecognizer(tap)
func dismissKeyboard() {
self.view.endEditing(true)
}
グーグルの代表団は、何らかの理由でこれを台無しにします。文字通り問題を見つけたばかりなので、まだ解決策を考え出していませんが、他の誰かが問題を抱えている場合は、これが役立つことを願っています!
私は同じ問題を抱えていました、そしてそれはキーボードを閉じるためにメインビューにバインドされたタップジェスチャレコグナイザーの問題でした。誤ってGIDSignInButton内のタッチもキャプチャしていました。この設定を変更すると、次のことが役立ちました。
tapGesture.cancelsTouchesInView = false
UITapGestureRecognizerのデリゲートを実装し、Googleサインインボタンをタップしたケースを処理します。
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if touch.view is GIDSignInButton {
return false
}
return true
}
スウィフト3:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if touch.view is GIDSignInButton {
return false
}
return true
}
それは私にとって問題を解決しました。
迅速で簡単な解決策:
手順:
UIGestureRecognizerDelegate
に拡張dismissOnTap()
を追加しますコード:
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)
}
}
ボタンが正しく機能しないため、以前はGIDSignInButtonの上にUIButtonを配置し、UIButtonアクション内でメソッドを呼び出しました。
@IBAction func signInWithGoogle(_ sender: Any) {
GIDSignIn.sharedInstance()?.signIn()
}