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?
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]];
}
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!
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)
}
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
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);
}
}
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])
}
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
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];
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)
}
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)
}
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