2014-08-27 127 views
1

IM建立一个Facebook应用程序,我想通知用户图形API通知返回空数据

https://developers.facebook.com/docs/games/notifications

IM使用Facebook的PHP 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; 
    } 
} 

一些后来我使用此令牌后台进程后的用户墙,他们所有做工精细

现在我也想notificate这样的用户:

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: [ ] 
} 

打开网址,所以我不知道什么怎么回事,当我看到,所以我只找到人张贴到网站,但我想通知用户本身

感谢您的帮助

+0

是你的应用程序画布应用程序? – luschn 2014-08-27 21:17:23

+0

@luschn目前它在apache服务器上运行本地,它正在开发中,尚未发布或审查 – 2014-08-27 21:19:30

回答

1

首先,从Facebook文档:

目前,只有Facebook.com上的应用程序可以使用应用程序通知。 通知只在桌面版 Facebook.com上浮现。

另外,需要App Token,而不是用户令牌。

顺便说一句,file_get_contents是非常糟糕的,使用Facebook的CURL。可能是它不起作用的另一个原因。 http://www.devils-heaven.com/extended-page-access-tokens-curl/

附加信息:使用curl与Facebook的API的一个基本的例子,我最近写了一个关于应用程序通知的博文,它是在德国,但小部分代码可能对你很有意思:http://blog.limesoda.com/2014/08/app-notifications-facebook-apps/

+0

所以这意味着它也不会使用canvas应用程序?或者是他们“在facebook.com上”作为画布网址的主机是我的主机? – 2014-08-27 21:23:58

+0

它将与一个画布应用程序> apps.facebook.com/namespace>它是在facebook.com – luschn 2014-08-27 21:24:34

+0

好,我会尝试,非常感谢! – 2014-08-27 21:25:11