2015-09-24 13 views
6

Ich aktualisiere meine Xcode auf 7, und Facebook 4.6 sdk.Nach Update iOS 9 und Facebook SDK 4.6 das Login-Fenster nicht geöffnet

Meine Warnung:

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

in Mein Projekt ist die Bitcode NEIN - denn wenn ich es ja schalte ich diesen Fehler habe:

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) 

dies ist die Parse-Methode:

-(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 
    } 
}]; 
} 

Dies ist 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; 
}]; 

mein Problem ist, dass diese Zeile:

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

den Lauf nie in diesen Block in iPhone gehen, in Simulator diese Arbeit gut.

+0

Ich denke, dieser Link ** http: // Stackoverflow.com/a/29637893/4516605 ** kann Ihnen helfen: – iSibDev

+0

nicht für mich arbeiten) -: Ich bearbeite die Frage –

+1

hast du jemals eine Lösung dafür gefunden? – joey

Antwort

0

fügen Sie NSAppTransportSecurity & LSApplicationQueriesSchemes Schlüssel zu Ihrem info.plist?

+0

ja von diesem Link: https://developers.facebook.com/docs/ios/ios9 –

+1

im Simulator die Facebook-Anmeldung öffnen, aber im iPhone das Fenster nicht geöffnet. –

2

Ich hatte ein ähnliches Problem, wo ich versuchte, eine Anmeldewarnung oben auf FBSDKContainerViewController anzuzeigen.

In diesem Aufruf

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

Facebook präsentiert seine eigenen View-Controller und wenn Sie die fromViewController nicht angeben, „die obersten View-Controller automatisch so gut wie möglich festgelegt werden.“

In Ihrem Fall klingt es wie Facebook versucht, über eine Warnung, die entlassen wurde, zu präsentieren, auch wenn dies nicht der Anruf aufgerufen wird.

+0

Hallo! Ich habe genau das gleiche Problem auch! aber in LogInWithWritePermissions ... Wie hast du es behoben? – rickrvo

+1

@rickrvo - Ich habe keinen Zugriff mehr auf meinen Code, aber ich denke, ich habe entweder einen fromViewController angegeben, damit Facebook keine falsche Ansicht ableitet, oder ich habe sichergestellt, dass die von mir präsentierte Warnung nicht mehr angezeigt wird. – PastryPup

+1

Ich habe einen Workaround gefunden! Die Sache ist, dass loginwithPermissions direkt nach einem anderen loginWithReadPermissions aufgerufen wurde ... Und das iOS hatte keine Zeit, um zurück zur App zu gehen, bevor es loginWithWritePermissions aufruft, damit es einen anderen viewController bekommt. Eine schnelle Lösung bestand darin, eine Verzögerung von 1 Sekunde vor dem Aufruf von WritePermissions hinzuzufügen, damit das iOS wieder zur App wechseln konnte und der zweite Anruf dann problemlos funktionierte – rickrvo

0

Ich habe eine Abhilfe gefunden, dank @ PastryPup's Antwort.

Die Warnung wird angezeigt, wenn versucht wird, den Facebook-Login-View-Controller zusätzlich zu einem gekündigten Alertview anzuzeigen. Der Wechsel zu einem UIAlertController hat das Problem jedoch behoben.

Mein Eindruck ist, dass dies funktioniert, weil UIAlertController ein vollwertiger Controller ist und somit in der Ansichtshierarchie existiert, selbst nachdem er abgewiesen wurde.

Die Lösung besteht darin, das UIAlertView durch einen UIAlertController zu ersetzen und [PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error) innerhalb der Standardaktion des UIAlerControllers aufzurufen.

Link on how to implement a UIAlertController

0

habe ich einige Tricks, diese Arbeit zu machen. Ich weiß nicht, ob das der beste Weg ist. Aber ich habe gerade einen Booleschen Wert gemacht, der falsch ist, bevor die Aktivität ausgeführt wird (die fb-Taste wird angetippt). Also, nach der Rückkehr, nur den Boolean auf True setzen und eine Bedingung in der ViewDidAppear, dass, wenn der Boolean wahr ist, führen Sie den Übergang zum nächsten Fenster, das Sie gehen möchten. Ich hoffe es hilft!

Verwandte Themen