有没有办法在一个信号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>