在允许后,Google登录不会重定向到应用程序

时间:2016-02-04 12:18:37

标签: ios swift google-plus google-authentication

我正在使用此tutorial在应用中使用Google登录。

  1. 我通过cocoapods安装了GoogleSignIn。 pod 'GoogleSignIn', '~> 2.4.0'
  2. GSignIn-Bridging-Header.h内添加了#import <GoogleSignIn/GoogleSignIn.h>
  3. 创建网址类型:enter image description here

  4. 使用GIDSignInButton

  5. 创建视图
  6. 添加了代码:

    class ViewController: UIViewController, GIDSignInDelegate,    GIDSignInUIDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        GIDSignIn.sharedInstance().delegate = self
        GIDSignIn.sharedInstance().uiDelegate = self
        GIDSignIn.sharedInstance().clientID = "KEY" 
     }
    
     func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
    if let err = error {
       print(error)
    }
    else {
       print(GIDSignIn.sharedInstance().currentUser.profile.name)
       print(GIDSignIn.sharedInstance().currentUser.profile.email)
       self.performSegueWithIdentifier("idSegueContent", sender: self)
      }
    }
    
    
    func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) {
    
    }
    }
    
  7. 但是当我点击允许

  8. enter image description here

    它会将我重定向到google.com,而不是应用程序。

4 个答案:

答案 0 :(得分:5)

经过一天的工作后,我终于解决了这个问题。 @ayman Ibrahim基本上是对,但我认为答案有点宽泛。不同版本的Swift / Objective-C和Google SDK,在AppDelegate中调用不同版本的canOpenURL方法。我不是100%肯定这一点,并希望得到确认或纠正。这是适合我的那种方法的版本。我正在使用谷歌的SDK v.4.0,目标是iOS 9.1,并使用Swift 3.0:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    let checkFB = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
    let checkGoogle = GIDSignIn.sharedInstance().handle(url as URL!,sourceApplication: sourceApplication,annotation: annotation)
    return checkGoogle || checkFB
}

我也在使用FBSDK,所以请忽略该行。

答案 1 :(得分:2)

在AppDelegate中,您需要添加

的实现
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

Google通过网址发回信息,上述方法会捕获此信息并发送回应用程序。

答案 2 :(得分:0)

我确实找到了另一个答案。就我而言,在AppDelegate中,我确实实现了2个委托方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

第一个是委托方法,不应该再实现,它被第二个方法取代。但不知何故,我仍然使用两者,只需添加

return [[GIDSignIn sharedInstance] handleURL:url
                                   sourceApplication:sourceApplication
                                          annotation:annotation];

在第二个,然后再次,它只是回调到第一个方法,然后它不再导航到我的应用程序。

所以我想把我的案子发给可能犯这个错误的人,我花了太长时间才发现

答案 3 :(得分:0)

如果您在应用中集成了CleverTap库CleverTap.autoIntegrate(),则委托不会将用户重定向回应用程序。手动添加CleverTap事件将解决此问题。如果你做了其他一切正确的事。