Me gusta la página de Facebook sobre la acción del button

Estoy intentando implementar una página como la funcionalidad de la aplicación, he agregado el último Facebook SDK e implementado todos los delegates y controlleres para verificar la session y el estado para el inicio de session de usuario en la aplicación. Está funcionando bien hasta aquí (esto ya se hace en el código de muestra). De todos modos, he encontrado el siguiente código del sitio de desarrolladores de Facebook, para que me guste una página, pero parece que no funciona.

 - (void) likeFacebookIndia { NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject]; action[@"object"] = @"http://www.facebook.com/FacebookIndia"; //action[@"object"] = @"FacebookIndia"; [FBRequestConnection startForPostWithGraphPath:@"me/og.likes" graphObject:action completionHandler:^ (FBRequestConnection *connection, id result, NSError *error) { // handle the result if(error) { NSLog(@"%@",error.localizedDescription); } else { NSLog(@"%@",result); } }]; } 

Una vez que inició session correctamente, solía llamar a la function anterior y termina con el siguiente error en el bloque likeFacebookIndia a likeFacebookIndia ,

La operación no se pudo completar. (com.facebook.sdk error 5.)

Aquí, mis preguntas son,

  1. No estoy seguro de si esta es la forma correcta de querer una página.

  2. Si es correcto, ¿qué me falta realmente para pasar?

  3. ¿Hay alguna otra manera?

Ya visité páginas para FacebookLikeView y FBLikeButton también muchas preguntas ya aparecidas aquí, pero ninguna parece funcionar con la última actualización de Facebook SDK . Pude gustarme una página con FacebookLikeView pero hay muchos problemas con eso,

  1. Un UIKeyBoard aparece después como una página
  2. Pasa un buen rato cargando la página de Facebook si se requiere iniciar session y
  3. Después del segundo me gusta la misma página, ¡como la vista sale en algún lado!

Actualización He probado lo mismo en Graph API Explorer, y viene con el siguiente resultado,

Graph API Explorer

{ "error": { "message": "(#100) Like actions are not yet supported against objects of this type.", "type": "OAuthException", "code": 100 } }

Actualización 2

Hice piratería en las classs FacebookLikeView y solucioné problemas anteriores que escribí, aunque debería funcionar ahora? NO, no funciona, ya que está utilizando FBConnect que ahora está desactualizado, y también, ¡tengo el Facebook SDK más reciente para otras cosas que funcionan bien! Sería bueno que alguien hiciera un nuevo proyecto con el último SDK para Facebook LikeView. [¡Ya estoy trabajando!]

Así es como lo estoy haciendo,

 //Calling this function in `viewDidLoad` - (void) addLikeView { facebookLikeView.delegate = self; facebookLikeView.href = [NSURL URLWithString:@"http://www.facebook.com/FacebookIndia"]; facebookLikeView.layout = @"button_count"; facebookLikeView.showFaces = NO; facebookLikeView.alpha = 0; [facebookLikeView load]; } #pragma mark - Facebook Delegate -(void)sessionDoneForPageShare:(FBSession *)session state:(FBSessionState)state error:(NSError *)error { if(error) { NSLog(@"error : %@",error); } else { [facebookLikeView load]; //In logged in or logged out, we've to call this } } - (void)facebookViewControllerCancelWasPressed:(id)sender { NSLog(@"Login was cancelled by user"); } - (void)facebookViewControllerDoneWasPressed:(id)sender { NSLog(@"User tapped done button on login view"); } - (void) checkFBloggedInStatus { if (!FBSession.activeSession.isOpen) { NSArray *permissions = [NSArray array]; [FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceOnlyMe allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error){ [self sessionDoneForPageShare:session state:status error:error];} ]; } } #pragma mark FacebookLikeViewDelegate methods - (void)facebookLikeViewRequiresLogin:(FacebookLikeView *)aFacebookLikeView { [self checkFBloggedInStatus]; } - (void)facebookLikeViewDidRender:(FacebookLikeView *)aFacebookLikeView { [UIView beginAnimations:@"" context:nil]; [UIView setAnimationDelay:0.5]; facebookLikeView.alpha = 1; [UIView commitAnimations]; } - (void)facebookLikeViewDidLike:(FacebookLikeView *)aFacebookLikeView { NSLog(@"liked"); } - (void)facebookLikeViewDidUnlike:(FacebookLikeView *)aFacebookLikeView { NSLog(@"unliked"); } - (void)facebookLikeView:(FacebookLikeView *)aFacebookLikeView didFailLoadWithError:(NSError *)error { NSLog(@"FacebookLikeView error: %@",error); } 

Con esto, puedo ver el button "Me gusta", capaz de iniciar session en el browser, ¡pero no pasará nada! ¡Simplemente mostrará el button Me gusta siempre!

Esto funcionaba bien con el viejo SDK FBConnect , el problema es con el último Facebook SDK , puedes encontrar el FacebookLikeView FBConnect ,

¿Qué me falta?

Gran actualización

Si estás viendo esto, significa que ahora no necesitas parchear (o hackear) cualquier cosa que soporte como (una página en Facebook o cualquier object Open Graph) en tu aplicación. Con la última versión de Facebook iOS SDK (FacebookSDK.framework) están soportando el mismo button, sin embargo (mientras escribo esta actualización) está en beta , pero tenemos algo que nos gustaría desde hace mucho time, gracias Facebook

