2012-09-19 16 views
10

Secondo aggiornamento Dopo aver fatto qualche altro scavo, sembra esserci un problema più grande in gioco.Facebook SDK 3.0 IOS 6 callback dopo il login non chiamato

Il motivo per cui openURL non viene attivato, è che l'applicazione sembra bloccarsi quando viene riportata in primo piano.

Se avvio la mia app, faccio clic sul pulsante Home (torno alla schermata iniziale) e ricarico la mia app (non il pieno rilancio ma solo un ripristino), l'app si apre, ma tutto è bloccato.

- (void) applicationWillEnterForeground: (UIApplication *) applicazione

viene attivato quando l'applicazione ritorna, ma dopo che non succede nulla. Usando il simulatore per IOS 6.0, non mi capita affatto di bloccarmi, ma l'app si limita a stare lì senza fare nulla. Fare clic sullo schermo non fa nulla. Se clicco sulla schermata iniziale posso tornare alla schermata principale.

Quindi la ragione per cui openIURL non viene attivato è perché l'app si blocca quando ritorna dal login di Facebook da Safari o da Facebook. Non ha nulla a che fare con l'SDK di Facebook.

Perché sta succedendo?

Aggiornamento Sembra che il problema sia correlato all'apertura di openURL. L'app si apre quando l'URL personalizzato viene eseguito dall'app Safari o Facebook. Se creo un'applicazione nuova, funziona.

Un altro problema correlatoapplication open Url method not called after user authenticates the facebook

Ho un app che usa facebook login con facebook SDK 3.0.

sotto iOS 5 il flusso funziona come previsto e lo faccio vedere l'output di è connesso:

NSArray *permissions = [[NSArray alloc] initWithObjects: @"publish_stream",@"offline_access",@"email",nil]; 

[FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES 
completionHandler:^(FBSession *session, 
        FBSessionState status, 
        NSError *error) { 
    if(session.isOpen){ 
     NSLog(@"IS LOGGED IN"); 
    }         
}]; 

[permissions release]; 

Nel mio delegato App la funzione openURL è la seguente

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [[FBSession activeSession] handleOpenURL:url]; 
} 

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

Anche in questo caso, sotto IOS 5 la funzione openURL è chiamata dopo un login riuscito tramite Facebook.

In IOS 6, quando eseguo openActiveSessionWithPermission (accesso) .. openURL non viene mai richiamato.

mi hanno fornito le informazioni necessarie nel mio file .plist secondo la documentazione facebook

FacebookAppID = (My Facebook App ID) 

e

URL types 
-> Item 0 
    -> URL Schemes 
     -> Item 0 = (My Facebook App ID) 
+0

Non sei sicuro di quello che sta succedendo con la tua applicazione. Ma nella mia app, non ho il primo metodo di delega dell'app nel mio Appdelegate.m. Solo il 2 °. Inoltre, potresti dare un'occhiata al mio progetto di esempio sul mio blog tutorial: http://xcodenoobies.blogspot.com/2012/09/how-to-upload-photo-and-update-status.html. Inoltre, vorrei aggiungere, se hai 2 app (come una Lite e Pro), utilizzando la stessa FacebookAppID per entrambe le app causerà un arresto anomalo. Ci sono alcune cose in più da fare se si desidera utilizzare lo stesso fbappid per 2 o più app (fare riferimento a Facebook devs wiki) – GeneCode

+0

ho anche lo stesso problema ma con Facebook SDK 2.0 quindi dubito che sia iOS 6 correlato –

+0

way openActiveSessionWithPermissions è diventato obsoleto in IOS 3.1 ma non credo che sia correlato a questo. Dovresti concedere il permesso per la lettura di withopenActiveSessionWithReadPermissions e openActiveSessionWithPublishPermissions per la pubblicazione –

risposta

1

Il problema era legato al modo in cui stavo utilizzando TWTweetComposeViewController nella mia app, quindi non è correlato all'SDK di facebook dopotutto.

Il problema era che stavo inizializzando il mio TWTweetComposeViewController nel mio ViewDidLoad e non lo uso fino a quando necessario. Tuttavia, se TWTweetComposeViewController non viene mostrato ma è inizializzato, bloccherà la tua applicazione quando entrerà dalla modalità background.

La correzione consiste nell'iniziare TWTweetComposeViewController solo quando si sta per mostrarlo.

0

questo è Shireesh da Facebook. Puoi per favore segnalare un bug al nostro sito web per sviluppatori in modo da poterne avere uno sguardo dettagliato. Assicurati di fornire passaggi di riproduzione dettagliati e allegare screenshot se possibile. https://developers.facebook.com/bugs

1

Questo potrebbe essere dovuto al fatto che la tua app non è in esecuzione in background, come impostato nella tua app plist? Ho avuto questo stesso problema. Sembra che, se l'app viene lasciata in esecuzione in background, tornerà e chiamerà openURL.Ma se l'app non viene eseguita in background, verrà restituita e richiamerà l'applicazione: didFinishLaunchingWithOptions e NOT chiamerà openURL. E 'possibile ottenere l'url tra le opzioni di lancio:

NSURL *url = [launchOptions objectForKey: UIApplicationLaunchOptionsURLKey]; 

ma non ho capito come chiamare questo modo che abbia lo stesso effetto di applicazione: openURL al ritorno dalla autenticazione Facebook. Spero che questo aiuti alcuni.

+0

hey Sto avendo lo stesso problema, come hai risolto? – Andres

0

ho istituito due suffissi sotto Facebook per la mia app: gratuito ea pagamento, come fbxxxxxxpaid

funzionano perfettamente bene sotto SDK 2.0, ma nel 3,2 mia app non è stato chiamato indietro e sono rimasto bloccato con una tela vuota con un pulsante Annulla.

Ho rimosso il suffisso dagli schemi URL e ha funzionato immediatamente.

ho dovuto aggiornare la mia applicazione in base a questo https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/

Problemi correlati