我正在编写一个应用程序,并且我能够让我的代码向已验证我的应用程序的用户发送通知。
只要我在浏览器中打开 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:实际上,我现在可以使用它了:)