Facebook 广告 API 错误

Facebook Ad API Error

我在使用 FB 广告 PHP SDK 创建创意时遇到错误

$parent_id 作为构造函数的参数已被弃用,请尽量不要在新代码中使用它。

代码在 2.9 和 2.10 更新之前有效。

我用来创建广告素材的代码是:

    $link_data = new AdCreativeLinkData();
$link_data->setData(array(
  AdCreativeLinkDataFields::MESSAGE => 'Product Description',
  AdCreativeLinkDataFields::LINK => $url_of_website,
  AdCreativeLinkDataFields::IMAGE_HASH => $image->hash,
  AdCreativeLinkDataFields::DESCRIPTION => 'Link Description',
  AdCreativeLinkDataFields::CALL_TO_ACTION => array(
    'type' => AdCreativeCallToActionTypeValues::LEARN_MORE,
    'value' => array(
      'link_title' => 'View Similar Products Now!',
      'lead_gen_form_id' =>  $form_id,
    ),
  ),
));

$story = new AdCreativeObjectStorySpec();
$story->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => $page_id,
  AdCreativeObjectStorySpecFields::LINK_DATA => $link_data,
));

$creative = new AdCreative(null, $account_id);
$creative->setData(array(
  AdCreativeFields::NAME => $nm,
  AdCreativeFields::OBJECT_STORY_SPEC => $story,
  AdCreativeFields::URL_TAGS => 'product=' . $p_id,
));

$creative->create();

我在此声明中没有看到任何父 ID。请帮助

$parent_id 已弃用

此问题已在 Facebook github 上与 issue# 314

一起报告

来自 Facebook 开发者的回应

"We are depreciating creation with parent_id. We are seeing multiple endpoints that can create the same type of object. We do not have good ways to decide which one we should use if you are creating new object with parent_id. Moving forward, please instantiate the parent object with the parent_id and call create_XXX function to create the object you want."

示例代码:

use FacebookAds\Object\AdCreative;
use FacebookAds\Object\AdCreativeLinkData;
use FacebookAds\Object\Fields\AdCreativeLinkDataFields;
use FacebookAds\Object\AdCreativeObjectStorySpec;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeFields;

$link_data = new AdCreativeLinkData();
$link_data->setData(array(
  AdCreativeLinkDataFields::MESSAGE => 'try it out',
  AdCreativeLinkDataFields::LINK => '<URL>',
  AdCreativeLinkDataFields::IMAGE_HASH => '<IMAGE_HASH>',
));

$object_story_spec = new AdCreativeObjectStorySpec();
$object_story_spec->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  AdCreativeObjectStorySpecFields::LINK_DATA => $link_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');

$creative->setData(array(
  AdCreativeFields::NAME => 'Sample Creative',
  AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
));

$creative->create();
希望这可以帮助。

使用setParentId($parrent_id).

示例代码:

$product_catalog = new ProductCatalog();
$product_catalog->setParentId($parrent_id);
$product_catalog->setData(
            [
                ProductCatalogFields::NAME => "Testjon Autojon Catalog",
                ProductCatalogFields::VERTICAL => "vehicles",
            ]
);
$product_catalog->create();

我发现即使 here 中提到的已接受答案已被弃用,即 $parent_id 的使用,但那里共享的示例代码仍然显示了旧方法。

在那个例子中,传递给 AdCreative() 的第二个参数仍然是 $parent_id

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');

为清楚起见,下面提到的是 \FacebookAds\Object\AbstractCrudObject 的构造函数的方法签名,它是 \FacebookAds\Object\AdCreative 的扩展,您会在那里看到弃用通知。

  /**
   * @deprecated deprecate constructor with null and parent_id
   * @param string $id Optional (do not set for new objects)
   * @param string $parent_id Optional, needed for creating new objects.
   * @param Api $api The Api instance this object should use to make calls
   */
  public function __construct($id = null, $parent_id = null, Api $api = null) {
    parent::__construct();
    //...
  }

说新的做法,现在应该是这样的:)

require __DIR__ . '/vendor/autoload.php';

use FacebookAds\Api;
use FacebookAds\Logger\CurlLogger;
use FacebookAds\Object\AdAccount;

$access_token = '<ACCESS_TOKEN>';
$app_secret = '<APP_SECRET>';
$app_id = '<APP_ID>';
$id = '<AD_ACCOUNT_ID>';

$api = Api::init($app_id, $app_secret, $access_token);
$api->setLogger(new CurlLogger());

$fields = array();
$params = array(
    'name' => 'Sample Creative',
    'object_story_spec' => ['page_id' => '<pageID>',
        'video_data' => ['IMAGE_URL' => '<imageURL>',
            'video_id' => '<videoID>',
            'call_to_action' => ['type' => 'LIKE_PAGE',
                'value' => ['page' => '<pageID>']
            ]
        ]
    ],
);
$adCreative = (new AdAccount($id))->createAdCreative($fields, $params);

echo json_encode($adCreative->exportAllData(), JSON_PRETTY_PRINT);

我找到了这个例子 here。请注意,尽管本文档的标题是“创建广告视频创意”,但它实际上展示了如何创建广告创意。 Facebook 营销 API 参考资料中存在许多不一致之处,就是这种情况:)