我想为订阅我网站通知的用户添加自定义标签。但要这样做,我需要他们的播放器,我无法获取该特定用户的播放器。
<?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);
?>
答案 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