2012-10-12 109 views
10

Al utilizar SLComposeViewController, observo un comportamiento curioso al publicar en Facebook si la imagen y la URL están presentes. En concreto, si usted tiene la imagen y el URL, la dirección URL que aparece en el cuerpo del mensaje de Facebook en la vista de la SLComposeViewController, inmediatamente después de la initialText si hago lo siguiente:Facebook SLComposeViewController La URL aparece en el cuerpo si la URL y la imagen están presentes

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

Eso es obviamente una molestia debido a que la si la URL es larga, el texto inicial es empujado fuera de la parte visible de la vista de SLComposeViewController y sólo ver la última parte de la URL:

Si repito este proceso, esta vez no agregando la imagen a la publicación, el texto de la URL convenida no aparece en absoluto en el cuerpo (a pesar de que se muestra correctamente en línea).

enter image description here

En pocas palabras, sólo si hay una imagen y y la URL sí muestra la dirección URL en el cuerpo del mensaje. Y veo este mismo patrón cuando uso FBNativeDialogs.

¿Hay alguna manera de detener ese comportamiento con SLComposeViewController, de modo que pueda tener tanto la imagen como la URL conectadas a la publicación de Facebook sin exponer al usuario a la URL larga y fea del sitio web? Claramente puedo usar cualquiera de las soluciones que no sean SLComposeViewController (por ejemplo, diseñar mi propia interfaz de usuario para componer la publicación de Facebook, usando Facebook Feed Dialog, etc.). Me pregunto si estoy pasando por alto alguna solución obvia SLComposeViewController.

Respuesta

10

Al final, me he rendido en el SLComposeViewController (así como en el FBNativeDialogs). Presentan una sensación agradable e integrada, pero dado que mis publicaciones invariablemente incluyen fotos y URL, esto realmente no funciona. Además de eso, las publicaciones no se atribuyeron correctamente como de mi aplicación.

Por lo tanto, al final, he escrito mi propia interfaz de usuario y uso el Facebook SDK 3.1 FBRequestConnection como se describe here. Creo que es un poco tonto que todos tengamos que hacer nuestra propia IU debido a las debilidades en la interfaz de usuario nativa, pero es lo que es.

-5
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]; 
+1

¿todavía no hay progreso en el formateo del código?-1 como incentivo para leer la ayuda :-) – kleopatra

+0

@Tamilarasan, no veo cómo este código resuelve el problema específico que solo se manifiesta cuando se envían tanto URL como imágenes en una sola publicación de Facebook. No estás usando Facebook ni estás enviando una imagen. Parece que estás intentando resolver iterativamente el problema de la "duración del Tweet", pero ese no es el problema aquí. Gracias por tu tiempo, sin embargo. – Rob

+1

Formatee su código, y lea la pregunta antes de COPIAR Y PEGAR. –

6

El nuevo cuadro de diálogo parece estar diseñado a su alrededor proporcionando la mayoría de los datos compartidos como etiquetas en el sitio web al que apunta el enlace proporcionado. De esta manera:

Título:

<title>TITLE</title> 

Descripción:

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

Image:

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

App ID:

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

De esta manera solo necesita proporcionar el texto inicial y una URL. Puede ver cómo la aplicación oficial de Youtube comparte en Facebook para un ejemplo.

+0

¡no funciona y Ytbe también! mira cuidadosamente la pregunta –

Cuestiones relacionadas