Подтвердить что ты не робот

Диалоговое окно "Facebook Share" не отображает миниатюры с одной первой загрузкой

Я использую диалог общего доступа Facebook, чтобы разделить определенный URL-адрес. Общая ссылка содержит изображение, которое впоследствии должно быть частью совместного использования. Странная вещь в том, что он отлично работает на мобильных браузерах. Но браузер для рабочего стола не загружает изображение с первой попытки. Простая перезагрузка окна совместного доступа устраняет недостающее изображение. Как только это изображение появляется хотя бы один раз, он продолжает работать в других браузерах без дополнительных перезагрузок.

Итак, мой вопрос: кто-нибудь знает, почему первый вызов этого URL не показывает изображения?

Подробнее

Ссылка для открытия диалога совместного доступа

Вот результат отладки Facebook, который свободен от ошибок и показывает изображение.

вывод отладки Facebook

Обновление

Кажется, что вы работаете с Диалогом каналов без каких-либо проблем. Но это еще один способ обмена, который я бы хотел предотвратить, поскольку для него требуется идентификатор приложения.

4b9b3361

Ответ 1

Наконец-то я думаю, что нашел проблему. Изображения, которые я хочу предоставить, поставляются с помощью PHP script вместо простого файла. Кажется, это связано с тем, как PHP предоставляет изображения:

Плохо:

echo readfile($image_thumb_file);

Хорошо:

$fp   = fopen($image_thumb_file, "rb");
fpassthru($fp);

После этого изменения мои изображения, наконец, появляются в отладчике Facebook.

Ответ 2

Я столкнулся с этой проблемой, и выясняется, что у Facebook есть недокументированная "функция", скорее всего, реализована для оптимизации. Он не загружает ваше изображение во время первой акции.

Описание ошибки можно найти здесь: https://developers.facebook.com/bugs/657696104321030

Короче говоря, решение является одной из двух возможностей.

  • Проще всего включить og: image: width и og: image: height как часть ваших ogtags, описывающих ширину и высоту пикселя. Как ни странно, это будет (по дизайну, по-видимому) убедить Facebook немедленно очистить сайт, включая изображение.

    < meta property = "og: image" content = " http://example.com/image.jpg"/ >

    < meta property = "og: image: width "content=" 450 "/ >

    < meta property = "og: image: height "content=" 298 "/ >

  • Второе потенциальное решение заключается в том, чтобы запускать scrape вручную через API. Я не тестировал это, но теоретически это возможно. См. fooobar.com/questions/275784/... по этой теме.

Ответ 3

Facebook отображает кешированное изображение. Он делает это при первом представлении этой доли или когда искатель Facebook находит og: тег изображения на вашей странице.

Согласно документам Facebook на https://developers.facebook.com/docs/sharing/best-practices#pre-cache-images

"Некоторые из наших социальных плагинов отображают изображение, когда кто-то взаимодействует с ними. Изображение основано на изображении og: на странице или на других изображениях на странице, если изображение og: не установлено. социальный плагин может отображать изображение в Facebook, хотя бы один раз. Для сайтов, где страницы часто меняются (например, электронная торговля), первый человек, который нажимает на эти плагины, не увидит рендеринг изображения.

Ответ 4

Я нашел другой способ заставить искателя facebook проверить страницу перед тем, как вы нажмете кнопку совместного доступа: просто включите скрытый iFrame со ссылкой на facebook.

Пример:

<iframe src="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.example.com" style="width: 0px; height: 0px; margin: 0px; padding: 0px;"></iframe>

Ответ 5

Вы также можете проверить свойства og:image:width и og:image:height.
Это работает для меня.