Facebook SDK login nigdy nie oddzwania do mojej aplikacji na iOS 9

Śledziłem ten przewodnik, aby zaktualizować moją aplikację do korzystania z Facebook SDK 4.6, aby działać poprawnie, gdy zbudowany z iOS 9 SDK.

Kiedy dotknę przycisk logowania teraz, wyświetlany jest kontroler widoku Safari (nie powinien przekierowywać do aplikacji Facebook?), ale po zaakceptowaniu uprawnień kontroler widoku Safari nigdy nie zostanie odrzucony. Ładuje nową pustą stronę i siedzi tam nic nie robi. Jeśli nacisnę przycisk Gotowe, zwrócone FBSDKLoginManagerLoginResult ' s isCancelled jest prawdziwe.

Czy to normalne, że SDK wybiera kontroler widoku Safari zamiast aplikacji Facebook? I dlaczego nie dostaję połączeń zwrotnych po zakończeniu logowania?

Author: Hesham Abd-Elmegid, 2015-08-30

10 answers

Na iOS 9 po zaimplementowaniu UIApplicationDelegate's application:openURL:options:, application:openURL:sourceApplication:annotation: nie zostanie wywołany.

Więc musiałem zadzwonić FBSDKApplicationDelegate 's application:openURL:sourceApplication:annotation: z UIApplicationDelegate' s application:openURL:options:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
    return [[FBSDKApplicationDelegate sharedInstance] application:app
                                                      openURL:url
                                            sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                   annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
 131
Author: Hesham Abd-Elmegid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 19:18:16

Dla Swifta to działało dla mnie (dodaj to w AppDelegate.swift): {]}

@available(iOS 9.0, *)
func application(application: UIApplication,openURL url: NSURL, options: [String: AnyObject]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, 
     openURL: url, 
     sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String,
     annotation: options [UIApplicationOpenURLOptionsAnnotationKey])
}

I

@available(iOS, introduced=8.0, deprecated=9.0)
func application(application: UIApplication,openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {  
return FBSDKApplicationDelegate.sharedInstance().application(application,
     openURL: url,
     sourceApplication: sourceApplication!,
     annotation: annotation)
}

W każdym przypadku pamiętaj, aby dodać import FBSDKCoreKit z innymi import wypowiedziami.

To w zasadzie to, czego używa Google SignIn. Jeśli nadal nie działa, musisz ustawić delegatów i swoje informacje.plist jak to jest określone w dokumentach FaceBook. Mam nadzieję, że to pomoże!

 32
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-08 14:45:40

Dla Swift 3 & Facebook SDK 4.16.0:

Dodaj następujący kod do AppDelegate.swift

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
 15
Author: Johnny Tsoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-09 08:19:51

Dla tych z Was, którzy doświadczają tego samego problemu z iOS10 dodałem to:

@available(iOS 9.0, *)
func application(_ application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}

To powinno zadziałać, ale jak na razie to tylko obejście

 5
Author: CommittedEel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-06 16:17:43

Dla użytkowników xamarin:

public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
        {

            OnUrlProtocolDetected(url.ToString());
            if (url.AbsoluteString.StartsWith("fb"))
            {
                return ApplicationDelegate.SharedInstance.OpenUrl(application, url, sourceApplication, annotation);
            }

}
 3
Author: Abdullah Tahan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-02 18:34:57

Właśnie natknąłem się na ten problem, dzięki @ Hesham za naprawę.

Oto poprawka Swift3:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(
        app,
        open: url,
        sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
        annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
 2
Author: RichAppz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-14 22:51:04

Wykonałeś te kroki?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 return [[FBSDKApplicationDelegate sharedInstance] application:application
didFinishLaunchingWithOptions:launchOptions];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
  return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation
 ];
}

Myślę, że brakuje ci punktu, w którym musisz zadzwonić do delegata aplikacji w delegacie aplikacji. Druga metoda jest niezbędna, ponieważ daje wywołanie zwrotne do aplikacji o logowaniu zakończonym w safari przez użytkownika

 1
Author: Saheb Roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 17:28:13

Używałem starej wersji 3.24 i na iOS 9 borykałem się z podobnym problemem.

Okazało się, że w metodzie appDelegate - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

Was

return [FBSession.activeSession handleOpenURL:url];

Zamiast

return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];

 1
Author: Jakub Truhlář,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 13:35:25

Dla total swift newbies jak ja, problemem była alternatywna implementacja metody application ():

Wersja robocza:

 func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(
        application,
        open: url,
        sourceApplication: sourceApplication,
        annotation: annotation)
}

Wersja nie działająca (skopiowana skądś)

func application(application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(
        application,
        open: url,
        sourceApplication: sourceApplication,
        annotation: annotation)
}
 1
Author: victor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-29 11:16:44

Dla każdego, kto szuka szybkiej pomocy w tej właśnie sprawie, poniższe prace mi się przydały.

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: UIApplicationOpenURLOptionsSourceApplicationKey, annotation: UIApplicationOpenURLOptionsAnnotationKey)
    }
 -1
Author: Pearson Basham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 09:51:44