7

Ich versuche, über das Facebook Open-Graph-API mit dem Facebook iOS SDK 3.0 zu implementieren. Alles scheint zu funktionieren, außer dem FbGraphObject, und das liegt daran, dass ich keine Ahnung habe, wie es aussehen soll, weil das eindeutig nicht funktioniert.Facebook iOS SDK 3.0, implementieren wie Aktion auf einer URL?

Was ich versuche zu tun ist, eine URL als ein Objekt veröffentlicht zu mögen. Ein einfaches Like mit dem Open-Graphen.

Die Fehlermeldung erhalte ich die den Code unten ist:

The action you're trying to publish is invalid because it does not specify any 
reference objects. At least one of the following properties must be specified: object. 

Der Code I verwenden diese:

FBGraphObject *objectToLike = [[FBGraphObject alloc]initWithContentsOfURL:[NSURL URLWithString:facebookLike.titleLabel.text]]; 

    FBRequest *requestLike = [[FBRequest alloc]initForPostWithSession:[FBSession activeSession] graphPath:@"me/og.likes" graphObject:objectToLike]; 

    FBRequestConnection *connection = [[FBRequestConnection alloc] init]; 
    [connection addRequest:requestLike 
     completionHandler: 
    ^(FBRequestConnection *connection, id result, NSError *error) { 
     if (!error && 
      result) { 

      DLog(@"NothingWentWrong"); 
     } 

     DLog(@"MajorError: %@", error); 

    } 
    ]; 

    [connection start]; 

UPDATE:

Karo einige weitere Informationen und Ich schätze es, diese Methode zu verwenden: https://developers.facebook.com/docs/sdk-reference/iossdk/3.0/class/FBGraphObject/#//api/name/graphObject

Um irgendwie ein Objekt zu erstellen. Es ist die graphObject Methode, mit der ich wahrscheinlich etwas anfangen muss. Jede Hilfe würde geschätzt werden.

Antwort

6

Ich habe tatsächlich geschafft, eine einfache und ziemlich schmutzige Lösung von diesem zu schaffen. Die Lösung scheint nicht optimal, aber es ist derzeit eine funktionierende Lösung.

Wenn jemand das Explorer-Tool auf Facebook auf diese URL verwendet hat: https://developers.facebook.com/tools/explorer/

Sie wissen, wie die URL aussehen wird, wenn facebook wie teilt. Es muss die URL und ein Access-Token haben. Meine Lösung bestand also darin, nichts vom Facebook SDK zu senden und nur eine Post-Anfrage an dieselbe URL zu senden, die ich im Explorer-Tool verwendet habe.

Es scheint eine gewisse Referenzierung auf der Facebooks docs zu sein, wenn man genau und tief schauen, aber niemand wird genau erklärt, wie man tatsächlich die Verbindung herzustellen, so ist dies meine Lösung:

NSString *urlToLikeFor = facebookLike.titleLabel.text; 

NSString *theWholeUrl = [NSString stringWithFormat:@"https://graph.facebook.com/me/og.likes?object=%@&access_token=%@", urlToLikeFor, FBSession.activeSession.accessToken]; 
NSLog(@"TheWholeUrl: %@", theWholeUrl); 

NSURL *facebookUrl = [NSURL URLWithString:theWholeUrl]; 

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:facebookUrl]; 
[req setHTTPMethod:@"POST"]; 

NSURLResponse *response; 
NSError *err; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&err]; 
NSString *content = [NSString stringWithUTF8String:[responseData bytes]]; 

NSLog(@"responseData: %@", content); 

Wenn Sie Schau dir den Code an Ich nehme einfach die URL und stelle zwei dynamische Strings in die URL, eine mit der Objekt-URL und eine mit dem Access-Token. Ich erstelle einen URLRequest und mache ihn zu einer POST-Anfrage, und die Antwort von Facebook wird geloggt, so dass man sehen kann, ob das Like durchgeht oder nicht.

Es kann einige Leistungsverbesserungen geben, die mit den tatsächlichen Anfragen gemacht werden können, aber ich werde es Ihnen überlassen, wenn Sie irgendwelche Verlangsamungen sehen.

Ich bin immer noch an anderen Lösungen interessiert, aber das ist die, die ich für jetzt verwenden werde.

+0

Können Sie mir bitte sagen, was ist "urlToLikeFor", ist es nur 'ID' oder komplette URL von jeder Seite –

+0

Komplette URL der Webseite zu mögen, muss diese Web-Seite die Meta-Tags, die Facebook bietet, implementieren . –

+0

Danke für die Antwort ... du meinst so http://stackoverflow.com/questions/9038025/facebook-object-debugger-property-ogurl-could-not-be-parsed-as-type-url –

0

Ich bin mir nicht sicher, was initWithContentsOfURL tut, aber von dem Namen ich denke, es versucht tatsächlich Inhalte von einer bestimmten URL (?) Zu laden.

Sie müssen die URL nur als Textparameter angeben - eine URL ist, was ein Open Graph-Objekt darstellt. Facebook erledigt den Rest, schabt die Seite hinter dieser URL und liest die OG-Meta-Tags usw.

+0

von URL als Textparameter meinst du eine Zeichenfolge? und kannst du mir ein paar Hinweise geben, wie es geht? –

+0

Ja, und nein (da ich keine iPhone-Dev-Sachen mache). – CBroe

+0

Das einzige Problem ist, dass die Instanz von FBGraphObject keine Zeichenfolge in irgendeiner Weise akzeptiert. Das Problem hier ist, dass das FBGraphObject irgendwie falsch ist und ich meine Zeichenfolge nicht zu einem Objekt machen kann. Ich bin mir ziemlich sicher, dass ich das FBGraphObject falsch implementiert habe. –

0

Vielleicht nur das?

FBRequest *requestLike = [[FBRequest alloc]initForPostWithSession:[FBSession activeSession] 
    graphPath:@"me/og.likes" 
    graphObject:[NSURL URLWithString:facebookLike.titleLabel.text]]; 
+1

habe es versucht, ich muss irgendwie das Protokoll FBOpenGraphAction implementieren, aber ich bin mir immer noch nicht ganz sicher wie. http://developers.facebook.com/docs/sdk-reference/iossdk/3.0/protocol/FBOpenGraphAction/ –

+0

Was ich sage ist, es hat nicht funktioniert. –