Диалоговое окно "Facebook Share" не отображает миниатюры с одной первой загрузкой
Я использую диалог общего доступа Facebook, чтобы разделить определенный URL-адрес. Общая ссылка содержит изображение, которое впоследствии должно быть частью совместного использования. Странная вещь в том, что он отлично работает на мобильных браузерах. Но браузер для рабочего стола не загружает изображение с первой попытки. Простая перезагрузка окна совместного доступа устраняет недостающее изображение. Как только это изображение появляется хотя бы один раз, он продолжает работать в других браузерах без дополнительных перезагрузок.
Итак, мой вопрос: кто-нибудь знает, почему первый вызов этого URL не показывает изображения?
Подробнее
Ссылка для открытия диалога совместного доступа
Вот результат отладки Facebook, который свободен от ошибок и показывает изображение.
вывод отладки Facebook
Обновление
Кажется, что вы работаете с Диалогом каналов без каких-либо проблем. Но это еще один способ обмена, который я бы хотел предотвратить, поскольку для него требуется идентификатор приложения.
Ответы
Ответ 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
.
Это работает для меня.