Publicar fotos en la página de fans de Facebook con iOS SDK

Estoy intentando upload una foto a una página de Facebook que poseo usando iOS SDK y API gráfica. He podido upload fotos a mi propia panetworking. También pude enviar un post a mi muro de la página de fans como administrador y crear un álbum en mi página de fans, así que creo que estoy haciendo las llamadas correctas, pero sin éxito.

Esto es lo que estoy haciendo actualmente.

Estoy iniciando session usando

Facebook *fb = [[Facebook alloc] init]; self.facebook = fb; [fb release]; NSArray *permissions = [[NSArray arrayWithObjects:@"read_stream", @"offline_access", @"publish_stream", @"manage_pages", @"user_photos", @"friends_photos",nil] retain]; [facebook authorize:FB_APP_ID permissions:permissions delegate:self]; [permissions release]; 

Después de iniciar session, solicito las counts

 [facebook requestWithGraphPath:@"/me/accounts" andDelegate:self]; 

Las counts me son devueltas con tokens de acceso para cada página y aplicación que tengo. Utilizo un ciclo simple para analizar las counts y extra el access_token proporcionado para la página a la que deseo upload una foto.

Luego establezco mi token de acceso de mi object de Facebook al nuevo access_token.

 facebook.accessToken = new_accessToken; 

y testing y sube una foto a mi página de fans usando

 UIImage *uploadImage = [UIImage imageNamed:@"t200.jpg"]; NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: uploadImage, @"source", @"test caption", @"message", nil]; [facebook requestWithGraphPath:@"/me/photos" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

La respuesta que recibo es

 {"error": {"type": "OAuthException", "message": "(# 1) Ocurrió un error desconocido"}}

¿Esto es un error en la API de Facebook gráfico? También intenté hacer esta llamada utilizando requestes HTTPS estándar y obtuve el mismo resultado.

Si inicia session correctamente en Facebook, puede get la list FanPage solicitando @ "/ me / accounts" e iterar a la página de fans que desee y solicitar su accessToken haciendo una request a @"/FBFanPageID?fields=access_token"

Este accessToken es diferente de tu facebook.accesstoken.

Después de get fanPage accessToken, establézcalo como facebook accessToken por

[_facebook setAccessToken:_accessTokenForFanPage]; // esto es un paso necesario

Ahora puedes upload a la panetworking de fanPage por @"/FBFanPageID/photos"

Solicite álbumes de fanPage por @"/FBFanPageID/albums"

Cargue a un álbum en particular por @"/AlbumsID/photos"

Para la carga de estas imágenes se utilizará el dictionary param.

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: IMAGE,@"source", IMAGECAPTION,@"message",
nil];

Noticias antiguas pero … no estoy seguro sobre la parte de la página de fans, pero debes agregar "? Access_token = …" después de "/ me / photos" o lo que termines usando para la API gráfica para superar el error desconocido. El sdk de Facebook no agrega automáticamente el token de acceso, por lo que debe hacerlo usted mismo.

[facebook requestWithGraphPath: [NSString stringWithFormat: @ "/ me / photos? access_token =% @", facebook.accessToken] andParams: params yHttpMethod: @ "POST" yDelegate: self];

Tengo códigos muy similares y funciona, lo único que es un poco diferente es que creo la instancia de Facebook en el AppDelegate.

QRSMAppDelegate * delegate = (QRSMAppDelegate *) [[UIApplication shanetworkingApplication] delegate];

 if (![[delegate facebook] isSessionValid]) { [[delegate facebook] authorize:permissions]; 

Al igual que tú, inicialmente creé la instancia de Facebook en el controller de vista y salí con muchos errores extraños. El problema (más tarde descubrí) es … Facebook responde pasando una URL a la instancia de la class de Facebook y desde afuera el único punto de input a su aplicación es el delegado de la aplicación. (¡Mira la aplicación de ejemplo de sdk de Facebook, Hackbook)!

– (BOOL) aplicación: (UIApplication *) aplicación openURL: (NSURL *) url sourceApplication: (NSString *) fuenteApplication annotation: (id) annotation {

 BOOL ret = [facebook handleOpenURL:url]; 

…. retorno (ret); }

El problema aquí, por supuesto, es qué si solo uso Facebook en una pequeña parte de mi aplicación y millas lejos del delegado de la aplicación (la instanciación de Facebook requiere que declares al delegado!

En lugar de enfrentar problemas igualmente complejos al pasar la URL hacia arriba, en realidad fue más fácil asignar simplemente el controller de vista (delegado de Facebook) en el delegado de la aplicación y pasarla por la jerarquía de la vista.

No estoy seguro de esto, ya que soy bastante nuevo en la integración de FB iOS, pero creo que no deberías usarme / fotos, sino las xyz / fotos donde xyz es el ID de la página a la que quieres publicar.

Puede enviar un correo electrónico a su página de fans y get la foto adjunta para que aparezca como si el administrador la publicara.

En la página de tu fan, elige editar la página y luego elige mobile. En la página mobile Facebook le mostrará una dirección de correo electrónico que puede usar para publicar en su página de fans.

En iOS, uso el http://code.google.com/p/skpsmtpmessage/ para enviar el correo electrónico

Debes usar esto …

svn checkout http://skpsmtpmessage.googlecode.com/svn/trunk/ skpsmtpmessage-read-only

para download el codigo

No incluya ningún text en el correo electrónico además de algo en la línea de asunto. De lo contrario, no se publicará.