Absturz der Safari-Dienste [SFAuthenticationViewController dismoseViewControllerAnimated: completion:]

9

Ich habe sehr oft einen Absturz in meiner App. Es scheint ein Absturz von iOS-System nur in den neuesten iOS 11 passiert.

Dies ist der Absturz

%Vor%

Nicht sicher, was dieser Absturz ist. kann jemand mit diesem Problem helfen?

    
Pablo Martinez 29.10.2017, 16:10
quelle

2 Antworten

2

Wir hatten dasselbe Problem, nachdem wir auf das neueste Facebook SDK aktualisiert hatten (von einer recht alten Version 4.11 auf 4.27.1). Tatsächlich hatten wir einige Aufrufe von applicationDidBecomeActive event ausgelöst, die den Facebook-Login ausgelöst haben (also ein SFAuthenticationSession öffnen, was die SFAuthenticationViewController öffnet, die den Benutzer auffordert, die Authentifizierung mit Facebook oder einem anderen Drittanbieter fortzusetzen). Sobald der Nutzer auf "Weiter" geklickt hat, löste er das Ereignis applicationDidBecomeActive erneut aus. Dies verursachte eine Endlosschleife beim Starten von neuem SFAuthenticaionSessions , was zu einem Absturz führte. Wir haben uns also entschieden, Facebook von dieser Veranstaltung überhaupt nicht anzurufen. Um zusammenzufassen, wie man diesen Absturz vermeiden kann: Sie müssen sicherstellen, dass Sie den Facebook-Login (oder SFAuthenticationSession start() method) nur einmal gleichzeitig aufrufen.

    
Zoltán Homoki 07.11.2017 16:47
quelle
2

Wie @ Zoltán Homoki und @Jelly sagten, sollten wir logInWithReadPermissions nur einmal aufrufen.

Zu diesem Zweck ist eine allgemeine Implementierung (die vorher in Ordnung war), ein Flag in appDelegate like:

zu setzen %Vor%

Verwende es dann, um mehrfache Aufrufe des Facebook-Logins zu verhindern:

%Vor%

Das Problem ist, dass auf iOS11 mit FBSDKLoginKit & gt; = 4.27 application:openURL:sourceApplication:annotation: nicht aufgerufen wird (noch application:openURL:option ), so dass das Flag nicht gesetzt ist. Das erzeugt mehrere Aufrufe an die Anmeldung ( applicationDidBecomeActive wird aufgerufen, wenn der Benutzer das erste Popup schließt)

Die Lösung, die ich gefunden habe, ist, vor jedem Aufruf von FBSDKLoginManager ein Flag zu setzen und jeden anderen Anruf zu stoppen, bis der Vorgang abgeschlossen ist.

%Vor%

Dies scheint mit den Versionen 4.22 bis 4.28 von FBSDKLoginKit zu funktionieren.

    
Axel Guilmin 10.11.2017 18:43
quelle

Tags und Links