Facebook登录和Google登录之间的冲突-iOS
我已在我的应用程序中成功部署了通过Facebook登录。然后,我尝试添加通过Google+登录的可能性,但经过几个漫长的编码之夜,以及一些比我现在总结的要先进得多的人发来的帖子,我放弃了。示例: 我现在正试图通过遵循来自的看似简单的说明来实现Google登录 然而,谷歌对此的解释与通过Facebook运行登录所需的设置产生了一些冲突。Facebook登录和Google登录之间的冲突-iOS,ios,facebook,google-signin,Ios,Facebook,Google Signin,我已在我的应用程序中成功部署了通过Facebook登录。然后,我尝试添加通过Google+登录的可能性,但经过几个漫长的编码之夜,以及一些比我现在总结的要先进得多的人发来的帖子,我放弃了。示例: 我现在正试图通过遵循来自的看似简单的说明来实现Google登录 然而,谷歌对此的解释与通过Facebook运行登录所需的设置产生了一些冲突。 我试图使用Pod重写Facebook代码,并在安装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源应用程序:源应用程序注释:注释];}