ios - Like Facebook page on button action -


i'm trying implement page functionality application, i've added latest facebook sdk , implemented delegates , handlers check session , status user login app. working fine here (this done in sample code). anyways, i've found following code facebook developer site, page, doesn't seem work.

- (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 result          if(error)          {              nslog(@"%@",error.localizeddescription);          }          else          {              nslog(@"%@",result);          }      }]; } 

once logged in, used call above function, , ends following error in likefacebookindia block,

the operation couldn’t completed. (com.facebook.sdk error 5.)

here, questions are,

  1. i not sure whether correct way liking page?

  2. if correct, missing pass?

  3. is there other way?

i visited pages facebooklikeview , fblikebutton many question aksed here, not single seems work latest facebook sdk update. able page facebooklikeview there's many problems that,

  1. a uikeyboard showing after page
  2. takes time in loading facebook page if login required ,
  3. after second same page, view goes out somewhere!

update tested same thing on graph api explorer, , comes following result,

graph api explorer

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

update 2

i hacked facebooklikeview classes , solved above problems written, though should work now? no it's not working, using fbconnect outdated , also, i've latest facebook sdk other stuff working nicely! it if make new project latest sdk facebooklikeview. [i'm working!]

this how i'm doing,

//calling 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 call     } }  - (void)facebookviewcontrollercancelwaspressed:(id)sender {     nslog(@"login cancelled 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); } 

with this, can see button, able login browser, nothing happen! show button every time!

this working old sdk fbconnect, problem latest facebook sdk, can find facebooklikeview here,

what i'm missing?

big update !

if you're seeing means, don't need patch (or hack) support (a page on facebook or open graph object) in application. latest release facebook ios sdk (facebooksdk.framework) they're supporting button, (while i'm writing update) in beta, we've we're wished long time, thank facebook.

here's direct link change log , button , yes documentation too.

solution: [recommended]

the button can used facebook page or open graph object , can referenced url or id. here's code looks like:

fblikecontrol *like = [[fblikecontrol alloc] init]; like.objectid = @"http://shareitexampleapp.parseapp.com/photo1/"; [self addsubview:like]; 

enter image description here

(source : documentation).


old school way [not recommended]

finally, i'm able solve problem, i'm putting solution steps helpful who's looking kind of stuff,

some things may need know (from question)

  • i'm using fbconnect , facebook sdk @ same time in app.
  • both working fine, fbconnect facebooklikeview -- need replace fbrequest class other name fbconnect not conflict latest sdk.
  • still need easy , quick solution this not perfect solution.

so here go,

how know whether particular page liked user or not ?

you need use graph api , check user's likes. here example.

https://graph.facebook.com/{user_id}/likes/{page_id} 

if user likes page in question, return json looking if user likes page.

{   "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"   } } 

and if user doesn't page:

{   "data": [   ] } 

here's documentation on user likes: https://developers.facebook.com/docs/reference/api/user/#likes

implementation

1) implement facebooklikeview given on docs.

2) need implement 1 http request call above url check current status page couldn't facebooklikeview. remember, need request along access_token.

3) check response (close above example) , things need!

that's it!

here's solutions facebooklikeview issues faced


1) facebooklikeview went away somewhere?

its because comment popover hides it! below solution

in facebooklikeview.m class for, - (void)didobservefacebookevent:(nsstring *)fbevent , add these lines in end,

if([[[uidevice currentdevice] systemversion] floatvalue] >= 5.0f) {     //ns_available_ios(5_0);     [[_webview scrollview] setcontentoffset: cgpointmake (0, 0)]; } 

2) facebooklikeview shows uikeyboard!!

it's because of comment text box focus after page, below solution that.

- (void) keyboardwasshown:(nsnotification *)notification {     //force hide uikeyboard     [self.view endediting:yes]; } 

added notification viewdidload class implementing

[[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(keyboardwasshown:) name:uikeyboardwillshownotification object:nil]; 

this resign keyboard visible particular view, in case i'd no uitextfield need facebook button, if case difference make sure point.

3) slow loading issue depends on many things facebook server, internet connection or else, added loading indicator -- it takes time working want!.


this allow me / unlike facebook page able know current status of particular user can decide do!

at last, checked issue , respond me! appreciated! :)


Popular posts from this blog

How to calculate SNR of signals in MATLAB? -

c# - Attempting to upload to FTP: System.Net.WebException: System error -

ios - UISlider customization: how to properly add shadow to custom knob image -