El primer cuadro de diálogo luego de la autenticación falla inmediatamente y cierra el diálogo

Estoy usando el último SDK de Facebook en iOS 5. Puedo usar SSO para autenticar con éxito al usuario, y luego bash compartir un enlace como este:

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 primera vez que bash esto, aparece el cuadro de diálogo y se cierra inmediatamente, llamando al diálogo: didFailWithError: error delegate method. El error es:

Error Domain = NSURLErrorDomain Code = -999 “La operación no se pudo completar. (NSURLErrorDomain error -999.)” UserInfo = 0x98f2ab0 {NSErrorFailingURLKey = https://m.facebook.com/dialog/feed?link=http%3A % 2F% 2Fwww.thescore.com% 2Fhome% 2Farticles% 2F184248 y Descripción = Nadal% 20pulls% 20out% 20de% 20paris% 20to% 20focus% 20on% 20ATP% 20finals y señal_acceso = BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD y caption = artículo% 20from% 20ScoreMobile% 20for% 20iPhone y APP_ID = 124052647629735 y 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% 20de% 20paris% 20to% 20focus% 20on% 20ATP% 20finals y señal_acceso = BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD y caption = artículo 20from%%% 20ScoreMobile 20for% 20iPh one & app_id = 124052647629735 & redirect_uri = fbconnect% 3A% 2F% 2Fsuccess & sdk = 2 & display = touch }

Sin embargo, los bashs posteriores de compartir el enlace funcionan bien.

Solo una actualización para todos, finalmente se le asignó a alguien en Facebook: https://developers.facebook.com/bugs/168127053284477 . Esperamos que se solucione pronto.

Mientras tanto, alguien envió una solicitud de extracción en github con una solución: https://github.com/facebook/facebook-ios-sdk/pull/436

Espero que ayude a alguien, ya que todavía estaba enfrentando el mismo error …

De vez en cuando recibía este -999 NSURLDomainError al intentar abrir la ventana de la publicación de Facebook. Tomé la estrategia de ignorar el código de error cuando Senior menciona en los comentarios.

La razón por la que no me siento tan mal con esta solución es que FBLoginDialog en realidad ya ignora este error. Mira el código en github:

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

Entonces, para ser específico, aquí está mi método webView: didFailLoadWithError en FBDialog.m ahora:

 - (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]; } 

En FBDialog.m, cambie esto:

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

A esto:

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

¡Problema resuelto! Al menos para mí.

Hasta que Facebook parcheó su SDK, no encontré ninguna solución mejor que esta:

 - (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]); } } 

Esto se ha solucionado con el SDK 3.0, así que voy a cerrar esta pregunta. Solución: actualice el SDK a 3.0.

Lo rastreé hasta donde creo que puedo en dialog.m, que es la línea 414 – dialog.m está enviando el URLRequest para el diálogo en una vista web, pero la vista web aparentemente está recibiendo un error del servidor de Facebook .

Intenté llamar a mi código [Facebook dialog: @ “feed” …] después de un retraso de 10 segundos después de la autenticación, no hay dados – el mismo error.

Entonces, para sonreír, llamé a mi código de alimentación desde -dialog: didFailWithError … después de verificar para ver si era un error -999. Funciona bien desde esa llamada. ????