0
現在我正在開發一些特色網站。 使用facebook API,我得到了facebook_access_token並將其存儲在數據庫中供使用。 如果我使用同一個Facebook開發者帳戶的access_token,那麼我就可以成功獲得廣告系列數據。 但是,如果我使用不同的Facebook帳戶的access_token,那麼我無法獲得包含指標的廣告系列數據 - 喜歡,覆蓋等。 並且來自Facebook SDK的錯誤消息如下。如何從Facebook訪問令牌獲取廣告系列數據?
This Ads API call requires the user to be admin of the application. User is not admin or developer of this application. in /ezond/networks/facebook/vendor/facebook/php-ads-sdk/src/FacebookAds/Http/Exception/RequestException.php:140
如何從Facebook訪問令牌獲取廣告系列數據。
代碼片段如下。
<?php
require_once __DIR__ . '/vendor/autoload.php';
// Add to header of your file
use FacebookAds\Api;
use FacebookAds\Object\User;
use FacebookAds\Object\Campaign;
use Facebook\Facebook;
use Facebook\FacebookRequest;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
$facebookAppID = "456797558007270";
$facebookAppSecret = "c69f7f97677d5852875a23045305cc8e";
$facebook_access_token = "xxxxxxxxxxxxxxx";
$viewID = "xxxxxxxxxx";
if(isset($_GET['viewID'])) $viewID = $_GET['viewID'];
if($viewID == "") exit();
if(isset($_GET['refreshToken'])) $facebook_access_token = $_GET['refreshToken'];
if($facebook_access_token == "") exit();
$fb = new Facebook([
'app_id' => $facebookAppID,
'app_secret' => $facebookAppSecret,
'default_graph_version' => 'v2.9',
]);
// Initialize a new Session and instantiate an Api object
Api::init(
'456797558007270', // App ID
'c69f7f97677d5852875a23045305cc8e',
$facebook_access_token // Your user access token
);
$me = new User('me');
$my_ad_accounts = $me->getAdAccounts()->getObjects();
$campaign_fields = array(
'name',
'status',
'effective_status',
'objective'
);
$insight_fields = array(
'clicks',
'impressions',
'cpc',
'cpm',
'cpp',
'ctr',
'reach'
);
$insight_params = array(
'date_preset' => 'lifetime'
);
$ret = new stdClass();
foreach ($insight_fields as $insight_name) {
$ret->$insight_name = 0;
}
for ($i=0; $i < sizeof($my_ad_accounts); $i++) {
$my_ad_account = $my_ad_accounts[$i];
if($viewID == $my_ad_account->account_id){
try {
$account_campaigns = $my_ad_account->getCampaigns();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
exit;
}
$my_campaigns = $account_campaigns->getObjects();
if (sizeof($my_campaigns) >= 1){
$campaign = $my_campaigns[0];
$campaign = $campaign->getSelf($campaign_fields);
/*foreach ($campaign_fields as $field_name) {
echo $field_name . ': ' . $campaign->$field_name . '<br />';
}*/
$campaign_insights = $campaign->getInsights($insight_fields, $insight_params)->current();
if($campaign_insights){
foreach ($insight_fields as $insight_name) {
$ret->$insight_name += $campaign_insights->$insight_name;
}
} else {
// echo "NO";
}
}
}
}
foreach ($insight_fields as $insight_name) {
$ret->$insight_name = round($ret->$insight_name, 2);
}
echo json_encode($ret);
?>
開發者帳戶和的access_token帳戶ID是
"xxxxxxxxxxx"
和"xxxxxxxxxx".
而測試帳戶和的access_token帳戶ID是 "xxxxxxxxxxxx"
和
"xxxxxxxxxxxxxxx".
如果我不能得到數據與這種方法,我怎麼能通過訪問令牌獲取數據?
永遠不要公開公開這樣的訪問令牌。既然你現在已經在這裏做了,你現在需要使它們失效(除非你想讓這裏的其他讀者能夠獲取這些標記並執行範圍允許以這兩個用戶的名義進行的任何操作)。 – CBroe
然後,請仔細閱讀營銷API的文檔 - 如果您處於開發級別,則Facebook有意限制您的應用可訪問的帳戶。 – CBroe
嗨,CBroe。謝謝你的評論。如果我完成了應用程序開發,那麼我需要做什麼? –