2016-09-28 1 views
0

Für eine Anwendung, die ich entwickle, füge ich das Facebook Login SDK hinzu. Ich habe das schon früher für andere Apps getan, aber ich habe ein unerwartetes Verhalten in diesem Bereich. Aus irgendeinem Grund kann beim ersten Start der App nach der Installation durch Drücken der (benutzerdefinierten) Facebook-Anmeldeschaltfläche der Safari-Anmeldebildschirm nicht geöffnet werden. Der Handler des Login-Ereignisses wird nie aufgerufen, so dass ich selbst keinen Fehler anzeigen kann.iOS Facebook Benutzerdefiniertes Login reagiert nicht auf Erstinstallation

Wer hat das schon mal erlebt?

Code: AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    [[FBSDKApplicationDelegate sharedInstance] application:application 
         didFinishLaunchingWithOptions:launchOptions]; 
    // Some other setup code 

    return YES; 
} 

- (BOOL) application:(UIApplication *)app 
     openURL:(NSURL *)url 
     options:(NSDictionary<NSString *,id> *)options 
{ 
    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:app 
                   openURL:url 
                sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
                  annotation:options[UIApplicationOpenURLOptionsAnnotationKey] 
       ]; 
    handled |= [GIDSignIn.sharedInstance handleURL:url 
          sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
            annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; 
    return handled; 

} 

- (BOOL)application:(UIApplication *)application 
     openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 
    annotation:(id)annotation 
{ 
    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application 
               openURL:url 
            sourceApplication:sourceApplication 
              annotation:annotation]; 
    handled |= [GIDSignIn.sharedInstance handleURL:url sourceApplication:sourceApplication annotation:annotation]; 
    return handled; 
} 

Individuelle Facebook Authenticator:

-(void)authenticate: (UIViewController *) viewController onCompletion: (void (^)(NSMutableDictionary *bundle, NSError *error))completion { 
    successBundle = [BundleUtils generateBundle:YES]; 

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login logInWithReadPermissions: permissions 
     fromViewController:viewController 
     handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     // Never Reached 
    }]; 
} 

und die relevanten info.plist Teile (wo benutzerdefinierte Variablen sind in den UserDefined Variablen für jede Build-Konfiguration erklärt in verwenden)

<plist version="1.0"> 
<dict> 
    <key>CFBundleURLTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>fb${FacebookAppId}</string> 
      </array> 
     </dict> 
    </array> 
    <key>FacebookAppID</key> 
    <string>${FacebookAppId}</string> 
    <key>FacebookDisplayName</key> 
    <string>${FacebookAppName}</string> 
    <key>LSApplicationQueriesSchemes</key> 
    <array> 
     <string>fbapi</string> 
     <string>fb-messenger-api</string> 
     <string>fbauth2</string> 
     <string>fbshareextension</string> 
    </array> 
</dict> 
</plist> 

Wer sieht was ich bin fehlt?

Antwort

0

Ich habe das Problem gefunden. Da ich den FBLoginManager innerhalb der Authentifizierungsfunktion instanziiert hatte, wurde er freigegeben, während loginWithPermissions noch verarbeitet wurde. Dies führte jedoch zu einem schwachen Hinweis darauf, dass der Anmeldemanager keinen gültigen Wert mehr hatte.

Moving FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; an den Initializer und Speichern der Anmeldung über die Sitzung behebt meine Probleme. Die Tatsache, dass dies nur beim ersten Setup der Fall war, hängt wahrscheinlich damit zusammen, dass die Ausführung länger dauert, was die Wahrscheinlichkeit erhöht, dass die Anmeldung aufgehoben wird.

Verwandte Themen