我正在编写一个应用程序,我可以让我的代码向已经验证我的应用程序的用户发送通知。
只要我在浏览器中打开php页面,它就会向用户发送通知。这就像一个魅力,直到我试图让代码在没有用户启动的情况下发送通知。
我一直在使用令牌遇到麻烦,而且无法让它发挥作用。我已经尝试将访问令牌保存到我的数据库,并让代码使用这些令牌,但无济于事。然后我尝试用长期令牌交换这些令牌,一切正常,我得到60天到期日期的令牌,但是当我尝试使用它们时,它只是不起作用。
有没有人有过让应用发送通知或消息的经验?我在这里没有想法..
编辑 我将详细说明我是如何做事的,以及做什么和不做什么: 我在大多数情况下使用php sdk,比如初始化应用程序:
require_once("facebook.php");
$config = array();
$config['appId'] = 'xxxx';
$config['secret'] = 'xxxx';
$config['fileUpload'] = false; // optional
$facebook = new Facebook($config);
$user_id = $facebook->getUser();
$access_token = $facebook->getAccessToken();
然后我检查用户是否已登录,如果没有,请将他发送到登录页面等:
if($user_id) {
try {
$user_profile = $facebook->api('/me?fields=friends.fields(picture,name,gender,link),name','GET');
} catch(FacebookApiException $e) {
$login_url = $facebook->getLoginUrl();
header( $login_url ) ;
}
} else {
$login_url = $facebook->getLoginUrl();
header( $login_url ) ;
}
然后,我的应用程序绘制HTML等,工作正常。 在代码的最后,我将用户acces_token交换为长期存在的令牌:
$existingtoken = $access_token;
$token_url = "https://graph.facebook.com/oauth/access_token?" .
"client_id=" . $config['appId'] .
"&client_secret=" . $config['secret'] .
"&grant_type=fb_exchange_token" .
"&fb_exchange_token=" . $existingtoken;
$new_app_token = file_get_contents($token_url);
$new_app_token = str_replace("access_token=", "", $new_app_token);
$NewToken = str_replace("&expires=", "", $new_app_token);
$mystring = $new_app_token;
$findme = '&expires=';
$pos = strpos($mystring, $findme);
// check if the token actually is long-lived and has the expires data
if ($pos === false) {
echo "Error getting long lived token.<br>";
} else {
$expirationtime = substr($mystring, ((int)$pos+9));
}
直到现在,一切都运作良好。我甚至可以使用这段代码发送通知(我花了一天的时间才真正开始工作,很难找到关于此的信息):
$notificationdata = array(
'href'=> 'https://apps.facebook.com/MY_APP/',
'access_token'=> $app_token,
'template'=> '180 char string as information'
);
$sendnotification = $facebook->api('/' . $user_id . '/notifications', 'post', $notificationdata);
EDIT2: 实际上,我现在正在使用它:)