O Facebook sharer.php mudou para não aceitar mais parâmetros detalhados?

103

Abrimos um pop-up de compartilhamento (via window.open) com o URL como

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

e até algum ponto desconhecido no último mês ou então tudo estava bem.

O que está acontecendo agora é; a caixa de diálogo pop-up aparece e inclui corretamente o Título, a Descrição, a Imagem e o URL fornecidos pelos parâmetros da string de consulta, mas quando a postagem é enviada, a postagem no mural resultante no Facebook não contém o Título, a Descrição e a Imagem, embora ainda tenha um link para o URL correto.

Alguém sabe se houve mudanças recentes que poderiam ter repentinamente impedido de funcionar?

Antecipando algumas respostas comuns:

  • "sharer.php URL foi descontinuado" - o uso parecia continuar e parecia que o consenso era que era amplamente considerado como permanecendo - eu não vi nenhuma indicação específica de que deveria ter parado de funcionar repentinamente - pode ter perdido algo

  • "Use JavaScript SDK / estas meta tags OG" - não é possível na minha situação específica - confie em mim ... Posso explicar se você REALMENTE quiser, mas não é realmente relevante.

  • "Usar a caixa de diálogo do feed" - não é adequado devido à falta de suporte para postagem com anexos nas páginas do FB

tdous
fonte
Há um bug do Facebook registrado por outra pessoa aqui developers.facebook.com/bugs/563991033677853 então eu sugiro que qualquer outra pessoa com o problema ajude a sinalizar isso com o FB indo lá e confirmando que você também tem esse problema.
dia
ATUALIZAÇÃO para qualquer pessoa com o mesmo problema ... Outras pessoas que relataram isso como um bug para o Facebook não eram tão entusiasmadas em fornecer detalhes antecipadamente ou responder a informações, então reenviei um novo relatório de bug e ele foi atribuído a um desenvolvedor. Só esperando ouvir novidades do FB. developers.facebook.com/x/bugs/357750474364812
tdous
4
Infelizmente, a resposta aceita está certa. Após 3 meses de espera pelo bug ser "consertado", eles mudaram o comportamento aceito do sharer.php para que esses parâmetros não possam mais ser usados.
tdous

Respostas:

105

O Facebook não suporta mais parâmetros personalizados em sharer.php

O compartilhador não aceitará mais parâmetros personalizados e o Facebook irá puxar as informações que estão sendo exibidas na visualização da mesma forma que apareceriam no Facebook como uma postagem das metatags url OG.

Use dialog / feeds em vez de 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

Resposta oficial da equipe fb

jsnjack
fonte
1
Preciso
32
mas você precisa de um ID de aplicativo neste caso. E se for apenas um site?
Alemão Capuano
3
Do Facebook: O Feed Dialog para web foi descontinuado na API versão 2.0. Na web, os desenvolvedores são encorajados a usar a caixa de diálogo de compartilhamento mais moderna, que pode executar todas as mesmas funções dessas caixas de diálogo mais antigas, mas também pode publicar histórias personalizadas do Open Graph sem exigir o login do Facebook. developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails
Se possível, sugiro usar o SDK do Facebook com JavaScript. É muito mais fácil codificar e eu consideraria muito menos exigente do que usar o formulário de link acima. Dê uma olhada em: developers.facebook.com/docs/sharing/web
LiquidDrummer
12
@LiquidDrummer todo o objetivo de usar esses tipos de URLs é para que você não precise usar o SDK . Ele adiciona um hit de desempenho desnecessário à sua página, ajuda o FB a invadir a privacidade das pessoas e não é mais simples do que uma simples <a>tag ou open()chamada.
Walf de
98

A partir de 18 de julho de 2017, o Facebook decidiu desconsiderar os parâmetros personalizados definidos pelos usuários. Esta escolha bloqueia muitas das possibilidades oferecidas por esta resposta e também quebra botões usados ​​em vários sites.

Os parâmetros quotee hashtagfuncionam a partir de dezembro de 2018.


Alguém sabe se houve mudanças recentes que poderiam ter repentinamente impedido de funcionar?

Os parâmetros mudaram. A resposta aceita atualmente afirma:

O Facebook não suporta mais parâmetros personalizados em sharer.php

