Facebook 登录与 Google 登录之间的冲突 - iOS

Conflict between Facebook Sign In and Google Sign In - iOS

我已经在我的应用程序中成功部署了通过 Facebook 登录。然后我尝试增加通过 Google+ 登录的可能性,但经过几个漫长的编码夜晚和一些比我对目前存在的障碍的结论更高级的人的帖子我放弃了示例:How can I login to google-plus using google-plus-ios-sdk-1.7.1 sdk?.

我现在正尝试按照 Google Developer site.

中看似简单的说明实现 Google 登录

然而,Google 解释的方式与 运行 通过 Facebook 登录所需的设置产生了一些冲突。 我试图通过使用 Pod 重写 Facebook 代码并在安装 Google 登录的同时安装它,但我无法使其工作(仍然阻碍通过 Facebook 进行身份验证)。

检查是否在里面实现了GPPURLHandler方法

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

}
    -

这样实现。

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


    if ([[url scheme] isEqualToString:FBTOKEN]) {
        return [FBSession.activeSession handleOpenURL:url];

        return [FBAppCall handleOpenURL:url
                      sourceApplication:sourceApplication
                            withSession:FBSession.activeSession];
    }
    else { 
            [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];

    }
  return YES;
}

我为 Google 和 Facebook

实施了这种方式
func application(application: UIApplication,
    openURL url: NSURL,
    sourceApplication: String?,
    annotation: AnyObject) -> Bool {

        let options: [String: AnyObject] = [UIApplicationOpenURLOptionsSourceApplicationKey: sourceApplication!,
            UIApplicationOpenURLOptionsAnnotationKey: annotation]

            return FBSDKApplicationDelegate.sharedInstance().application(
                application,
                openURL: url,
                sourceApplication: sourceApplication,
                annotation: annotation) ||
            GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, annotation: nil)

}

这适用于 Google 登录版本 2.4.0 和 Facebook ios SDK 4.10.0

1) 删除方法

func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool 

来自 AppDelegate

2) 实现如下:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {



        if url.scheme == "fbxxxxxxxxxxxx" {
            return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
        }
        else {
            let options: [String: AnyObject] = [UIApplicationOpenURLOptionsSourceApplicationKey: sourceApplication!,
                UIApplicationOpenURLOptionsAnnotationKey: annotation]

            return FBSDKApplicationDelegate.sharedInstance().application(
            application,
            openURL: url,
            sourceApplication: sourceApplication,
            annotation: annotation) ||
            GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, annotation: nil)
        }


    }

fburl方案取自Url方案Info.plist