我已经集成了PushPad,并设法使其适用于静态Push。现在我想将它与一些PHP和Javascript函数结合起来使它变得动态。 这是我的代码:
<script>
(function(p,u,s,h,x){p.pushpad=p.pushpad||function(){(p.pushpad.q=p.pushpad.q||[]).push(arguments)};h=u.getElementsByTagName('head')[0];x=u.createElement('script');x.async=1;x.src=s;h.appendChild(x);})(window,document,'https://pushpad.xyz/pushpad.js');
//Install Pushpad
pushpad('init', myprojectnumber);
alert("Pushpad initialised");
//Check subscribe-status
pushpad('status', function (isSubscribed, tags){
//User is already subscribed
if (isSubscribed){
alert("Already subscribed");
//User has not subscribed
}else{
alert("Not subscribed");
//Check in database if this logged-in-user has already subscribed with 5 different devices, if not generate UID and UID_SIGNATURE
var username = $('#username_show').html();
alert('Username: ' + username);
$.ajax
({
type: "POST",
data: {username: username},
dataType: "json",
url: "setNotifications.php",
cache: false,
success: function(data)
{
alert("Ajax successfull. UID generated.");
if (data.uid != 0){
//Set UID and UID-SIGNATURE
pushpad('uid', data.uid, data.uid_signature);
alert('UID:' + data.uid);
//Subscribe
pushpad('subscribe', function(isSubscribed){
if (isSubscribed){
alert("Subscribed");
}else{
alert("Notifications blocked");
}
});
//Already 5 devices subscribed
}else{
alert("Already 5 devices");
}
},
error: function()
{
alert('Error');
}
});
}
});
</script>
乍一看,一切正常。如果我第一次访问该网站,则会弹出所有警报,直至&#34; UID&#34; -alert。然后Chrome要求我接受推送通知。我点击允许然后点击提示&#34;已订阅&#34;弹出。
如果我现在刷新网站,一切都会重复到&#34;已订阅的&#34; -alert(但我不会要求Chrome允许推送通知)。我本以为警报已经订阅了#34;应该出现,因为我之前订阅过,但它没有。
如果有人可以提供帮助,我将不胜感激: - )
答案 0 :(得分:1)
问题是status
会返回当前用户(uid)的订阅状态 。您只为订阅设置了uid,状态并不知道。
这是您的代码中发生的事情:
status
检查是否订阅了uid = null
(不是因为实际的用户ID,因为尚未设置!)null
解决方案是将所有Pushpad代码移动到AJAX成功回调中。所以你按照以下顺序:
BTW为什么你使用AJAX回调来获取uid?如果用户在呈现包含Pushpad代码的页面时登录到您的网站,您可能已经知道了uid(例如用户电子邮件或数据库中用户的ID)。您可以执行pushpad('uid', '<?= $uid ?>', '<?= $uid_signature ?>');