2010-11-22 17 views
20

Trochę zaszumiałem z pakietem SDK na Facebooku iOS, a od najnowszej wersji nie mogę wywołać metody fbDidLogin. Proces logowania działa dobrze, z Safari używanym na symulatorze i aplikacją Facebooka używaną podczas jej uruchamiania na urządzeniu. Jednak po zalogowaniu się przenosimy się z powrotem do mojej aplikacji (tak jak powinienem), ale ponieważ metoda fbDidLogin nie została wywołana, nic się nie zmieniło. Jeśli chodzi o moją aplikację, nie jestem zalogowany. Demo, która jest dołączona do pakietu SDK, działa poprawnie. Więc oczywiście robię coś nie tak, ale nie mam pojęcia, jak to sprawdzić. Potraktowałem trzy metody używane w aplikacji demo na własną rękę i o ile widzę, wszystko wygląda tak samo. Wszelkie myśli lub pomysły na temat debugowania tego? Czy ktoś miał podobne problemy?fbDidLogin nie nazywane

Dzięki!

+0

Jak kontroler ustawiony prawidłowo? Czy alokujesz init w delegacie aplikacji, konfigurujesz singleton? Nie wiem, jak poprawnie skonfigurować kontroler. Przydzielam moją klasę facebook do niestandardowej klasy o nazwie facebookprep. Ta klasa jest skonfigurowana jako delegaci na zajęcia z Facebooka. Jednak fbDidLogin nie zostaje wywołany. Jak zainicjowałeś swoją klasę na Facebooku? –

Odpowiedz

32

Napotkałem ten sam problem właśnie teraz. Rozwiązałem go dodając następujący kod do mojego delegata aplikacji:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [[controller facebook] handleOpenURL:url]; 
} 

którym kontroler jest moje wystąpienie UIViewController i facebook jest moje wystąpienie Facebook.

Musisz również zarejestrować swoją aplikację, aby obsłużyć schemat URL aplikacji fb (zrób to w swoim Info.plist).

+0

Tak, już to zrobiłem, jednak przegapiłem faktyczne ustawienie kontrolera podczas jego inicjowania. Kiedy to zrobiłem, zadziałało. – Glitch

+0

@Glitch. Jakiego rodzaju błędu początkowo popełniłeś? Nazwałem również ten kod i fbDidLogin nie jest wywoływany. Nie umieściłem tego w delegacie aplikacji, ale zamiast tego w innym kontrolerze widoku, który jest rodzicem kontrolera widoku, który inicjuje i wywołuje żądanie Facebooka – okysabeni

+1

Cholera, racja! Zamiast "return [facebook handleOpenURL: url];" "[Facebook kontrolera kontrolera]" naprawił moje problemy z logowaniem! – geforce

6

Jednym z powszechnych błędów może być niewdrożenie poniższej metody wywołania zwrotnego w głównym uczestniku aplikacji, ale w innym miejscu. Zaimplementuj tę metodę w swojej klasie na podstawie UIApplicationDelegate. Jest to punkt wejścia, który wywołuje system iOS po przełączeniu kontekstu w celu przywrócenia aplikacji na pierwszy plan.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    // obtain facebook instance ref 
    [ facebook handleOpenURL: url ]; 
    } 

Jeśli utworzono FB Identyfikator aplikacji i prawidłowo odwzorowane URL odpowiednio zdefiniowane w https://developers.facebook.com/docs/guides/mobile/#ios to powinno działać.

2

I rozwiązać problem, Jeżeli facebook jest przedmiotem pierwszego viewcontroller który jest ładowany przez ur appdelegate, a następnie można użyć viewcontroller własnością appdelegate odnieść facebook przedmiotu, np

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    [ viewController.facebook handleOpenURL: url ]; 
} 
2

moją przyczyną tego było to, że nie miałem inicjacji Facebooka w ApDelegate przy użyciu właściwego delegata. Miałem to wskazując na siebie, kiedy powinien używać kontrolera widoku, w którym użytkownik faktycznie wykonał logowanie.

Od AppDelegate:

facebook = [[Facebook alloc] initWithAppId:@"111111111111111" andDelegate:homeViewController]; 
+0

można ją wskazać na siebie, jeśli umieści się ją w kontrolerach widoku, gdzie wywołana – TommyG

1
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [ facebook handleOpenURL:url]; 
} 

powinien napisać na AppDelegate.m tak, że będzie dostępny dla całej aplikacji.

proszę, jeśli to działa

0

Niedawno spotkałem się z tym również. Mój problem polegał na tym, że ustawienia aplikacji na Facebooku zostały skonfigurowane w taki sposób, że aplikacja nie była autoryzowana. W związku z tym moja metoda fbDidNotLogin była wywoływana. Rozwiązaniem było iść do

  • Facebook Developers ->Apps ->My App ->Edit Settings ->Basic
  • Upewnij się, że w sekcji "Wybierz sposób aplikacja integruje się z Facebook" kategorię "Native iOS App" nie został włączony (zielony znacznik wyboru).
1

jak Jiri powiedział w pierwszym komentarzu należy wdrożyć te metody w tobie aplikacji delegata

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    return [[loginScreen facebook] handleOpenURL:url]; 
} 

Gdzie loginScreen jest kontroler widoku, który chcesz używać do logowania lub czyni niczego innego z Facebook, chodzi o to, że jest to miejsce inne niż delegat aplikacji.

usunąć te metody, jeśli używasz go

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

} 
Powiązane problemy