在iOS中集成Google和Facebook登录 - AppDelegate openURL

13

我正在尝试将Facebook和Google登录集成到我的应用程序中,但出现了问题:两者都需要在Appdelegate的openURL方法中添加以下内容:

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

return [FBSDKApplicationDelegate sharedInstance] application:application
                                                       openURL:url
                                             sourceApplication:sourceApplication
                                                    annotation:annotation
         ]]

有没有办法让它们正常地一起工作?我在网上搜索过,但答案都相当模糊,没有提供很好的解释。

解决方案

对于我来说(截至iOS 9),添加以下内容就解决了问题:

return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation] || [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation ];

在“canOpenURL”委托方法中解析发送的URL。 - Sauvik Dolui
抱歉,我不太明白你的意思? - user1686342
正如Maulik所回答的那样,您在委托方法中获取的URL必须是不同的。只需将它们记录下来以查看差异即可。您还应该尝试Maulik给出的答案方式。 - Sauvik Dolui
2个回答

6

使用以下代码...

- (BOOL)application:(UIApplication *)applicationopenURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplicationannotation:(id)annotation
    {
      if ([FBAppCall handleOpenURL:url sourceApplication:sourceApplication])
        return [FBSDKApplicationDelegate sharedInstance] application:application
                                                       openURL:url
                                             sourceApplication:sourceApplication
                                                    annotation:annotation
         ]];
      else

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

another answer..

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

     NSString *stringURL = [ url absoluteString];
    if([stringURL containsString:@"fb"])
    {


    return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation];
    }
    else
    {
        return [GPPURLHandler handleURL:url
                      sourceApplication:sourceApplication
                             annotation:annotation];

    }
}

那段代码已经过时了...我在之前的答案中看到过这个,但不幸的是没有解决我的问题 :( - user1686342
我使用了以下代码(添加在我的初始帖子中),这对我很有帮助。是您的智慧指引我找到了答案 :) - user1686342
FBAppCall不再可用。 - Surjeet Rajput

2

更新答案

func application(
            _ app: UIApplication,
            open url: URL,
            options: [UIApplication.OpenURLOptionsKey : Any] = [:]
        ) -> Bool {

        let urlString = url.absoluteString
        if urlString.contains("fb"){
            ApplicationDelegate.shared.application(
                app,
                open: url,
                sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
                annotation: options[UIApplication.OpenURLOptionsKey.annotation]
            )
        }
        else{
            
        }
            return GIDSignIn.sharedInstance().handle(url)
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接