2015-11-03 16 views
5

Sto aggiornando da Parse v1.6.4 alla versione più recente e sto aggiornando anche Facebook ios sdk alla v4.7. Il problema è dopo che l'app è autorizzata, mostra una schermata bianca vuota e se faccio clic su "fatto", chiude il safari e nel registro mostra che l'utente ha annullato il login.
Stava funzionando bene prima di aggiornarlo alla nuova versione.IOS-Facebook Schermo bianco vuoto dopo che l'app è autorizzata

mia plist

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
    <key>CFBundleURLSchemes</key> 
<array> 
<string>fbxxxxxx</string> 
</array> 
</dict> 
</array> 
<key>FacebookAppID</key> 
<string><my FacebookAppID></string> 
<key>FacebookDisplayName</key> 
<string>my appname</string> 

bianco listato FB server di

<key>NSAppTransportSecurity</key> 
<dict> 
<key>NSExceptionDomains</key> 
<dict> 
<key>facebook.com</key> 
<dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
    <key>NSExceptionRequiresForwardSecrecy</key> 
    <false/> 
</dict> 
<key>fbcdn.net</key> 
<dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
    <key>NSExceptionRequiresForwardSecrecy</key> 
    <false/> 
</dict> 
<key>akamaihd.net</key> 
<dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
    <key>NSExceptionRequiresForwardSecrecy</key> 
    <false/> 
</dict> 

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fbapi</string> 
    <string>fb-messenger-api</string> 
    <string>fbauth2</string> 
    <string>fbshareextension</string> 
</array> 

AppDelegate.m

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation { 
    return [[FBSDKApplicationDelegate sharedInstance] application:application 
                 openURL:url 
               sourceApplication:sourceApplication 
                 annotation:annotation]; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    [FBSDKAppEvents activateApp]; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    return [[FBSDKApplicationDelegate sharedInstance] application:application 
            didFinishLaunchingWithOptions:launchOptions]; 
} 

viewController.m

-(IBAction)facebookLogin:(id)sender 
{ 
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 

    if ([FBSDKAccessToken currentAccessToken]) 
    { 
     //Do something 

    } 
    else 
    { 
     [login logInWithReadPermissions:@[@"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) 
     { 
      if (error) 
      { 
       NSLog(@"Error"); 
      } 
      else if (result.isCancelled) 
      { 
       NSLog(@"User cancelled login"); 
      } 
      else 
      { 
       NSLog(@"Login Success"); 

       if ([result.grantedPermissions containsObject:@"email"]) 
       { 
        NSLog(@"result is:%@",result); 

       } 
       else 
       { 
        NSLog(@"FB email permission error"); 

       } 
      } 
     }]; 
    } 
} 

Ecco un'immagine dello schermo.

enter image description here

Sto facendo funzionare questa applicazione prova nel mio dispositivo iPhone 6.
Grazie! :)

Edit 1:
Oggi, ho aggiornato il mio progetto per la nuova SDK v4.8 di Facebook e questa volta, sembra che funzioni.
Non sono sicuro, cosa stavo facendo male in quel momento, ma sta funzionando ora per i dispositivi arm64.
Ma quando abilitare il supporto per armv7s, mi sta dando questo errore ...

ld: file is universal (4 slices) but does not contain a(n) armv7s slice: 

cui punta FBSDKLoginKit.framework.
I dispositivi armv7s non sono più supportati?
Esiste comunque la possibilità di eliminare questo errore?
Grazie! :)

+0

Grazie Dharmesh! Adesso va molto meglio! Come hai fatto? Voglio dire, usando qualche sito di hosting di immagini o qualcos'altro? – Alex

+0

è necessaria la reputazione per allegare immagini. – anhtu

+0

Oh ok :) Grazie, anhtu! – Alex

risposta

3

Ho avuto lo stesso problema e si è scoperto che

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 

è deprecato in ios 9.0. Ho anche implementato il metodo

func application(application: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool 

così FB SDK stava chiamando quest'ultimo. Quindi dovevo assicurarmi di chiamare FBSDKApplicationDelegate in entrambi i metodi (una volta per iOS 8 e una volta per iOS9).

Qui è la mia realizzazione di AppDelegate:

@available(iOS 9.0, *) 
func application(application: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { 
    let handled = FBSDKApplicationDelegate.sharedInstance().application(application, 
                     openURL: url, 
                     sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, 
                     annotation: options [UIApplicationOpenURLOptionsAnnotationKey]) 
    if !handled { 
     return self.openURL(url) 
    } 
    return true 
} 

@available(iOS, introduced=8.0, deprecated=9.0) 
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 
    let handled = FBSDKApplicationDelegate.sharedInstance() 
     .application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
    if !handled { 
     return self.openURL(url) 
    } 
    return true 
} 

dove self.openURL (url) può essere utilizzato per gestire altri tipi di URL accanto a quelli di Facebook.

+0

Sei salvavita. La firma sottilmente diversa per questo metodo AppDelegate ci è costata molte ore .. – MattD

Problemi correlati