La URL de Facebook SLComposeViewController aparece en el cuerpo si la URL y la image están presentes.

Usando SLComposeViewController , SLComposeViewController comportamiento curioso cuando publiqué en Facebook si tanto la image como la URL están presentes. Específicamente, si tiene la image y la URL, la URL aparece en el cuerpo de la publicación de Facebook en la vista de SLComposeViewController , inmediatamente después del text initialText si hago lo siguiente:

 SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; NSString *text = @"This is a test Facebook post with SLComposeViewController."; NSURL *url = [NSURL URLWithString:@"http://http://stackoverflow.com/questions/12503287/tutorial-for-slcomposeviewcontroller-sharing"]; UIImage *image = ...; [controller setInitialText:text]; [controller addURL:url]; [controller addImage:image]; [self presentViewController:controller animated:YES completion:nil]; 

Obviamente, esto es una molestia porque si la URL es larga, el text inicial se SLComposeViewController de la parte visible de la vista de SLComposeViewController y solo veo la última parte de la URL:

introduzca la descripción de la imagen aquí

Si repito este process, esta vez no agregando la image a la publicación, el text de la URL no aparece en el cuerpo de manera conveniente (aunque se muestre correctamente en línea).

introduzca la descripción de la imagen aquí

En pocas palabras, solo si hay una image y la URL aparece la URL en el cuerpo de la publicación. Y veo este mismo patrón cuando uso FBNativeDialogs .

¿Hay alguna manera de detener ese comportamiento con SLComposeViewController , de modo que pueda tener la image y la URL conectadas a la publicación de Facebook sin exponer al usuario a la URL larga y fea del website? Claramente puedo usar cualquiera de las soluciones que no son SLComposeViewController (por ejemplo, diseñar mi propia interfaz de usuario para networkingactar la publicación de Facebook, usar el cuadro de dialog de alimentación en desuso de Facebook, etc.). Solo me pregunto si estoy pasando por alto alguna solución obvia de SLComposeViewController .

Al final, he renunciado al SLComposeViewController (así como a los FBNativeDialogs ). Presentan una sensación agradable e integrada, pero dado que mis publicaciones incluyen invariablemente la foto y la URL, esto realmente no funciona. Además de eso, las publicaciones no se atribuyeron correctamente al ser de mi aplicación.

Entonces, al final, he escrito mi propia interfaz de usuario y uso el Facebook SDK 3.1 FBRequestConnection como se describe aquí . Creo que es un poco tonto que todos tengamos que crear nuestra propia interfaz de usuario porque las debilidades en la interfaz de usuario nativa, pero es lo que es.

El nuevo cuadro de dialog parece estar diseñado a su alnetworkingedor proporcionando la mayoría de los datos compartidos como tags en el website al que apunta el enlace. Me gusta esto:

Título:

 <title>TITLE</title> 

Descripción:

 <meta name="description" content="DESCRIPTION"> 

Imagen:

 <meta property="og:image" content="IMAGE_URL"> 

ID de la aplicación:

 <meta property="fb:app_id" content="APP_ID"> 

De esta forma, solo necesita proporcionar el text inicial y una URL. Puedes ver cómo la aplicación oficial de YouTube es compartir en Facebook por ejemplo.

 TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init]; NSString *format = @"“%@” %@ /via @DesignSceneApp"; NSString *message = [NSString stringWithFormat:format, title, url] NSUInteger idx = title.length; while (![twitter setInitialText:message]) { idx -= 5; if (idx > 5) { message = [NSString stringWithFormat:format, [NSString stringWithFormat:@"%@…", [title substringToIndex:idx]], url ]; } else { // Give up on the title. message = [NSString stringWithFormat:@"%@ /via @DesignSceneApp", url]; [twitter setInitialText:message]; break; } } [self presentViewController:twitter animated:YES completion:nil];