如何使用php获取设备ID(玩家ID)进行信号浏览器推送通知?

时间:2016-09-10 05:01:49

标签: php curl onesignal

我想为订阅我网站通知的用户添加自定义标签。但要这样做,我需要他们的播放器,我无法获取该特定用户的播放器。

<?php
$fields = array( 
'app_id' => 'app_id', 
'tags' => array('user_id' => ''.$user_id.'','user_email' => ''.$user_email.'','tag3' => ''.$tag3.'','tag4' => ''.$tag4.'',)
); 
$fields = json_encode($fields); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://onesignal.com/api/v1/players/'.$playerID); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
$response = curl_exec($ch); 
curl_close($ch); 

$resultData = json_decode($response, true);
?>

3 个答案:

答案 0 :(得分:1)

您需要从OneSignal javascript调用getUserId以从浏览器中获取播放器ID。

OneSignal.push(function() {
  OneSignal.getUserId(function(userId) {
    console.log("OneSignal User ID:", userId);
    // (Output) OneSignal User ID: 270a35cd-4dda-4b3f-b04e-41d7463a2316    
  });
});

答案 1 :(得分:0)

我正在做的是在getUserId回调函数中创建一个ajax调用,该回调函数将userID作为参数发送。

然后我将其存储在php用户会话中,并在需要时使用它。

但是我不确定这里是否有任何缺点。

答案 2 :(得分:0)

我已将玩家ID保存在数据库和本地存储中 由于此脚本在每次页面加载时都运行,因此我检查localstorage是否具有播放器ID,然后不发送Ajax保存它。

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async=""></script>
<script>
window.OneSignal = window.OneSignal || [];

OneSignal.push(function() {
    OneSignal.init({
        autoResubscribe:true,
        appId: "your_app_id",
        safari_web_id: "your_safari_app_id",
        notifyButton: {
            enable: true,
        },

    });
    if(!localStorage.getItem('player_id')){

        OneSignal.getUserId().then(function(userId) {
            localStorage.setItem('player_id',userId)
            let xhttp = new XMLHttpRequest();
            // console.log("OneSignal User ID:", userId);
            // (Output) OneSignal User ID: 270a35cd-4dda-4b3f-b04e-41d7463a2316
            let data = new FormData();
            data.append('player_id', userId);
            xhttp.open('POST','/onesignal/save-player-id',true)
            xhttp.send(data);
        });
    }
});

更多详细信息here