web-dev-qa-db-ja.com

Googleサインインボタンは何もしません

私は彼らのウェブサイトによるとグーグルが述べている通りにグーグルサインインを実装しました。私はそれを約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)左/下/右にスワイプしたが上にない場合に機能しますこの原因はわかりません。提案を受け付けています!ありがとう!

16
impression7vx

私はそれを理解しました、他の誰かにこの愚かな愚かな問題を知らせたいです!

問題はグーグルボタンと私がキーボードを閉じる必要があるタップにあります。ここには載せませんでしたが、ここにあります。

let tap = UITapGestureRecognizer(target: self, action: #selector(LoginViewController.dismissKeyboard))
self.view.addGestureRecognizer(tap)

func dismissKeyboard() {
    self.view.endEditing(true)
}

グーグルの代表団は、何らかの理由でこれを台無しにします。文字通り問題を見つけたばかりなので、まだ解決策を考え出していませんが、他の誰かが問題を抱えている場合は、これが役立つことを願っています!

10
impression7vx

私は同じ問題を抱えていました、そしてそれはキーボードを閉じるためにメインビューにバインドされたタップジェスチャレコグナイザーの問題でした。誤ってGIDSignInButton内のタッチもキャプチャしていました。この設定を変更すると、次のことが役立ちました。

tapGesture.cancelsTouchesInView = false
17

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
}

それは私にとって問題を解決しました。

6
fic

迅速で簡単な解決策:

手順:

  1. UIGestureRecognizerDelegateに拡張
  2. 次の方法で貼り付けます
  3. ビューコントローラに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)
    }

}
5
Ryan Cocuzzo

ボタンが正しく機能しないため、以前はGIDSignInButtonの上にUIButtonを配置し、UIButtonアクション内でメソッドを呼び出しました。

@IBAction func signInWithGoogle(_ sender: Any) {
        GIDSignIn.sharedInstance()?.signIn()
    }
0
Akhil George