2012-06-06 13 views
14

Ich versuche, ein Foto auf meiner apps Facebook-Fanpage und an die Benutzerwand auch zu posten. Es ist mir gelungen, das Foto an der Benutzerwand zu posten, aber es konnte nicht in der Wand der Fanseiten gepostet werden. (Der Benutzer ist nicht unbedingt ein Administrator oder Seiteninhaber, nur die normalen Benutzer. Da die Fanseite die Option hat, dass jeder auf sie posten kann, ist es nicht zwingend erforderlich, dass der Benutzer die Seite zuerst mag. Richtig?)Foto auf Facebook Fan-Seite über iOS-App von normalen Nicht-Admin-Benutzer veröffentlichen

Nach dem googlen eine Weile, fand ich this answer. Demnach benötige ich ein access_token der Fanseite und eine album_id dafür. Aber ich kann keine Ahnung finden, wie man sie bekommt. Bisher habe ich diesen Code ausprobiert:

if ([appDelegate.facebook isSessionValid]) 
    { 
     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
             resultImage, @"picture", 
             nil]; 

     [appDelegate.facebook requestWithGraphPath:@"me/photos" 
             andParams:params 
            andHttpMethod:@"POST" 
             andDelegate:self]; // to post on users wall, works fine 

     NSString *path = [NSString stringWithFormat:@"my/accounts /fan_page_id?fields=access_toke/photos"]; 
     [appDelegate.facebook setAccessToken: FACEBOOK_ACCESS_TOKEN]; 

     [appDelegate.facebook requestWithGraphPath:path andParams:params andHttpMethod:@"POST" andDelegate:self]; // to post on fan page wall, this doesn't work 
    } 

Kann mir jemand dabei helfen? Was fehlt mir hier? Danke im Voraus.

UPDATE

Nach this answer, ein normaler Benutzer kann kein Foto auf die Fanpages Wand von einem iOS-App veröffentlicht, kann aber auf das Foto teilen. Nun, meine Frage ist, wie kann ich das Foto auf der Nutzerwand veröffentlichen und es gleichzeitig auf der Fanseitenwand teilen? Ist es möglich? Wie gebe ich das Foto auf der Fanseitenwand frei?

UPDATE 2

This answer and the question sagt, dass die regelmäßigen Nutzer auf eine Fanseite Wand über Neuigkeiten veröffentlichen können, so dass ich geändert mein Code wie folgt aus:

if ([appDelegate.facebook isSessionValid]) { 
     NSMutableDictionary *page_params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
             @"fan_page_id", @"to", 
             @"Test", @"name", 
             @"Test", @"caption", 
             resultImage, @"picture", 
             nil]; 
     [appDelegate.facebook dialog:@"feed" 
           andParams:page_params 
           andDelegate:self]; 

} 

Aber ich erhalte immer diese lächerliche Fehlermeldung und die App stürzt ab:

-[UIImage length]: unrecognized selector sent to instance 0x24d110 
2012-06-06 19:59:03.114 app_name[2739:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x24d110' 

Was soll ich jetzt tun?

An diesem Punkt nach dem Warten so lange, die Frage kommt in meinen Sinn ist, ist das überhaupt möglich? Wenn ja, wie beende ich diese Aufgabe? Und wenn nicht, was sind die Alternativen? Bitte helfen Sie.

aktualisieren 3

fand nur, dass es ein known bug sowohl iOS sdk ist und die JavaScript-sdk für Dialoge in Fanpage Verläufen. Gilt das auch für das Hochladen von Bildern? Wenn jemand eine Lösung hat, um diesen Fehler zu vermeiden, bitte helfen Sie.

Antwort

7

Dies ist derzeit (Juni 2012) nicht möglich wegen eines Fehlers in der API: https://developers.facebook.com/bugs/206254392780441 hat die Details.

Eine Problemumgehung besteht darin, auf die /feed Verbindung der Seite zu posten und ein Bild an die Feed-Geschichte anzuhängen. Dieses Bild wird nicht so groß wie ein richtiger Foto-Upload angezeigt, sollte aber OK sein.

Dieser Bug bedeutet, dass die Buchung auf die /PAGE_ID/photos Verbindung einer Seite mit einem Benutzer access_token das Foto falsch auf die /photos Verbindung des Benutzers stattdessen hochlädt.

Die Verbindung zur /photos-Verbindung einer Seite funktioniert wie erwartet, wenn die access_token der Seite verwendet wird; Das Foto wird auf der Fotoseite der Seite auf der Zeitachse der Seite angezeigt und der Seite selbst (dh von der Seite) zugeordnet.

Wenn Ihre App speziell zum Hinzufügen von Inhalt zu einer Seite gedacht ist Side-Komponente, eine andere Problemumgehung, um die Fotos von einem Benutzer auf die Seite zu erhalten, ist es, die Benutzer ein Foto über Ihre eigene Schnittstelle liefern (dh laden Sie es vom Gerät des Benutzers auf Ihren Server), und verwenden Sie eine der Seiten-Admins ' access_tokens, um eine Page access_token zu erhalten und den Upload auf diese Weise zu machen.

+0

Vielen Dank für Ihre Antwort. Wie ich bereits sagte, wird das Bild von der Telefonkamera des Benutzers genommen und dann teilt der Benutzer es an seiner/ihrer Wand und gleichzeitig an der Wand der Fanseite. Können Sie mir in diesem Fall einen besseren Weg geben? Vielleicht ein Beispiel/Tutorial, falls Sie diese Art von Optimierung vorgenommen haben? – Shabib

+0

Sie können von der App auf ihre eigene Wand posten und gleichzeitig das Foto auf Ihren eigenen Server hochladen, dann Ihren Server verwenden das Seitenzugriffstoken, um es auf die Seite – Igy

0

Statt Dialog zu verwenden, können Sie Benutzer fragen permission zu gewähren - publish_stream
(da es einen Fehler in Dialogkomponente, seine ansonsten nicht erforderlich)

Dann können Sie auf einer Seite Wand hinterlassen (vorausgesetzt Seite erlaubt in Seiteneinstellungen).

Sie können versuchen, graph api explorer zu verwenden. Sie können die Seiten-ID und den Test ändern, indem Sie auf der Registerkarte für erweiterte Berechtigungen die obige Berechtigung erteilen.

Hinweis
Eine weitere Sache, die Sie sollten daran denken, können Sie keine Bilddaten in Bildparameter senden. Sie sollten einen Link zum Image bereitstellen.

+0

Dank für Ihre Antwort danken, habe ich den Benutzer erteilt Strom zu veröffentlichen und die Seite können anonyme Benutzer schreiben (die auch die Seite nicht gefallen hat) auf seiner Wand . Zu Ihrer Information, das Bild, das ich zu posten versuche, wurde von der Kamera aufgenommen, daher weiß ich nicht, wie ich den Link des Bildes als Bildparameter bereitstellen kann. Wenn Sie die Aufgabe erfolgreich ausgeführt haben, was ich versuche, können Sie mir ein Tutorial oder etwas zur Verfügung stellen? Ich wäre sehr dankbar. – Shabib

+0

Wenn Sie einen Server haben, können Sie ein Bild auf diesen Server hochladen und die URL erhalten, und dann diese URL verwenden, um auf der Seitenleiste zu posten. – Venu

+0

Ich habe keine, und das klingt keine gute Lösung. Dies ist eine Telefon-App, der Benutzer macht ein Bild, die App macht einige Änderungen daran und dann wird es in Facebook geteilt (in der Benutzerwand und in der Fanseitenwand). Wenn ich dafür einen Server verwalten muss, macht das keinen Sinn. Wie auch immer, danke für deine Antwort. – Shabib

0

Ich würde einfach versuchen, den Ausnahmefehler zu beheben. Es ist möglich, auf Ihrer Fanpage Newsfeed zu posten. Es ist NICHT möglich, als Fan-Seite selbst zu posten, da dies eine Authentifizierung erfordern würde (also die Zugriffs-Token-Anforderung ... Sie müssen als dieser Benutzer angemeldet sein, um als diese zu posten). @Igy adressiere das bereits oben.

Sie haben jedoch keinen Code dafür, wo Sie die Bildauswahl verwenden, um das Bild zu erhalten. Die Ausnahme, die Sie erhalten, besteht darin, dass Sie versuchen, die Länge eines UIImage-Objekts anstelle des NSData-Objekts zu überprüfen (was Facebook benötigt). Um Ihr Bild vom Picker in Daten zu konvertieren, verwenden Sie das folgende Snippet (ersetzen Sie die Variable img durch Ihre UIImage).

NSData *imgData = UIImageJPEGRepresentation(img, 0); 

// Now call to length by facebook SDK will work and the exception will not fail 
NSLog(@"Size of Image(bytes):%d",[imgData length]); 
0

Ich glaube, Sie falsches Argument verwenden für die Buchung des Fotos

sollten Sie verwenden sollten @"url" statt @"picture"

ich mit diesem bin nicht sicher, aber es könnte funktionieren.

Ich hatte das gleiche Problem in JavaScript, die gelöst wurde.

Bitte lesen Sie here für die Bezugnahme auf mein Problem

+0

hochladen Das funktioniert im Allgemeinen, aber überschreibt nicht die 'Buchung um die Foto-Verbindung zu pagen, wenn ein Benutzer den Foto-Verbindungsfehler des Benutzers tatsächlich hochlädt – Igy

Verwandte Themen