Aquí está el enlace directo para el logging de cambios y el button como y también la documentation sí.

  • Cambio de logging (último v3.19).

  • Me gusta la documentation de botones

  • Documentación de Facebook iOS

Solución: [RECOMENDADO]

El button Me gusta se puede usar como una página de Facebook o cualquier object de Open Graph y se puede hacer reference mediante URL o ID. A continuación, se ve cómo se ve el código:

 FBLikeControl *like = [[FBLikeControl alloc] init]; like.objectID = @"http://shareitexampleapp.parseapp.com/photo1/"; [self addSubview:like]; 

introduzca la descripción de la imagen aquí

(Fuente: Documentación ).


Camino de la vieja escuela [NO RECOMENDADO]

Finalmente, puedo resolver mi problema, estoy dando pasos de solución para que sea realmente útil para alguien que está buscando este tipo de cosas,

Algunas cosas que debes saber (de mi pregunta)

  • Estoy usando FBConnect y Facebook SDK al mismo time en mi aplicación.
  • Ambos funcionan bien, FBConnect es solo para FacebookLikeView LikeView: debe replace la class FBRequest con otro nombre en FBConnect para que no entre en conflicto con el último SDK.
  • Todavía se necesita una solución fácil y rápida ya que esta no es la solución perfecta.

Así que, aquí vamos,

¿Cómo se llega a saber si esta página en particular es del agrado del usuario o no?

Debe utilizar la API gráfica con y comprobar los me gusta del usuario. Aquí hay un ejemplo.

 https://graph.facebook.com/{USER_ID}/likes/{PAGE_ID} 

Si al usuario le gusta la página en cuestión, devolverá JSON con este aspecto si al usuario le gusta la página.

 { "data": [ { "name": "SomeCafe", "category": "Restaurant/cafe", "id": "someIdWillCome", "created_time": "2013-05-07T12:32:00+0000" } ], "paging": { "next": "https://graph.facebook.com/me/likes/someIdWillCome?format=json&limit=5000&offset=5000&__after_id=someIdWillCome" } } 

Y así si el usuario no le gusta la página:

 { "data": [ ] } 

Aquí está la documentation sobre los Me gusta de los usuarios: https://developers.facebook.com/docs/reference/api/user/#likes

Implementación

1) Implemente FacebookLikeView como se indica en sus documentos.

2) Necesito implementar una request HTTP para llamar a la URL anterior para comprobar el estado actual de esa página, ya que no pude getla desde FacebookLikeView . Recuerde, debe hacer la request GET junto con access_token.

3) Comtesting la respuesta (ejemplo más cercano) y haz las cosas que necesites.

¡Eso es!

Aquí están las soluciones para FacebookLikeView problemas de FacebookLikeView que enfrenté


1) FacebookLikeView fue a alguna parte?

¡Es porque un comentario popover lo esconde! a continuación es la solución

En la class FacebookLikeView.m busca, - (void)didObserveFacebookEvent:(NSString *)fbEvent Y agrega estas líneas al final ,

 if([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0f) { //NS_AVAILABLE_IOS(5_0); [[_webView scrollView] setContentOffset: CGPointMake (0, 0)]; } 

2) FacebookLikeView muestra UIKeyboard !!

Es por el foco del textbox del comentario después de como una página, a continuación hay una solución para eso.

 - (void) keyboardWasShown:(NSNotification *)notification { //force hide UIKeyBoard [self.view endEditing:YES]; } 

Notificación agregada en viewDidLoad a la class donde implementas

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil]; 

Esto renunciará a todo el keyboard visible desde esa vista particular, en mi caso no tendría UITextField donde necesito el button Me gusta de Facebook, así que si tu caso es diferente, asegúrate con este punto.

3) El problema de la carga lenta depende de muchas cosas del server de Facebook, la connection a Internet o cualquier otra cosa, por lo que agregué un indicador de carga: ¡lleva algo de time, pero funciona como quiero!


Esto me permitirá como / a diferencia de una página de Facebook, ¡también puedo conocer el estado actual de ese usuario en particular para que pueda decidir qué hacer!

¡Por fin, gracias a todos los que han revisado este problema y me responden! ¡Apreciado! 🙂

Lamento haberte dicho malas noticias, pero no te puede gustar una página en nombre de un usuario. Puede gustarte publicaciones, comentarios y fotos en nombre de un usuario, pero no páginas (la vista similar que mencionaste está haciendo lo mismo). Si intentas hacer esto, recibirás un error.

"post": "(# 3) La aplicación no tiene la capacidad de hacer esta llamada API".

Pero la buena noticia es que puedes hacerlo usando un iFrame que se cargará en una UIWebView. Por ahora, esta es la única solución para integrar el button PAGE like en la aplicación nativa. Para get más información, puede consultar este recurso: http://www.raywenderlich.com/1626/how-to-post-to-a-users-wall-upload-photos-and-add-a-like-button- desde tu aplicación de iPhone Allí puedes encontrar una sección

Agregar un button Me gusta a tu página de fans de Facebook

Espero que esto te ayudará.