var push = (function(){ var push = { settings: {}, disabled: false } var pushPlugin push.init = function(){ if (! ('device' in window) || (device.platform || "").toLowerCase() !== "ios") { console.log("push disabled") 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) { // console.log(data) if (! data.isEnabled) { console.log("push did not initialize") 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 (push.settings.requested) { return } // not sure why we're also signing up for notifications here?? 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: push.url('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: push.url('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.url = function(key){ return sdk.cms() + '/_services/push/' + key } push.got_push_notification = function(push_obj) { // console.log('We received this push notification: ' + JSON.stringify(push_obj)); app.blog.refresh() push_obj.additionalData = push_obj.additionalData || {} var is_hub = true try { is_hub = JSON.stringify(push_obj || {}).match(/hub/i) } catch (e) { } if (is_hub) { app.intro.$alert.show().html("[ HUB UPDATED ]") } else if (! push_obj.additionalData.url) { auth.clear_cart() app.intro.$alert.show().html("[ STORE UPDATED ]") } if (push_obj.additionalData.foreground === false) { // TODO: route the user to the uri in push_obj pushPlugin.finish(function(){}, function(){}) if (push_obj.additionalData.url) { app.deepLinkRoute = push_obj.additionalData.url app.router.go(push_obj.additionalData.url) } } else if (is_hub) { analytics.sendPageView("push/open/hub") app.router.go("hub") } else { analytics.sendPageView("push/open/store") app.router.go("intro") } } push.error = function(e){ console.log("push error") } return push })()