我正在建立一个Facebook应用程序,我想通知用户
https://developers.facebook.com/docs/games/notifications
我正在使用facebook php sdk
我做了什么:
用户授权应用并接受权限
我得到了如下的提示:
$facebook->getAccessToken()
然后我生成一个长时间的令牌,如:
public function generateLongTimeToken($token){
$long_time_token_req_body = array(
"grant_type"=>"fb_exchange_token",
"client_id"=>$this->facebookOptions["appId"],
"client_secret"=>$this->facebookOptions["secret"],
"fb_exchange_token"=>$token
);
$query = http_build_query($long_time_token_req_body);
$lttreq = file_get_contents("https://graph.facebook.com/oauth/access_token?".$query);
$lttresp = parse_str($lttreq, $output);
if ( array_key_exists("access_token", $output)){
$this->logger->info("Facebook-app: Successfuly generated long_time_token");
return $output["access_token"];
}else {
$this->logger->err("Facebook-app: generating oauth long_time_token failed \n".$lttreq);
return false;
}
}
稍后我会使用此令牌将后台进程发布到用户墙上并且它们都可以正常工作
现在我也要像这样证明用户:
public function notifyUser($message,$facebookClientId,$token){
$appsecret_proof= hash_hmac('sha256', $token, $this->facebookOptions["secret"]);
$req_body = array(
"access_token"=>$token,
"appsecret_proof"=>$appsecret_proof,
"href"=>"/index",
"template"=>$message,
"ref"=>"post"
);
$query = http_build_query($req_body);
$url = "https://graph.facebook.com/".$facebookClientId."/notifications?".$query;
$lttreq = file_get_contents($url);
return $lttreq;
}
但是当我尝试通知用户时,我总是得到空数据 当我在浏览器中打开所有参数的网址时facebook返回相同的
{
data: [ ]
}
所以我不知道最新情况如何,当我看到SO我只发现有人发布到网站但我想通知用户本身
感谢您的帮助
答案 0 :(得分:1)
首先,来自Facebook文档:
目前,只有Facebook.com上的应用才能使用应用通知。 通知仅显示在桌面版本上 Facebook.com。
此外,还需要App令牌,而不是用户令牌。
顺便说一句,file_get_contents非常糟糕,使用CURL for Facebook。可能是它不起作用的另一个原因。使用CURL与Facebook API的基本示例:http://www.devils-heaven.com/extended-page-access-tokens-curl/
其他信息:我最近写了一篇关于App Notifications的博客文章,它是德语版,但小代码部分可能对你很有用:http://blog.limesoda.com/2014/08/app-notifications-facebook-apps/