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

Facebook登录和Google登录之间的冲突-iOS,ios,facebook,google-signin,Ios,Facebook,Google Signin,我已在我的应用程序中成功部署了通过Facebook登录。然后,我尝试添加通过Google+登录的可能性,但经过几个漫长的编码之夜,以及一些比我现在总结的要先进得多的人发来的帖子,我放弃了。示例: 我现在正试图通过遵循来自的看似简单的说明来实现Google登录 然而,谷歌对此的解释与通过Facebook运行登录所需的设置产生了一些冲突。 我试图使用Pod重写Facebook代码,并在安装Google登录的同时安装它,但我无法使其工作(仍然妨碍通过Facebook进行身份验证)。检查您是否在内部实现

我已在我的应用程序中成功部署了通过Facebook登录。然后,我尝试添加通过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;
}

我为谷歌和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)

}

谷歌登录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)
        }


    }

fb url方案摘自Info.plist中的url方案

谢谢您的回答。这正是重点。Facebook需要一个类似的处理程序,就像Google Plus需要它一样(因此我转向了Google登录)。现在,您指出要为Google登录使用相同的处理程序。这是我在方法中得到的:–//GooglePlus尝试返回[GPPURLHandler-handleURL:url sourceApplication:sourceApplication注释:注释]//Facebook return[[FBSDKApplicationDelegate sharedInstance]应用程序:应用程序openURL:url源应用程序:源应用程序注释:注释];我对这两者如何协同工作感到困惑,因为到目前为止,当我取消对Google块的注释时,我从Facebook块得到了一个很好的冲突。再次感谢。我终于能够实施您的解决方案了。另外,在这段视频的帮助下:考虑到Parse提供的支持不足,现在可能无法解决的大问题是将Google+登录验证链接到Parse本身(通过Git Hub提交您的登录示例没有详细信息)。但那是另一个故事。再次感谢@Waruna@NathanTuggy:谢谢你的编辑。我会尝试一下并让你知道。谢谢。当我在最新的iOS SDK 4.5.1中使用FBAppCall时,我会收到“使用未声明的标识符”消息。您使用的是哪个iOS SDK版本?@Waruna我检查了您的答案,但是,如果我可以在建议的条件下获得要插入的访问令牌,我会收到FBSession(未知接收器)的一个错误,FBAppCall(使用未声明的标识符)的另一个错误,类似于上面其他用户所描述的。我使用的是iOS SDK 4.4。关于如何解决这个问题有什么想法吗?为了解决我上面提到的问题,我写了以下内容。但是,代码似乎在执行过程中被传递。我将继续处理这个:-(BOOL)应用程序:(UIApplication*)应用程序openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication注释:(id)注释{if([GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]){//Google Plus方法返回YES;}else{//Facebook方法返回[[FBSDKApplicationDelegate sharedInstance]应用程序:应用程序openURL:url源应用程序:源应用程序注释:注释];}