有没有办法在一个信号web-push-sdk手动添加用户和取消订阅?
我在subscribeOneSignal()函数中尝试了这个,但没有发生任何事情.
OneSignal.push(function() { OneSignal.registerForPushNotifications(); });
我有简单的html页面,其中有两个按钮,一个是“订阅”,另一个是“取消订阅”,现在当用户点击“订阅”按钮时,他应该添加一个信号,当他点击“取消订阅”按钮时,他不应该收到通知.
<!DOCTYPE html> <html> <head> <link rel="manifest" href="/manifest.json"> <script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script> <script> var OneSignal = window.OneSignal || []; OneSignal.push(["init",{ appId: "345345-asdf-345",autoRegister: false,notifyButton: { enable: true } }]); function subscribeOneSignal(){ OneSignal.push(function() { OneSignal.registerForPushNotifications(); }); OneSignal.push(function() { OneSignal.registerForPushNotifications({ modalPrompt: true }); }); } function unSubscribeOneSignal(){ //unsubscribe functionality goes here } </script> </head> <body> <p>OneSingle Testing</p> <br> <button onclick="subscribeOneSignal()">Subscribe </button> <button onclick="unSubscribeOneSignal()">Unsubscribe </button> </body> </html>
解决方法
这是解决方案,它可能会帮助别人.
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script> <script> var useragentid = null; var OneSignal = window.OneSignal || []; OneSignal.push(["init",{ appId: "345345-asdf-345",notifyButton: { enable: false },persistNotification: false }]); //Firstly this will check user id OneSignal.push(function() { OneSignal.getUserId().then(function(userId) { if(userId == null){ document.getElementById('unsubscribe').style.display = 'none'; } else{ useragentid = userId; document.getElementById('unsubscribe').style.display = ''; OneSignal.push(["getNotificationPermission",function(permission){ }]); OneSignal.isPushNotificationsEnabled(function(isEnabled) { if (isEnabled){ document.getElementById('unsubscribe').style.display = ''; document.getElementById('subscribe').style.display = 'none'; } else{ document.getElementById('unsubscribe').style.display = 'none'; document.getElementById('subscribe').style.display = ''; } }); } }); }); //Secondly this will check when subscription changed OneSignal.push(function() { OneSignal.on('subscriptionChange',function (isSubscribed) { if(isSubscribed==true){ OneSignal.getUserId().then(function(userId) { useragentid = userId; }).then(function(){ // this is custom function // here you can send post request to PHP file as well. OneSignalUserSubscription(useragentid); }); document.getElementById('unsubscribe').style.display = ''; document.getElementById('subscribe').style.display = 'none'; } else if(isSubscribed==false){ OneSignal.getUserId().then(function(userId) { useragentid = userId; }); document.getElementById('unsubscribe').style.display = 'none'; document.getElementById('subscribe').style.display = ''; } else{ console.log('Unable to process the request'); } }); }); function subscribeOneSignal(){ if(useragentid !=null){ OneSignal.setSubscription(true); } else{ OneSignal.registerForPushNotifications({ modalPrompt: true }); } } function unSubscribeOneSignal(){ OneSignal.setSubscription(false); } </script> <div id="home-top" class="clearfix"> <p>OneSingle Testing</p> <br> <button id="subscribe" class="button" onclick="subscribeOneSignal()">Subscribe </button> <button id="unsubscribe" class="button" onclick="unSubscribeOneSignal()">Unsubscribe </button> </div> <style> .button { background-color: #008CBA;border: none;color: white;padding: 15px 32px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;cursor: pointer; } </style>