我正在使用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);
如果您知道他的player_id
,上面的代码会向用户发送推送通知。但是假设某些用户访问我的网站并订阅推送通知并离开。再次访问他(他已经订阅)和收藏。(添加到收藏夹)当前缺货产品。所以如何获得此用户的player_id
哪些我可以存放在"subs_fav"
表?
id player_id product_id
1 57dd3f80...a69621a p097
当该产品变得可用时,将运行pushFav()
功能,该功能将通知用户该产品现在可用并且他们可以购买但是为此我们应该知道喜欢的用户的player_id。这个产品。我想知道如何找到这个player_id,以便我可以发送它addToFav()
ajax调用存储在"sub_fav"
表
找到了!所有你需要的是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>