Hat sich Facebook sharer.php geändert, um detaillierte Parameter nicht mehr zu akzeptieren?

103

Wir haben ein Freigabe-Popup (über window.open) mit der URL like geöffnet

https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE 

und bis zu einem unbekannten Zeitpunkt im letzten Monat war alles in Ordnung.

Was jetzt passiert ist; Das Popup-Dialogfeld wird angezeigt und enthält Titel, Beschreibung, Bild und URL, die von den Abfragezeichenfolgenparametern bereitgestellt werden. Wenn der Beitrag gesendet wird, fehlen dem resultierenden Pinnwandbeitrag auf Facebook jedoch Titel, Beschreibung und Bild, obwohl er weiterhin mit dem verknüpft ist richtige URL.

Weiß jemand, ob es kürzlich Änderungen gegeben hat, die dies plötzlich hätten verhindern können?

Vorwegnahme einiger häufiger Antworten:

  • "sharer.php URL war veraltet" - die Nutzung schien fortzusetzen und es schien Konsens darüber zu bestehen, dass sie größtenteils als hartnäckig angesehen wurde - ich habe keinen konkreten Hinweis darauf gesehen, dass sie plötzlich nicht mehr funktionieren sollte - könnte etwas übersehen haben

  • "JavaScript SDK / diese OG-Meta-Tags verwenden" - in meiner speziellen Situation nicht möglich - vertraue mir einfach ... Ich kann erklären, ob du WIRKLICH willst, aber es ist wirklich nicht relevant.

  • "Feed-Dialog verwenden" - nicht geeignet, da das Posten mit Anhängen auf FB-Seiten nicht unterstützt wird

tdous
quelle
Es gibt einen Facebook-Fehler, der von einer anderen Person hier protokolliert wurde. Developers.facebook.com/bugs/563991033677853, daher würde ich jedem anderen mit dem Problem empfehlen, dies mit FB zu kennzeichnen, indem er dorthin geht und bestätigt, dass Sie auch dieses Problem haben.
tdous
UPDATE für alle, bei denen das gleiche Problem auftritt ... Andere Personen, die dies als Fehler bei Facebook gemeldet haben, waren nicht so begeistert davon, Details im Voraus bereitzustellen oder auf Informationen zu reagieren. Deshalb habe ich einen neuen Fehlerbericht erneut eingereicht und er wurde einem Entwickler zugewiesen. Ich warte nur darauf, Neuigkeiten von FB zu hören. Entwickler.facebook.com/x/bugs/357750474364812
tdous
4
Leider ist die akzeptierte Antwort richtig. Nachdem sie 3 Monate darauf gewartet hatten, dass der Fehler "behoben" wurde, änderten sie das akzeptierte Verhalten von sharer.php, sodass diese Parameter nicht mehr verwendet werden können.
Bis

Antworten:

105

Facebook unterstützt keine benutzerdefinierten Parameter mehr in sharer.php

Der Sharer akzeptiert keine benutzerdefinierten Parameter mehr und Facebook ruft die Informationen, die in der Vorschau angezeigt werden, auf dieselbe Weise ab, wie sie auf Facebook als Beitrag aus den URL-OG-Meta-Tags angezeigt werden.

Verwenden Sie dialog / feeds anstelle von sharer.php

https://www.facebook.com/dialog/feed?
  app_id=145634995501895
  &display=popup&caption=An%20example%20caption 
  &link=https%3A%2F%2Fdevelopers.facebook.com%2Fdocs%2Fdialogs%2F
  &redirect_uri=https://developers.facebook.com/tools/explorer

Offizielle Antwort vom fb Team

jsnjack
quelle
1
Schlagen Sie
32
In diesem Fall benötigen Sie jedoch eine App-ID. Was ist, wenn es nur eine Website ist?
Deutscher Capuano
3
Von Facebook: Der Feed-Dialog für das Web ist in API Version 2.0 veraltet. Im Web wird Entwicklern empfohlen, den moderneren Freigabedialog zu verwenden, der dieselben Funktionen wie diese älteren Dialoge ausführen kann, aber zusätzlich benutzerdefinierte Open Graph-Storys veröffentlichen kann, ohne dass eine Facebook-Anmeldung erforderlich ist. Entwickler.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails
Wenn möglich, würde ich vorschlagen, das Facebook SDK mit JavaScript zu verwenden. Es ist viel einfacher zu codieren und ich würde es als viel weniger wählerisch betrachten, als das obige Linkformular zu verwenden.
Werfen
12
@LiquidDrummer Der springende Punkt bei der Verwendung dieser URL-Typen ist, dass Sie das SDK nicht verwenden müssen . Es fügt Ihrer Seite einen unnötigen Leistungseinbruch hinzu, hilft FB dabei, in die Privatsphäre von Personen einzudringen, und ist nicht einfacher als ein einfaches <a>Tag oder ein open()Anruf.
Walf
98

