im正在构建一个facebook应用程序,我想通知用户
https://developers.facebook.com/docs/games/notifications
im使用facebookphp-sdk
我的工作:
用户验证应用程序并接受权限
我得到的accesstoken如下:
$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;
}
但当我试图通知用户时,我总是得到空数据当我在浏览器中打开所有参数的url时,facebook返回相同的
{
data: [ ]
}
所以我不知道发生了什么,当我查看so时,我只发现有人在网站上发帖,但我想通知用户自己
感谢您的帮助
首先,从Facebook文档:
目前,只有Facebook.com上的应用程序可以使用应用程序通知。通知仅出现在的桌面版本上Facebook.com.
此外,需要应用程序令牌,而不是用户令牌。
顺便说一句,file_get_contents非常糟糕,对Facebook使用CURL。这可能是它不起作用的另一个原因。将CURL与Facebook API一起使用的基本示例:http://www.devils-heaven.com/extended-page-access-tokens-curl/
附加信息:我最近写了一篇关于应用通知的博客文章,它是德语的,但小代码部分可能对你来说很有趣:http://blog.limesoda.com/2014/08/app-notifications-facebook-apps/