在页面加载时从 OneSignal 获取 player_id

Get player_id from OneSignal on page load

我正在使用 Onesigal API.

实现网络推送通知
    $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);

如果您知道他的 player_id,以上代码会向用户发送推送通知。但是假设如果某个用户访问我的网站并订阅推送通知并且 leaves.Later 他再次访问(他已经订阅)并收藏。(添加到收藏夹)当前缺货的产品。那么如何我可以得到这个用户的 player_id 我可以存储在 "subs_fav" table 中吗?

id  player_id           product_id
1   57dd3f80...a69621a  p097

当该产品可用时 pushFav() 函数将 运行 通知用户该产品现在可用并且他们可以购买,但为此我们应该知道 player_id喜欢的用户。这个产品。我想知道如何找到这个 player_id 以便我可以发送它 addToFav() ajax 调用存储在 "sub_fav" table

找到了!您所需要的只是 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        
      });
  }
});

您可以通过 Javascript 完成:只需将其添加到您的 header.php 或 footer.php。 在控制器中创建您的路径以通过数据库等方式保存它

<script>
  var OneSignal = window.OneSignal || [];
  OneSignal.push(function() {
    OneSignal.init({
      appId: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
      autoRegister: false,
      notifyButton: {
        enable: true,
      },
    });
    OneSignal.registerForPushNotifications();
  });
     OneSignal.push(function() {
      OneSignal.getUserId(function(userId) {

        var user_id = <?php echo (Sentry::getUser()->id) ?? 0; ?>;
        var token   = "{{ csrf_token() }}";

        $.post("/user/storeUserPath", {
            'user_id': user_id,
            '_token': token,
            'userId': userId,
        });

      });
    });
</script>