2015-05-27 11 views
5

Zaktualizowałem pakiet SDK do Facebooka z wersji 3.21.1 do wersji 4.1 w aplikacji na iOS (już na żywo).Logowanie do Facebooka kończy się niepowodzeniem (zawsze jest anulowane) po uaktualnieniu do wersji SDK 4.1

Starannie śledziłem przewodnik aktualizacji i zaimplementowałem nowe metody logowania. Kod, którego użyłem, jest podany w dokumentacji na Facebooku.

Ale od czasu aktualizacji, za każdym razem, gdy próbuję się zalogować (urządzenie lub symulator, przeglądarka internetowa lub aplikacja Facebook), mogę pomyślnie przejść proces logowania, ale kiedy wracam do mojej aplikacji, login nie wraca dowolny błąd, ale zwraca FBSDKLoginManagerLoginResult "isCancelled".

Jako obejście próbowałem wdrożyć zaproszenia do aplikacji, które nie wymagają logowania, ale utknąłem z "Próba uwierzytelnienia w FB" w konsoli ... Nie ma tu też szczęścia.

Sądzę więc, że ma to coś wspólnego z zastępczym uwierzytelnieniem i schematem URL w pliku info.plist, ale sprawdziłem go tam dwukrotnie, a dane (które działały bez zarzutu przed aktualizacją) są takie same jak te wskazane w dokumentacji na Facebooku.

Ktoś ma jakąś wskazówkę ?? Dzięki!

co już sprawdzone:

  • nie zmieni info.plist który został już skonfigurowany do korzystania z Facebook SDK i pracował w porządku przed uaktualnieniem.
  • Konto użytkownika, którego używam do logowania, również działało poprawnie przed tą aktualizacją.
  • Nie mam żadnego currentAccessToken przed lub po procesie logowania.
+2

spróbuj tego http://stackoverflow.com/a/29365852/3141464 –

Odpowiedz

6

Dzięki i jego answer to a similar question, znalazłem błąd w moich połączeniach. Właśnie popełniłem najgłupszy błąd w Swift. W mało prawdopodobnym przypadku ktoś tak głupi, jak ja to czytam, oto 3 wywołania w Swift, które powinieneś dodać w swoim AppDelegate.swift. Są testowane i działają:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    // Do what you have to do but at the end, instead of 'return true', put : 

    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
} 

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { 
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

func applicationDidBecomeActive(application: UIApplication) { 
    FBSDKAppEvents.activateApp() 
} 
+0

Działa, dziękuję bardzo! –

+1

Otrzymuję ten problem dla iOS-8 tylko iOS-9 działa dobrze. Masz jakiś pomysł ? – Alok

+0

@iThink: Należy pamiętać, że iOS 8 używa innej funkcji w 'AppDelegate'. Jest to aplikacja "func" (_ application: UIApplication, open url: URL, sourceApplication: String ?, adnotacja: Any) -> Bool'' –

0

Kciuki za pomoc zimą. I dziękuję Dheeraj bhai. Tutaj właśnie aktualizuję odpowiedź dla Swift 3.1.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
} 

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

func applicationDidBecomeActive(application: UIApplication) { 
    FBSDKAppEvents.activateApp() 
} 

I tak nie zapomniał umieścić:

import FBSDKCoreKit 

w App Delegata.

0

Kolejny powód połączenia do FBSDKLoginManagerLoginResult, aby zawsze zwracać isCancelled: jeśli aplikacja (w wersji rozwojowej) prosi o określone uprawnienia, użytkownik nie jest wymienionym programistą tej aplikacji, a FaceBook jeszcze nie zatwierdził aplikacji dla tych aplikacji uprawnienia, zawsze zwróci isCancelled.