2011-11-03 11 views
17

Sto utilizzando l'ultima Facebook SDK su iOS 5. posso utilizzare SSO per autenticare l'utente, e quindi cerco di condividere un link come questo:prima finestra di dialogo dopo l'autenticazione non riesce immediatamente e chiude dialogo

NSString *appId = [[[NSBundle mainBundle] infoDictionary] 
              objectForKey:TSFacebookAppID]; 

NSMutableDictionary* params = 
[NSMutableDictionary dictionaryWithObjectsAndKeys: 
          appId,    @"app_id", 
          [url absoluteString], @"link 
          title,    @"caption", 
          body,     @"description", 
          nil]; 

[facebook dialog:@"feed" andParams:params andDelegate:self]; 

La prima volta che provo a farlo, la finestra di dialogo appare e si chiude immediatamente, chiamando la finestra di dialogo: didFailWithError: metodo delegato di errore. L'errore è:

Error Domain=NSURLErrorDomain Code=-999 "The operation couldn’t be completed. (NSURLErrorDomain error -999.)" UserInfo=0x98f2ab0 {NSErrorFailingURLKey= https://m.facebook.com/dialog/feed?link=http%3A%2F%2Fwww.thescore.com%2Fhome%2Farticles%2F184248&description=Nadal%20pulls%20out%20of%20Paris%20to%20focus%20on%20ATP%20finals&access_token=BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD&caption=Article%20from%20ScoreMobile%20for%20iPhone&app_id=124052647629735&redirect_uri=fbconnect%3A%2F%2Fsuccess&sdk=2&display=touch , NSErrorFailingURLStringKey= https://m.facebook.com/dialog/feed?link=http%3A%2F%2Fwww.thescore.com%2Fhome%2Farticles%2F184248&description=Nadal%20pulls%20out%20of%20Paris%20to%20focus%20on%20ATP%20finals&access_token=BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD&caption=Article%20from%20ScoreMobile%20for%20iPhone&app_id=124052647629735&redirect_uri=fbconnect%3A%2F%2Fsuccess&sdk=2&display=touch }

Tuttavia, i tentativi successivi di condividere il collegamento funzionano correttamente.

+1

Sì! Sto vedendo al 100% la stessa cosa. Nuova implementazione, iOS5. Molto stesso errore. I tentativi successivi funzionano bene. Al riavvio dell'app, i tentativi funzionano correttamente perché la sessione è ancora valida.Ma se cancello l'app e installo di nuovo, di nuovo il primo tentativo fallisce (apparentemente causato dal processo di autenticazione SSO in qualche modo?) –

+0

È la stessa storia con iOS 7! Tranne l'autenticazione fallisce ogni volta – tipycalFlow

risposta

1

Questo è stato risolto con l'SDK 3.0, quindi ho intenzione di chiudere questa domanda. Soluzione: aggiornare SDK a 3.0.

0

L'ho rintracciato per quanto posso pensare in dialog.m, che è la riga 414 - dialog.m sta inviando l'URLRequest per la finestra di dialogo in una vista Web, ma apparentemente la visualizzazione web sta ricevendo un errore torna dal server di Facebook.

Ho provato a chiamare il mio [dialogo di Facebook: @ "feed" ...] codice dopo un ritardo di 10 secondi dopo l'autenticazione, nessun dado - stesso errore.

Quindi, solo per i sorrisi, ho chiamato il mio codice feed da -dialog: didFailWithError ... dopo aver controllato per vedere se era errore -999. Funziona bene da quella chiamata. ????

4

In FBDialog.m, cambiare questo:

UIWindow* window = [UIApplication sharedApplication].keyWindow; 
if (!window) { 
    window = [[UIApplication sharedApplication].windows objectAtIndex:0]; 
} 

A tal:

UIWindow* window = [[UIApplication sharedApplication].windows objectAtIndex:0]; 

Problema risolto! Per me, almeno.

+0

Penso che questo sia un problema diverso. Ho visto questa risposta su un altro thread e l'ho già provato senza alcun effetto. L'errore che stiamo vedendo qui è un errore di rendering della webview che proviene dal server di Facebook (vedere l'errore nel log pubblicato dal poster originale). Hmm, sei il poster originale. Curioso. –

+0

Dopo aver lavorato venerdì, questa soluzione non funziona più. – Senior

+4

Ignoro l'errore modificando la riga 413 di FBDialog.m in: if (! (([Error.domain isEqualToString: @ "WebKitErrorDomain"] && error.code == 102) || error.code == -999)) e ora funziona. – Senior

1

Fino facebook rattoppare la loro SDK, io did'nt trovare alcuna soluzione migliore di questo:

- (void)dialog:(FBDialog *)dialog didFailWithError:(NSError *)error{ 

    if([error code] == -999){ 
     DLog(@"Error -999 found re-open webview"); 

     [facebook dialog:@"apprequests" 
       andParams:_dialogParams 
      andDelegate:self]; 

    }else{ 
     DLog(@"Error opening facebook dialog : %@", [error description]); 
    } 
} 
+0

questo approccio non sembra funzionare perché mi reindirizzare allo stesso registro nella finestra di dialogo, ancora una volta in modo che finisce in un ciclo infinito –

8

mi è stato anche occasionalmente ottenendo questo -999 NSURLDomainError quando si cerca di aprire la finestra Facebook Share. Ho preso la strategia di ignorare il codice di errore quando Senior menziona nei commenti.

Il motivo per cui non mi sento così male con questa correzione è che FBLoginDialog in realtà ignora già questo errore. Controllare il codice in github:

https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBLoginDialog.m#L85

Quindi, per essere precisi, ecco quello che la mia WebView: metodo didFailLoadWithError assomiglia nella FBDialog.m ora:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 
// 102 == WebKitErrorFrameLoadInterruptedByPolicyChange 
NSLog(@"FBDialog webView didFailLoadWithError:%@ %d",error.domain,error.code); 
if ([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999) 
    return; 

if ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102) 
    return; 

[self dismissWithError:error animated:YES]; 
} 
+0

Funziona bene :) – Bharathi

10

Solo un aggiornamento per tutti, è finalmente assegnato a qualcuno su Facebook: https://developers.facebook.com/bugs/168127053284477 - si spera che verrà risolto presto.

Nel frattempo, qualcuno ha inviato una richiesta di pull su GitHub con una correzione: https://github.com/facebook/facebook-ios-sdk/pull/436

Speranza che aiuta qualcuno, come mi è stato ancora affrontando lo stesso problema ..

+0

Questo bug non è ancora stato risolto nel più recente facebook-IO-sdk come di 10 settembre 2012. Ho dovuto passare a una versione precedente (facebook iphone sdk) per far funzionare questa cosa basilare. Perché hanno dovuto rompere le funzionalità di base? – Das

Problemi correlati