Mas isso não é totalmente correto. Bem, talvez eles não os apoiem ou endossem , mas os parâmetros personalizados podem ser usados se você souber os nomes corretos. Esses incluem:

  • URL (claro) → u
  • imagem personalizada → picture
  • título personalizado → title
  • cotação personalizada → quote
  • descrição personalizada → description
  • legenda (também conhecida como nome do site) → caption

Por exemplo, você pode compartilhar essa mesma pergunta com o seguinte URL:

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.

Tente!

Eu construí uma ferramenta que torna mais fácil compartilhar URLs no Facebook com parâmetros personalizados. Você pode usá-lo para gerar seu sharer.phplink, basta pressionar o botão e copiar o URL da guia que se abre.

Andrea Lazzarotto
fonte
2
Muito obrigado, isso é ótimo!
Nightmare_82
1
@ TakácsZsolt Você não precisa de JS na página, você pode apenas gerar a URL do lado do servidor em seu CMS ou código personalizado e, em seguida, fornecer ao usuário uma URL simples. O botão oficial de compartilhamento é ruim porque inclui toneladas de KB de código JS e rastreia os usuários. Além disso, se você estiver compartilhando seus próprios URLs, é melhor servir as tags OpenGraph adequadas em vez de depender dos parâmetros de compartilhamento do Facebook. :)
Andrea Lazzarotto
1
@Garavani, sim, você está certo. Conforme discutido nos comentários da ferramenta, eles descontinuaram os parâmetros e os removeram.
Andrea Lazzarotto
4
Em abril de 2018, parece que todos os parâmetros que não usejam silenciosamente ignorados.
leo
1
Além udo único parâmetro que vejo refletido équote
robskrob de
3

Seu problema é causado pela falta de marcadores OpenGraph, como você diz não é possível que você implemente por algum motivo.

Para você, a única solução é usar a API PHP do Facebook .

  1. Primeiro você deve criar o aplicativo em sua conta do Facebook.
  2. Ao criar o aplicativo, você terá dois dados importantes para o seu código:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Baixe o SDK de PHP do Facebook aqui .

  4. Você pode começar com este código para compartilhar conteúdo de seu site:

    <?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>

Você pode encontrar mais exemplos no site do Facebook Developers:

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

Joseph Collins
fonte
3
Você está certo, Joseph, e espero que as informações que você forneceu sejam úteis para quem encontrar esta página. Por causa disso, votei. Só não o marquei como a resposta porque já sabíamos que teríamos que voltar para o PHP se o Facebook não revertesse as alterações que eles fizeram. A solução completa que eu espero, uma maneira de usar a URL do compartilhador é semelhante a como costumava funcionar, pode não existir agora ou no futuro. Mas obrigado pela sua resposta e espero que seja útil para alguém nesta situação.
tdous
2

Eu reviso o seu url em uso:

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

e veja essas diferenças:

  1. O URL do compartilhador não é o mesmo.
  2. As cordas estão em ordem diferente. (Não sei se isso afeta).

Eu uso esta string de URL:

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

Na seção "título" e "resumo", uso a função php urlencode();assim:

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

E está funcionando bem para mim.

Joseph Collins
fonte
Ainda está funcionando do seu lado? Quando tento seu URL de exemplo, não estou obtendo o título e o resumo exibidos!
vcarel
1
@vcarel Isso só funciona com OpenGraph, esse é o problema. Poste um método diferente em outra resposta.
Joseph Collins
@JosephCollins Em resposta às suas diferenças: 1. O URL "hxxp: //facebook.com/sharer.php" apenas redireciona para "hxxp: //facebook.com/sharer/sharer.php", suponho que seja compatível com versões anteriores com um recurso de compartilhamento anterior. 2. A ordem dos campos não faz diferença. Eu tentei seu pedido apenas no caso, ainda é um problema. Como eu disse na minha pergunta original, funcionou corretamente, então um dia não funcionou sem nenhuma alteração no nosso final. Foi aceito como um bug pelo Facebook, então não é apenas um problema de formato de URL. Mas eles certamente estão demorando para fazer algo a respeito.
tdous
-1

Se você codificar o & em seu URL para% 26, ele funcionará corretamente. Apenas testado e verificado.

Kyle Graham
fonte
Abrangido por outras respostas e também não o suficiente para agregar valor.
utechtzs