在页面加载时从OneSignal获取player_id

Vin*_*ney 4 javascript push-notification onesignal

我正在使用Onesigal API 实现Web推送通知.

    $fields = array(
        'app_id' => "07aae1f0-xxxx-xxxx-aa7a-21c79c5b6733",
        'include_player_ids'=>['57dd3f80-xxxx-xxxx-adb0-294bfa69621a'],
        'contents' => array( "en"=> "message" )
    );

    $fields = json_encode($fields);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8',
                                               'Authorization: Basic YTdmYTYxYzYtN...tNjVlNzJkNDFlZmMz'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem' );
    $response = curl_exec($ch);
    curl_close($ch);
Run Code Online (Sandbox Code Playgroud)

如果你知道他的话,上面的代码会向用户发送推送通知player_id.但是假设某些用户访问我的网站并订阅推送通知并离开.后来他再次访问(他已经订阅)并且喜欢.(添加到收藏夹)当前缺货的产品.那么如何才能获得player_id我可以存储在"subs_fav"表中的这个用户呢?

id  player_id           product_id
1   57dd3f80...a69621a  p097
Run Code Online (Sandbox Code Playgroud)

当该产品变得可用时,pushFav()将运行功能,该功能将通知用户该产品现在可用并且他们可以购买但是为此我们应该知道偏好的用户的player_id.这个产品.我想知道如何找到这个player_id,以便我可以将addToFav()ajax调用发送到"sub_fav"表中的store

Vin*_*ney 7

找到了!所有你需要的都是OneSignal.getUserId()在一个回调中传递的,它player_id在查询时给予用户.在调用之前确保用户已实际订阅.

OneSignal.isPushNotificationsEnabled(function(isEnabled) {
  if (isEnabled) {
      // user has subscribed
      OneSignal.getUserId( function(userId) {
          console.log('player_id of the subscribed user is : ' + userId);
          // Make a POST call to your server with the user ID        
      });
  }
});
Run Code Online (Sandbox Code Playgroud)