var push = (function(){ var push = { settings: {}, disabled: false } var pushPlugin push.init = function(){ if (! ('device' in window) || device.platform !== "ios") { push.disabled = true return } pushPlugin = PushNotification.init({ ios: { alert: true, badge: true, sound: false, clearBadge: true, }, }) console.log("push init") PushNotification.hasPermission(push.did_initialize) pushPlugin.on('registration', push.got_registration) pushPlugin.on('notification', push.got_push_notification) } push.did_initialize = function(data) { if (! data.isEnabled) { return } console.log("push did initialize") var hub_status = localStorage.getItem("yoox.push_hub") var store_status = localStorage.getItem("yoox.push_store") push.settings.requested = localStorage.getItem("yoox.push_requested") == "true" push.settings.hub = hub_status == "true" push.settings.store = store_status == "true" if (! hub_status || hub_status == "true") { push.subscribe("hub") } if (! store_status || store_status == "true") { push.subscribe("store") } } push.got_registration = function(data){ var registrationId = data.registrationId var oldRegistrationId = localStorage.getItem("yoox.registrationId") console.log(registrationId, oldRegistrationId) if (registrationId !== oldRegistrationId || ! push.settings.requested) { localStorage.setItem("yoox.registrationId", registrationId) push.subscribe("hub", function(){ push.subscribe("store") }) } } push.subscribe = function(channel, cb){ if (push.disabled) return push.settings[channel] = true localStorage.setItem("yoox.push_" + channel, "true") var data = { registrationId: localStorage.getItem("yoox.registrationId"), channel: channel, platform: device.platform, } pushPlugin.subscribe(channel, function(){ console.log("subscribed to", channel) }) $.ajax({ method: "POST", url: "https://stone.sup.land/_services/push/add", data: data, contentType: 'application/x-www-form-urlencoded; charset=UTF-8', success: function(){ console.log("subscribed to", channel) cb && cb() }, error: push.error, }) } push.unsubscribe = function(channel, cb){ if (push.disabled) return push.settings[channel] = false localStorage.setItem("yoox.push_" + channel, "false") var data = { registrationId: localStorage.getItem("yoox.registrationId"), channel: channel, platform: device.platform, } $.ajax({ method: "POST", url: "https://stone.sup.land/_services/push/remove", data: data, contentType: 'application/x-www-form-urlencoded; charset=UTF-8', success: function(){ console.log("unsubscribed from", channel) cb && cb() }, error: push.error, }) } push.got_push_notification = function(push_obj) { // alert('We received this push notification: ' + JSON.stringify(push_obj)); app.blog.refresh() try { var is_hub = JSON.stringify(push_obj || {}).match(/hub/i) if (is_hub) { app.intro.$alert.show().html("[ HUB UPDATED ]") } else { auth.clear_cart() app.intro.$alert.show().html("[ STORE UPDATED ]") } } catch (e) { app.intro.$alert.show().html("[ HUB UPDATED ]") } if (push_obj.additionalData.foreground === false) { // TODO: route the user to the uri in push_obj pushPlugin.finish(function(){}, function(){}) } else { app.route("intro") } } push.error = function(e){ console.log("push error") } return push })()