Ab dem 18. Juli 2017 hat Facebook beschlossen, benutzerdefinierte Parameter, die von Benutzern festgelegt wurden, nicht zu berücksichtigen. Diese Auswahl blockiert viele der Möglichkeiten, die diese Antwort bietet, und unterbricht auch die auf mehreren Websites verwendeten Schaltflächen.

Die quoteund hashtagParameter funktionieren ab Dezember 2018.


Weiß jemand, ob es kürzlich Änderungen gegeben hat, die dies plötzlich hätten verhindern können?

Die Parameter haben sich geändert. Die aktuell akzeptierte Antwort lautet:

Facebook unterstützt keine benutzerdefinierten Parameter mehr in sharer.php

Das ist aber nicht ganz richtig. Nun, vielleicht unterstützen oder unterstützen sie sie nicht , aber benutzerdefinierte Parameter können verwendet werden, wenn Sie die richtigen Namen kennen. Diese beinhalten:

  • URL (natürlich) → u
  • benutzerdefiniertes Bild → picture
  • benutzerdefinierter Titel → title
  • benutzerdefiniertes Angebot → quote
  • benutzerdefinierte Beschreibung → description
  • Bildunterschrift (auch bekannt als Website-Name) → caption

Sie können diese Frage beispielsweise mit der folgenden URL teilen:

https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fstackoverflow.com%2Fq%2F20956229%2F1101509&picture=http%3A%2F%2Fwww.applezein.net%2Fwordpress%2Fwp-content%2Fuploads%2F2015%2F03%2Ffacebook-logo.jpg&title=A+nice+question+about+Facebook&quote=Does+anyone+know+if+there+have+been+recent+changes+which+could+have+suddenly+stopped+this+from+working%3F&description=Apparently%2C+the+accepted+answer+is+not+correct.

Versuch es!

Ich habe ein Tool erstellt , das es einfacher macht, URLs auf Facebook mit benutzerdefinierten Parametern zu teilen . Sie können damit Ihren sharer.phpLink generieren. Drücken Sie einfach die Taste und kopieren Sie die URL von der sich öffnenden Registerkarte.

Andrea Lazzarotto
quelle
2
Vielen Dank, das ist großartig!
Nightmare_82
1
@ TakácsZsolt Sie benötigen kein JS auf der Seite. Sie können einfach die URL serverseitig in Ihrem CMS oder benutzerdefinierten Code generieren und dem Benutzer dann eine einfache URL bereitstellen. Die offizielle Freigabeschaltfläche ist schlecht, da sie Tonnen KB JS-Code enthält und Benutzer verfolgt. Wenn Sie Ihre eigenen URLs freigeben, sollten Sie außerdem die richtigen OpenGraph-Tags bereitstellen, anstatt sich auf die Sharer-Parameter von Facebook zu verlassen. :)
Andrea Lazzarotto
1
@ Garavani, ja du hast recht. Wie in den Kommentaren des Tools erläutert, haben sie die Parameter veraltet und entfernt.
Andrea Lazzarotto
4
Ab April 2018 scheinen andere Parameter als ustillschweigend ignoriert zu werden.
Leo
1
Anders als uder einzige Parameter, den ich reflektiert sehe, istquote
Robskrob
3

Ihr Problem wird durch das Fehlen von Markern OpenGraph verursacht, da Sie sagen, dass es aus irgendeinem Grund nicht möglich ist, dass Sie implementieren.

