2015-07-19 174 views
2

我已经通过Facebook在我的应用程序中成功部署了登录。然后,我尝试添加通过Google+登录的可能性,但是在经历了几个漫长的夜晚编码和来自人们的几个帖子之后,我放弃了比现在的例子中存在的路障更高级的内容:How can I login to google-plus using google-plus-ios-sdk-1.7.1 sdk?Facebook登录和谷歌登录之间的冲突 - iOS

我现在试图通过遵循从Google Developer site看似简单的指令来实施Google登录。

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

+0

@NathanTuggy:感谢您的编辑 – Stefano

回答

5

实现这样的方式。

- (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; 
} 
+0

我会试试这个,让你知道。谢谢。 – Stefano

+0

当我使用最新的iOS SDK 4.5.1的FBAppCall时,我得到了“使用未声明的标识符”消息。您使用的是哪种iOS SDK版本? – SAHM

+0

@Waruna我检查了你的答案,但是,如果我可以获得访问令牌插入建议的条件,我收到一个错误的FBSession(未知的接收器)和另一个FBAppCall(使用未声明的标识符),类似于描述由上面的其他用户提供。我正在使用iOS SDK 4.4。有关如何解决这个问题的任何想法? – Stefano

0

检查是否执行或不GPPURLHandler方法中

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

} 
    -
+0

谢谢您的回答。这正是重点。 Facebook需要一个类似的处理程序,就像GooglePlus需要它一样(因此我转向Google登录)。现在您指出要为Google登录使用相同的处理程序。这是我在该方法中的: - – Stefano

+0

// GooglePlus ATTEMPT return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; // Facebook返回[[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; – Stefano

+0

我很困惑这两个人如何一起工作,因为到目前为止,只要我取消注释Google块,我从Facebook块中获得了很好的冲突。再次感谢。 – Stefano

2

我以这种方式实现了谷歌和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) 

} 
-1

这与谷歌注册为我工作在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方案是从URL方案采取的Info.plist