0

我正在编写一个应用程序,并且我能够让我的代码向已验证我的应用程序的用户发送通知。

只要我在浏览器中打开 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:实际上,我现在可以使用它了:)

4

0 回答 0