使用 URL 查询字符串动态显示 Facebook Open Graph

Dynamically show Facebook Open Graph using URL query string

本文关键字:Facebook Open Graph 动态显示 字符串 URL 查询 使用      更新时间:2023-09-26

我正在开发一个网络应用程序,用户可以在其中获得优惠券和类似的东西。我需要使用 Open Graph 使用 Javascript sdk 发布每次用户选择并请求优惠券时的操作。

当您单击优惠券时,它会将您重定向到页面coupondetail.php?cid=248(其中"Cid"是优惠券ID)。实际上,我用PHP个性化了og元标记:通过这种方式,Facebook应该为共享的每个?cid抓取不同的内容。

这实际上是我使用 PHP 个性化它们的方式:(Mycouponapp是一个示例名称!

  <head>
    <meta charset="ISO-8859-1">
    <title>Coupons</title>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US" xmlns:fb="https://www.facebook.com/2008/fbml"> 
<head prefix="og: http://ogp.me/ns# mycouponapp: 
                  http://ogp.me/ns/apps/mycouponapp#">
  <meta property="fb:app_id" content="*appid*" /> 
  <meta property="og:type" content="mycouponapp:reward"/> 
  <meta property="og:title" content="<?php echo $couponname; ?>" /> 
  <meta property="og:image" content="http://www.mycouponapp.com/<?php echo $couponimgurl; ?>" /> 
  <meta property="og:description" content="<?php echo $couponname; ?>" /> 
  <meta property="og:url" content="http://www.mycouponapp.com/coupondetail.php?cid=<?php echo $cid; // coupon id ?>">

十天前,我正在测试网站,我设置了一个静态og:title,称之为"样本奖励"。即使我更改了代码,今天当我使用 Javascript 发布操作时,它仍然显示"Matteo 在 Mycouponapp 上获得了示例奖励",而不是显示"Matteo 在 Mycouponapp 上获得了优惠券名称"。

我已经使用 Facebook 调试工具尝试再次抓取内容,但它不起作用(即使调试工具显示正确的优惠券详细信息!

此外,如果我单击"示例奖励"文本,我将被重定向到http://www.mycouponapp.com/coupondetail.php?rid=,正如您所看到的,最后没有Cid

我真的不明白为什么。我剪辑了我的JavaScript代码:也许问题出在上面!在此之前,Facebook JS SDK已经加载。

<script>
 function postCoupon()
  {
   FB.login(function(response) {
   if (response.authResponse) {
      FB.api(
        '/me/_AppName_:get?reward=http://www.mycouponapp.com/coupondetail.php?cid=<?php echo $rid; ?>',
        'post',
        function(response) {
           if (!response || response.error) {
              console.log(response.error);
           } else {
              alert('Pook was successful! Action ID: ' + response.id);
           }
        });
        }
 }, {scope: 'publish_actions'});

  }
  </script>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId      : '_App Id_', // App ID
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        xfbml      : true  // parse XFBML
      });
    };

  </script>

我的代码出了什么问题?谢谢!

此时,最好的办法可能是将您的 url 方案更改为类似 mycouponapp.com/coupondetail/248 这样每张优惠券都有一个唯一的 url。

您可以通过重写 .htaccess 文件中的 url 或更改 PHP 应用程序的 url 方案来做到这一点。