2015-09-24 16 views
6

Aktualizuję Xcode na 7, a Facebook na 4.6 sdk.Po aktualizacji iOS 9 i Facebook sdk 4.6 okno logowania nie jest otwarte

to Moje ostrzeżenie:

Warning: Attempt to present <FBSDKContainerViewController: 0x159337700> on <UIAlertController: 0x159262700> whose view is not in the window hierarchy! 

w moim projekcie BitCode brzmi NIE - bo gdybym włączyć go do tak mam ten błąd:

ld:'/Users/MyName/Desktop/MyProjectName/ProjectName/ProjectName/Resources/Frameworks/Fabric.framework/Fabric(Fabric.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Jest to metoda parse:

-(void)signInWithFacebookClicked 
{ 
NSArray *permissions = [NSArray arrayWithObjects:@"email",@"user_friends", nil]; 
[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error) 
{ 
    if (!user) // The user cancelled the Facebook login 
    { 
     NSLog(@"Uh oh. The user cancelled the Facebook login."); 
    } 
    else if (user.isNew) // New user (not stored on DB) - User signed up and logged in through Facebook 
    { 
     [self handleNewUser]; 
    } 
    else if (user) // the user is exist at DB 
    { 
     // the user is exist at DB 
    } 
    else if (error) 
    { 
     // showAlertOfSomethingWentWrong 
    } 
}]; 
} 

Oto FBSDKGraphRequest:

-(void)handleNewUser 
{ 

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"friends, first_name, gender, last_name, link, name, verified, picture, email"}]; 
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
{ 
    NSMutableDictionary *userData = (NSMutableDictionary *)result; 
}]; 

moim problemem jest to, że tej linii:

[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error) 

bieg nie iść do tego bloku w iPhone, w symulatorze to praca dobrze.

+0

Myślę, że ten link ** http: // stackoverflow.com/a/29637893/4516605 ** może pomóc: – iSibDev

+0

nie działa dla mnie) -: I edytować pytanie –

+1

czy kiedykolwiek znalazłeś rozwiązanie tego problemu? – joey

Odpowiedz

0

pan dodać NSAppTransportSecurity & LSApplicationQueriesSchemes klucz do Info.plist?

+0

Tak z tego linku: https://developers.facebook.com/docs/ios/ios9 –

+1

w symulatorze Facebook otwarty login, ale w iPhone nie otwiera się okno. –

2

Miałem podobny problem, gdy próbowałem wyświetlić alert logowania na górze FBSDKContainerViewController.

W tej rozmowy

- (void)logInWithReadPermissions:(NSArray *)permissions 
      fromViewController:(UIViewController *)fromViewController 
        handler:(FBSDKLoginManagerRequestTokenHandler)handler; 

Facebooku prezentuje swój własny kontroler widoku i jeśli nie określić fromViewController „najwyższy kontroler widok zostanie automatycznie określana jako najlepiej jak to możliwe.”

W twoim przypadku wygląda na to, że Facebook próbuje przedstawić alert, który został odrzucony, nawet jeśli nie jest to wywołane połączenie.

+0

Cześć! Ja też mam ten sam problem! ale w LogInWithWritePermissions ... Jak to naprawiłeś? – rickrvo

+1

@rickrvo - Nie mam już dostępu do mojego kodu, ale myślę, że albo określiłem metodę fromViewController, aby Facebook nie mógł wywnioskować nieprawidłowy widok, albo upewniłem się, że alert, który prezentowałem, nie jest już wyświetlany. – PastryPup

+1

Znalazłem obejście! Chodzi o to, że loginwithWritePermissions był wywoływany zaraz po innym loginWithReadPermissions ... A iOS nie miał czasu, aby wrócić do aplikacji przed wywołaniem loginWithWritePermissions, więc dostał inny viewController. Szybka korekta polegała na dodaniu 1 sekundy opóźnienia przed wywołaniem WritePermissions, aby system iOS mógł wrócić do aplikacji, a następnie zadzwonił drugi telefon – rickrvo

0

Znalazłem obejście tego problemu dzięki odpowiedzi @ PastryPup.

Ostrzeżenie jest wyświetlane, gdy próbuje się wyświetlić kontroler widoku logowania na Facebooku obok odrzuconego alertu. Jednak zmiana na UIAlertController rozwiązała problem.

Mam wrażenie, że działa to, ponieważ UIAlertController jest pełnowartościowym kontrolerem, a zatem istnieje w hierarchii widoku nawet po jego odrzuceniu.

Rozwiązaniem jest zasadniczo zastąpienie UIAlertView urządzeniem UIAlertController i wywołanie [PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error) w domyślnej akcji sterownika UIAlerController.

Link on how to implement a UIAlertController

0

zrobiłem jakiś podstęp aby to działało. Nie wiem, czy to najlepszy sposób na zrobienie tego. Ale właśnie zrobiłem boolean, która jest fałszywa przed wykonaniem działania (przycisk fb jest stuknięty). Więc po powrocie, ustaw boolean na true i miej warunek w ViewDidAppear, że jeśli wartość logiczna jest prawdziwa, wykonaj przejście do następnego okna, które chcesz przejść. Mam nadzieję, że to pomoże!

Powiązane problemy