Für Sie besteht die einzige Lösung darin, die PHP-Facebook-API zu verwenden .

  1. Zuerst müssen Sie die Anwendung in Ihrem Facebook-Konto erstellen.
  2. Beim Erstellen der Anwendung haben Sie zwei Schlüsseldaten für Ihren Code:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Laden Sie die Facebook PHP SDK von hier .

  4. Sie können mit diesem Code beginnen, um Inhalte von Ihrer Website freizugeben:

    <?php
      // Remember to copy files from the SDK's src/ directory to a
      // directory in your application on the server, such as php-sdk/
      require_once('php-sdk/facebook.php');
    
      $config = array(
        'appId' => 'YOUR_APP_ID',
        'secret' => 'YOUR_APP_SECRET',
        'allowSignedRequest' => false // optional but should be set to false for non-canvas apps
      );
    
      $facebook = new Facebook($config);
      $user_id = $facebook->getUser();
    ?>
    <html>
      <head></head>
      <body>
    
      <?php
        if($user_id) {
    
          // We have a user ID, so probably a logged in user.
          // If not, we'll get an exception, which we handle below.
          try {
            $ret_obj = $facebook->api('/me/feed', 'POST',
                                        array(
                                          'link' => 'www.example.com',
                                          'message' => 'Posting with the PHP SDK!'
                                     ));
            echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';
    
            // Give the user a logout link 
            echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';
          } catch(FacebookApiException $e) {
            // If the user is logged out, you can have a 
            // user ID even though the access token is invalid.
            // In this case, we'll get an exception, so we'll
            // just ask the user to login again here.
            $login_url = $facebook->getLoginUrl( array(
                           'scope' => 'publish_stream'
                           )); 
            echo 'Please <a href="' . $login_url . '">login.</a>';
            error_log($e->getType());
            error_log($e->getMessage());
          }   
        } else {
    
          // No user, so print a link for the user to login
          // To post to a user's wall, we need publish_stream permission
          // We'll use the current URL as the redirect_uri, so we don't
          // need to specify it here.
          $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
          echo 'Please <a href="' . $login_url . '">login.</a>';
    
        } 
    
      ?>      
    
      </body> 
    </html>

Weitere Beispiele finden Sie auf der Facebook-Entwicklerseite:

https://developers.facebook.com/docs/reference/php

Joseph Collins
quelle
3
Sie haben Recht, Joseph, und ich hoffe, die von Ihnen bereitgestellten Informationen sind für jemanden nützlich, der diese Seite findet. Aus diesem Grund habe ich dafür gestimmt. Ich habe es nur nicht als Antwort markiert, weil wir bereits wussten, dass wir auf PHP zurückgreifen müssen, wenn Facebook die vorgenommenen Änderungen nicht rückgängig macht. Die vollständige Lösung, auf die ich hoffen würde, eine Möglichkeit, die Sharer-URL zu verwenden, ist ähnlich wie früher. Möglicherweise gibt es sie jetzt oder in Zukunft nicht mehr. Aber danke für Ihre Antwort und ich vertraue darauf, dass es für jemanden in dieser Situation nützlich sein wird.
17.
2

Ich überprüfe Ihre verwendete URL:

https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE

und sehen diese Unterschiede:

  1. Die Sharer-URL ist nicht dieselbe.
  2. Die Zeichenfolgen sind in unterschiedlicher Reihenfolge. (Weiß nicht, ob dies Auswirkungen hat).

Ich benutze diese URL-Zeichenfolge:

http://www.facebook.com/sharer.php?s=100&p[url]=http://www.example.com/&p[images][0]=/images/image.jpg&p[title]=Title&p[summary]=Summary

Im Abschnitt "Titel" und "Zusammenfassung" verwende ich die PHP-Funktion urlencode();wie folgt :

<?php echo urlencode($detail->title); ?>

Und gut für mich arbeiten.

Joseph Collins
quelle
Funktioniert es immer noch auf Ihrer Seite? Wenn ich Ihre Beispiel-URL versuche, werden Titel und Zusammenfassung nicht angezeigt!
Vcarel
1
@vcarel Das funktioniert nur mit OpenGraph, das ist das Problem. Veröffentlichen Sie eine andere Methode in einer anderen Antwort.
Joseph Collins
@JosephCollins Als Antwort auf Ihre Unterschiede: 1. Die URL "hxxp: //facebook.com/sharer.php" leitet nur zu "hxxp: //facebook.com/sharer/sharer.php" weiter. Ich gehe davon aus, dass sie abwärtskompatibel ist mit einer vorherigen Freigabefunktion. 2. Die Reihenfolge der Felder macht keinen Unterschied. Ich habe Ihre Bestellung für alle Fälle ausprobiert, immer noch ein Problem. Wie ich in meiner ursprünglichen Frage sagte, funktionierte dies korrekt, und eines Tages gab es keine Änderungen an unserem Ende. Es wurde von Facebook als Fehler akzeptiert, es handelt sich also nicht nur um ein Problem mit dem URL-Format. Aber sie nehmen sich auf jeden Fall die Zeit, etwas dagegen zu unternehmen.
Tdous
-1

Wenn Sie das & in Ihrer URL in% 26 codieren, funktioniert es ordnungsgemäß. Gerade getestet und verifiziert.

Kyle Graham
quelle
Von anderen Antworten abgedeckt und auch nicht gründlich genug, um einen Mehrwert zu schaffen.
utechtzs