CINXE.COM
Login - AppSheet
<!doctype html> <html lang="en" class="newLayout accountPage"> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://www.appsheet.com/Account/Login?ReturnUrl=%2fSupport%2fContact","20210819194224","https://web.archive.org/","web","/_static/", "1629402144"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="apple-itunes-app" content="app-id=732548900"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login - AppSheet</title> <meta name="description" content="Learn how to make mobile apps for iPhone, Android, and web."> <meta name="author" content="AppSheet"/> <meta name="google-site-verification" content="97jAB4aUdRiLxKkCyBUhJnpDEWTQAJ6tOzUKFwE1p8w"/> <meta name="google-site-verification" content="qPkt9TxKqz8fFiALwco4ddvCCsGNrgRwTuE1aCBxG1k"/> <meta property="og:title" content="AppSheet : mobile apps from spreadsheets : Login"/> <meta property="og:image" content="/web/20210819194224im_/https://www.appsheet.com/Account/Login?ReturnUrl=%2fSupport%2fContact"/> <meta property="og:site_name" content="AppSheet"/> <meta name="robots" content="noindex, follow"> <link rel="shortcut icon" href="/web/20210819194224im_/https://www.appsheet.com/Content/img/Favicon-Material.png" sizes="16x16"/> <link rel="shortcut icon" href="/web/20210819194224im_/https://www.appsheet.com/Content/img/Favicon-Material.png" sizes="32X32"/> <link href="/web/20210819194224cs_/https://www.appsheet.com/content/build/web-main-material.css?v='20210818'.1" rel="stylesheet" type="text/css" media="screen, print"/> <link href="https://web.archive.org/web/20210819194224cs_/https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" rel="stylesheet"> <link rel="stylesheet" href="/web/20210819194224cs_/https://www.appsheet.com/Content/css/instantsearch-1.12.1.min.css"> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/Content/scripts/web/navbar.js"></script> <link rel="stylesheet" href="/web/20210819194224cs_/https://www.appsheet.com/Content/css/jquery-modal-0.9.1.min.css"/> <style type="text/css"> .jquery-modal .modal { position: relative !important; overflow: auto; top:60px !important; } .modal a.close-modal { top:2px !important; right: 2px !important; } </style> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/content/build/logging-main.js?v='20210818'.1"></script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ=="> window.JeeneeAnalyticsNewUser = false; <!-- Google Tag Manager --> (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://web.archive.org/web/20210819194224/https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); var k = d.createElement(s); k.src = 'https://web.archive.org/web/20210819194224/https://www.googleoptimize.com/optimize.js?id=OPT-P4M9XQT'; f = d.getElementsByTagName(s)[0]; f.parentNode.insertBefore(k, f); })(window, document, 'script', 'dataLayer', 'GTM-N6QM4V3'); <!-- End Google Tag Manager --> </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" type="text/javascript"> (function (f, b) { if (!b.__SV) { var a, e, i, g; window.mixpanel = b; b._i = []; b.init = function (a, e, d) { function f(b, h) { var a = h.split("."); 2 == a.length && (b = b[a[0]], h = a[1]); b[h] = function () { b.push([h].concat(Array.prototype.slice.call(arguments, 0))) } } var c = b; "undefined" !== typeof d ? c = b[d] = [] : d = "mixpanel"; c.people = c.people || []; c.toString = function (b) { var a = "mixpanel"; "mixpanel" !== d && (a += "." + d); b || (a += " (stub)"); return a }; c.people.toString = function () { return c.toString(1) + ".people (stub)" }; i = "disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" "); for (g = 0; g < i.length; g++) f(c, i[g]); b._i.push([a, e, d]) }; b.__SV = 1.2; a = f.createElement("script"); a.type = "text/javascript"; a.async = !0; a.src = "/Content/scripts/_shared/external/mixpanel-2.2.min.js"; e = f.getElementsByTagName("script")[0]; e.parentNode.insertBefore(a, e) } })(document, window.mixpanel || []); // Code to manage mixpanel initialization. Calling mixpanel.init is // async and takes a 'loaded' callback argument. The code below creates a window // global object that allows other parts of the code to register callbacks. Callers // should use window.mixpanelLoader.onLoad(cb). Note: this is only implemented for // the AppSheet Web mixpanel instance. TODO: make it work for both mixpanel projects. window.mixpanelLoader = (function () { var callbacks = [] var isLoaded = false return { // The method that callers should use onLoad: function (cb) { if (isLoaded) { cb() } else { callbacks.push(cb) } }, // The callback that is passed to mixpanel.init loaded: function () { isLoaded = true callbacks.forEach(function (cb) { cb() }) } } })() mixpanel.init('f3f157a3585cb23361a9ace882b7611e', { loaded: window.mixpanelLoader.loaded }); // Makes the AppSheet bucket accessible via mixpanel.appSheet.track(...) mixpanel.init('6460a5084cbe5c139b2cd70d800f9fa0', {}, "appSheet"); // Needed to access the web bucket in a special case for app signups converting app creators mixpanel.init('f3f157a3585cb23361a9ace882b7611e', {}, "web"); </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" type="text/javascript"> // http://stackoverflow.com/questions/25851345/tracking-utm-campaign-params-with-mixpanel-as-people-properties function getQueryStrings() { var assoc = {}; var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); }; var queryString = location.search.substring(1); var keyValues = queryString.split('&'); for (var i in keyValues) { var key = keyValues[i].split('='); if (key.length > 1) { assoc[decode(key[0])] = decode(key[1]); } } return assoc; } function addDefaultProperties(properties) { if (properties == null) { properties = {}; } var linkFrom = ''; properties.linkedFrom = linkFrom; properties.user = ''; return properties } function setUTMPropertiesOnUser() { var params = getQueryStrings(); for (var i in params) { var match = /utm_[a-z]+/ if (match.test(i)) { var value = params[i]; mixpanel.people.set_once(i, value); } } } /** * Checks whether all of the UTM fields are empty in local storage. */ function hasNoSetUtmFields() { return ( window.localStorage.getItem('JeeneeNewUserCampaign') == null && window.localStorage.getItem('JeeneeNewUserSource') == null && window.localStorage.getItem('JeeneeNewUserMedium') == null && window.localStorage.getItem('JeeneeNewUserContent') == null && window.localStorage.getItem('JeeneeNewUserTerm') == null ); } /** * Checks for UTM fields in URL params. */ function hasUtmFieldsUrlparams(queryParams) { return ( queryParams.hasOwnProperty('utm_campaign') || queryParams.hasOwnProperty('utm_source') || queryParams.hasOwnProperty('utm_medium') || queryParams.hasOwnProperty('utm_content') || queryParams.hasOwnProperty('utm_term') ); } /** * Sets UTM fields to direct/default values in local storage * when none are passed in via the URL upon user's first visit. * utm_content and utm_term are left undefined for direct and organic traffic. */ function setDefaultUtmPropertiesOnUserLocalStorage() { window.localStorage.setItem('JeeneeNewUserCampaign', 'direct'); window.localStorage.setItem('JeeneeNewUserSource', 'direct'); window.localStorage.setItem('JeeneeNewUserMedium', 'none'); } /** * Sets UTM values in local storage. Only process UTM parameters within the URL when * all of UTM fields in local storage are undefined. This ensures first touch attribution. * utm_campaign, utm_source, and utm_medium are required fields for every campaign, CTA, etc. * Seeing any of these fields as undefined is an indication that there are invalid UTM parameters in the URL. * utm_content and utm_term are optional. */ function setUTMPropertiesOnUserLocalStorage() { if (hasNoSetUtmFields()) { var queryParams = getQueryStrings(); if (hasUtmFieldsUrlparams(queryParams)) { if (queryParams['utm_campaign'] != null) { window.localStorage.setItem('JeeneeNewUserCampaign', queryParams['utm_campaign']); } if (queryParams['utm_source'] != null) { window.localStorage.setItem('JeeneeNewUserSource', queryParams['utm_source']); } if (queryParams['utm_medium'] != null) { window.localStorage.setItem('JeeneeNewUserMedium', queryParams['utm_medium']); } if (queryParams['utm_content'] != null) { window.localStorage.setItem('JeeneeNewUserContent', queryParams['utm_content']); } if (queryParams['utm_term'] != null) { window.localStorage.setItem('JeeneeNewUserTerm', queryParams['utm_term']); } } else { setDefaultUtmPropertiesOnUserLocalStorage(); } } } function TrackSimpleConcordEvent(eventName) { if (window.Concord && typeof window.Concord.TrackSimpleEvent === 'function') { window.Concord.TrackSimpleEvent(eventName); } } setUTMPropertiesOnUserLocalStorage(); /* Only use this function for non-webpack pages. Cannot pass props to Concord using this */ window.Track = function (event, properties, callback) { properties = addDefaultProperties(properties) mixpanel.track(event, properties, callback); } window.TrackSuperProp = function (properties) { mixpanel.register(properties) } window.TrackSuperPropOnce = function (properties) { mixpanel.register_once(properties) } window.TrackPeopleProp = function (properties) { mixpanel.people.set(properties) } window.TrackTabClick = function (pageName, tabName, properties) { properties = addDefaultProperties(properties); properties.zType = 'TabClick'; properties.zPage = pageName; properties.zTab = tabName; window.Track('Action', properties); TrackSimpleConcordEvent('Tab Click'); } window.TrackActionClick = function (pageName, buttonName, properties) { properties = addDefaultProperties(properties); properties.zType = 'ButtonClick'; properties.zPage = pageName; properties.zButton = buttonName; window.Track('Action', properties); // Need to create an event in EventName for each combo here otherwise it's not very useful // to just know that a user clicked on a button but not what it was TrackSimpleConcordEvent('Button Click ' + pageName + ' ' + buttonName); } // Use this function to track user link clicks. You need a special function for this, since // the browser reloads a new page when the user clicks a link, before Mixpanel has a chance to // log the event. The mixpanel.track_links method waits for 300ms before giving up and moving to // the new link. query should be a jquery selector for the links to track. eventName is the event name // passed to mixpanel. properties is either a function of the DOM node that was clicked that returns the // event props, or a constant object of event props. window.TrackLinks = function (query, eventName, properties) { var newProperties; if (typeof properties === 'function') { // Wrap the function so we get all of the default properites newProperties = function (node) { var result = properties(node) return addDefaultProperties(result) } } else { newProperties = addDefaultProperties(properties); } mixpanel.track_links(query, eventName, newProperties); } </script> <script type="text/javascript" nonce="gFDBUhFyNF2ErrQg/uUmxQ=="> (function () { // Utility for running A/B tests on the website. An AB test is defined with a testName and an array of variants. // Each variant consists of a name, a jquery selector, and an initialize function that renders the variant in the website. // When a variant is run, the jquery selector is made visible and the initialize function is called. // The results of the test are saved to mixpanel. The test name is used as a super property in Mixpanel. The value // of the super property is the variant of the test that the user was shown. var ABTest = function (props) { this.name = props.name this.variants = props.variants this.defaultVariant = props.variants[0] this.initialized = false this.currentVariant = null // We need to know if mixpanel has been loaded and we can access the current user's properties. // You can pass in an onMixpanelLoad callback function, or use the default window.mixpanelLoader. // See _TrackingTop.cshtml for the code that loads mixpanel. if (typeof props.onMixpanelLoad === 'function') { this.onMixpanelLoad = props.onMixpanelLoad } else if (window.mixpanelLoader && typeof window.mixpanelLoader.onLoad === 'function') { this.onMixpanelLoad = window.mixpanelLoader.onLoad } else { this.onMixpanelLoad = function () { } } // How long to wait on mixpanel before giving up and showing the default variant this.timeout = 2000 // Gets the variant of the page for the current user. If they've already been assigned to a variant, // give them that one. Otherwise, assign them to a random variant. Parameter specifiedVariant allows // the caller to ask for a particular variant, without setting mixpanel super props. this.getVariant = function (specifiedVariant) { var variantName = specifiedVariant ? specifiedVariant : mixpanel.get_property(this.name) var variant = this.variants.find(function (v) { return v.name === variantName }) if (!variant && !specifiedVariant) { // The user has not yet beeen assigned to a variant and one has not been specified by caller variant = this.getRandomVariant() props = {} props[this.name] = variant.name mixpanel.register_once(props) } return variant } // Picks a variant uniformly at random this.getRandomVariant = function () { return this.variants[Math.floor(Math.random() * this.variants.length)] } this.getVariantSelector = function (variant) { return "." + this.name + "-" + variant.name } // Renders the variant to the page this.showVariant = function (variant, callback) { // Hide all of the variants. this.hideVariants() // Show the dom elements associated with this particular variant $(this.getVariantSelector(variant)).show() // Variant definition can supply a callback if (typeof variant.initialize === 'function') { variant.initialize() } // Caller can supply a callback, either a function or an object with keys named // according to the variants if (typeof callback === 'function') { callback(variant) } else if (typeof callback === 'object' && typeof callback[variant.name] === 'function') { callback[variant.name](variant) } this.currentVariant = variant } // Hides any variants that are currently showing in the page this.hideVariants = function () { var tmpThis = this this.variants.forEach(function (variant) { $(tmpThis.getVariantSelector(variant)).hide() }) } // Runs with a particular variant, but doesn't actually bucket the user (for debugging) this.runVariant = function (variantName, callback) { var variant = this.getVariant(variantName) this.initialized = true this.showVariant(variant, callback) } this.showSpinner = function () { $('.ab-loading.' + this.name).show() } this.hideSpinner = function () { $('.ab-loading.' + this.name).hide() } // Runs the experiment this.run = function (callback) { var tmpThis = this tmpThis.showSpinner() // The run method has already been called if (this.currentVariant && this.initialized) { callback(this.currentVariant) return } // We need to make sure mixpanel is loaded to check whether the user has already been assigned // to a variant. this.onMixpanelLoad(function () { if (tmpThis.initialized) { callback(tmpThis.currentVariant) return } tmpThis.initialized = true var variant = tmpThis.getVariant() tmpThis.showVariant(variant, callback) tmpThis.hideSpinner() }) // Just in case mixpanel doesn't load, we show them the default variant setTimeout(function () { if (tmpThis.initialized) { callback(tmpThis.currentVariant) return } tmpThis.initialized = true tmpThis.showVariant(tmpThis.defaultVariant, callback) tmpThis.hideSpinner() }, this.timeout) return this } } // Set up a global abTests object that's used to add/run tests in particular pages var tests = [] var abTests = {} var menuInitialized = false var isDebug = false abTests.addTest = function (props) { tests.push(new ABTest(props)) } abTests.getTest = function (name) { var test = tests.find(function (t) { return t.name === name }) if (test) { return test } else { console.error('Could not find AB test: ' + String(name)) return { run: function () { } } } } // Functions below allow internal users to select ab test variants. Don't store this state // in mixpanel because mixpanel is not turned on for internal users. var localStorageAvailable = function () { var test = 'test' try { localStorage.setItem(test, test) localStorage.removeItem(test) return true } catch (e) { return false } } abTests.setSelectedVariant = function (testName, variantName) { if (!localStorageAvailable()) return localStorage.setItem(testName, variantName) } abTests.loadSelectedVariant = function (testName) { if (!localStorageAvailable()) return var variantName = localStorage.getItem(testName) if (variantName) { return variantName } else { return } } var highlightMenuVariant = function (testName, callback) { return function (variant) { callback(variant) if (isDebug) { $('.ab-menu-root .ab-test-name').filter(function () { return $(this).data('name') === testName }) .find('.ab-test-variant-name').each(function () { var thisVariant = $(this).data() || {} if (thisVariant.name === variant.name) { $(this).addClass('ab-menu-highlight') } }) } } } abTests.runTest = function (name, callback) { // Check to see if there's a selected variant to override default ab behavior var selectedVariant = abTests.loadSelectedVariant(name) // Update the menu to display ab info if (!menuInitialized) abTests.initializeMenu() abTests.addToMenu(name) var newCallback = highlightMenuVariant(name, callback) if (selectedVariant) { return abTests.runTestVariant(name, selectedVariant, newCallback) } else { return abTests.getTest(name).run(newCallback) } } abTests.runTestVariant = function (name, variantName, callback) { var newCallback = highlightMenuVariant(name, callback) return abTests.getTest(name).runVariant(variantName, newCallback) } abTests.initializeMenu = function () { // Only initialize menu if in debug mode if (!isDebug) return var $menu = $('#ab-menu') if ($menu.length != 1) return $menu.show() var $root = $('.ab-menu-root') $root.hide() $('#ab-menu').find('.title').on('click', function () { $root.toggle() }) menuInitialized = true } abTests.addToMenu = function (testName) { if (!menuInitialized || !isDebug) return var test = abTests.getTest(testName) if (!test) return var $root = $('.ab-menu-root') var $testRoot = $('<li class="ab-test-name">' + testName + '</li>') $testRoot.data({name: testName}) $testRoot.appendTo($root) test.variants.forEach(function (variant) { var $variant = $('<li class="ab-test-variant-name"><a class="link" href="#">' + variant.name + '</a></li>') $variant.data(variant) $variant.appendTo($testRoot) $variant.find('a').on('click', function(e) { e.preventDefault() abTests.setSelectedVariant(testName, variant.name) location.reload() }) }) } window.abTests = abTests /* leaving this here as an example abTests.addTest({ name: 'abSpecClickableHints', variants: [ { name: 'Clickable', useHintLinks: true }, { name: 'Not Clickable', useHintLinks: false } ] }) */ })() </script> <link rel="stylesheet" type="text/css" href="/web/20210819194224cs_/https://www.appsheet.com/Content/css/cookieconsent2-3.1.0.min.css"/> </head> <body class="gsuite-root"> <div class="bodyWrapper"> <img src="/web/20210819194224im_/https://www.appsheet.com/Content/img/logo/material/logomark.png" alt="" class="hidden" style="display: none;"/> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ=="> var verifiedAjaxPost = function (options) { if (!options.headers) { options.headers = {} } options.headers.RequestVerificationToken = 'ecIq5L_Zo1yWWZHB-zuDTQHLc3N5ZEwAOQNEK-IJK5UeOZtpDTef11J6qHtxI-uD-NxOmDghvIdac9RkH0Gfr-kZCIQ5O6H7q6dTfzOPg-Lxk_qiz2grHcoEzV5zxfrrqrszKwGHGuCh1CvNPi3njw2:UYhN9xQQjrrmxaYvQKqCOXgWeejtyHlbjll_7z6EJ1pizFTVfQWUReK8XHUzRhIbYk39jlJ4amGdx-XSiwVukO7hqHitLxH_9GSP_WYfdKAf0Zpr8Fbtt2YDzISzzHYS3mOc_N_-4NcpWsqNoivH6g2' options.method = 'POST' return $.ajax(options) } window.verifiedAjaxPost = verifiedAjaxPost var reloadPage = function (nonce) { // if there is already a nonce=, remove it var currentSearch = window.location.search var currentSearchSplit = currentSearch.split("&nonce=") if (currentSearchSplit.length > 1) { currentSearchSplit[1] = "" currentSearch = currentSearchSplit.join("") } window.location.search = currentSearch + "&nonce=" + (nonce ? nonce : Math.random()) } // GLOBALS window.DEBUG_MODE = false window.ALLOW_DEBUG_LOGGING = false window.getUserId = function () { return '-1' } </script> <div id="cloningClickEater"> <div id="waitingClone"> <div class="loader">Loading...</div> <p>We're setting up your new app...</p> </div> <div id="errorClick"> <div id="errorModal" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close AlwaysEditable" data-dismiss="modal"><i class="material">cancel</i></button> <h5 class="modal-title">Error Cloning App</h5> </div> <div id="modalErrorText" class="modal-body"></div> <div class="modal-footer"> <button id="dismissModal" type="button" class="btn btn-default AlwaysEditable" data-dismiss="modal">Close</button> </div> </div> </div> </div> </div> </div> <header class="topNav"> <div class="primaryNav"> <div class="logo"> <a href="/web/20210819194224/https://www.appsheet.com/"> <img class="material-logo" src="https://web.archive.org/web/20210819194224im_/https://www.appsheet.com/content/img/material/logo.svg"/> <span class="logo-text"> AppSheet </span> <span class="subscriptionType"></span> </a> </div> <nav> <div class="navicon"> <i class="material clickable">arrow_drop_down</i> </div> <ul class="non-mobile"> <li class="returnhome "> <a href="/web/20210819194224/https://www.appsheet.com/" data-label="returnhome" rel="" target=""> <span> Return home </span> </a> </li> </ul> <ul class="mobile"> <li class="returnhome "> <a href="/web/20210819194224/https://www.appsheet.com/" data-label="returnhome" rel="" target=""> <span> Return home </span> </a> </li> </ul> </nav> </div> </header> <main> <div class="login-page"> <section class="box" id="box_login"> <div class="sign-in-title"> </div> <form action="/web/20210819194224/https://www.appsheet.com/Account/ExternalLogin?ReturnUrl=%2FSupport%2FContact" method="post"><input name="__RequestVerificationToken" type="hidden" value="OCd-E2bUvjeZbHs-QdCzC6jwTNn0Y-Ql208eet8JIJrwNdUupGxnPI5cafXl6mIGajyasXAa_GwGTuphU4WYOUqzbt7FkLLNgbF55CD3pZ_KTYwtISvrAbhAkLc13FkYUw5s_49ZNddVwr_SehiCSg2"/> <input name="fullScope" type="hidden" value="yes"/> <input name="specificDomain" type="hidden" value=""/> <div id="signUpWithLargeLabel"> Sign in with: </div> <ul id="freeProviders" class="social data-sources SubSection specificProvider "> <li class="data-source"> <button id="Google" type="submit" name="provider" value="google"> <span class="image"> <img src="/web/20210819194224im_/https://www.appsheet.com/content/img/login/v2_Google.png" alt="Google"> </span> <span class="description"> Google </span> </button> </li> <li class="data-source"> <button id="Microsoft" type="submit" name="provider" value="microsoft"> <span class="image"> <img src="/web/20210819194224im_/https://www.appsheet.com/content/img/login/v2_Microsoft.png" alt="Microsoft"> </span> <span class="description"> Microsoft </span> </button> </li> <li class="data-source"> <button id="Apple" type="submit" name="provider" value="apple"> <span class="image"> <img src="/web/20210819194224im_/https://www.appsheet.com/content/img/login/v2_Apple.png" alt="Apple"> </span> <span class="description"> Apple </span> </button> </li> <li class="data-source"> <button id="Dropbox" type="submit" name="provider" value="dropbox"> <span class="image"> <img src="/web/20210819194224im_/https://www.appsheet.com/content/img/login/v2_Dropbox.png" alt="Dropbox"> </span> <span class="description"> Dropbox </span> </button> </li> <li class="data-source"> <button id="Smartsheet" type="submit" name="provider" value="smartsheet"> <span class="image"> <img src="/web/20210819194224im_/https://www.appsheet.com/content/img/login/v2_Smartsheet.png" alt="Smartsheet"> </span> <span class="description"> Smartsheet </span> </button> </li> <li class="data-source"> <button id="Box" type="submit" name="provider" value="box"> <span class="image"> <img src="/web/20210819194224im_/https://www.appsheet.com/content/img/login/v2_Box.png" alt="Box"> </span> <span class="description"> Box </span> </button> </li> <li class="data-source"> <button id="Salesforce" type="submit" name="provider" value="salesforce"> <span class="image"> <img src="/web/20210819194224im_/https://www.appsheet.com/content/img/login/v2_Salesforce.png" alt="Salesforce"> </span> <span class="description"> Salesforce </span> </button> </li> </ul> </form> <p id="privacy-notice"> By signing in, you agree to the <a href="/web/20210819194224/https://www.appsheet.com/home/terms" target="_target" rel="noreferrer noopener">terms of service</a> and <a href="/web/20210819194224/https://www.appsheet.com/home/privacy" target="_target" rel="noreferrer noopener">privacy policy</a>. </p> </section> <style> #google-login-error-overlay { width: 100vw; height: 8vh; position: fixed; bottom: 0; left: 0; z-index: 9999; background-color: #444; display: none; padding: 40px; } #error-container { width: 100%; height: 100%; display: flex; justify-content: space-between; align-items: center; flex-direction: row; } .error-item { color: #eee; font-size: 10pt; font-weight: lighter; } @keyframes wiggle { 0% { transform: scale(1) } 100% { transform: scale(1.1) } } .error-link { font-size: 12pt; color: white; font-weight: bold; animation: wiggle 250ms 4 ease alternate; } </style> </div> <div id="google-login-error-overlay"> <div id="error-container"> <p class="error-item">Having trouble logging in?</p> <p class="error-item error-link">Tap Here</p> </div> </div> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ=="> document.querySelector('#error-container .error-link').addEventListener('click', function() { return JeeneeAndroid.triggerChromeInstall() }) </script> <div class="modal" id="deleteAccountModal"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button class="AlwaysEditable cancel" data-dismiss="modal">Cancel</button> <h5 class="modal-title"> Delete my account </h5> </div> <form> <div class="modal-body"> <p>We're sorry to see you go! Why are you leaving?</p> <p> <fieldset> <div> <input name="deleteAccountReason" type="radio" value="too hard" id="too-hard" style="width:auto;margin-right:10px"/><label for="too-hard" style="display:inline">It's too hard to figure out</label> </div> <div> <input name="deleteAccountReason" type="radio" value="unmet needs" id="unmet-needs" style="width:auto;margin-right:10px"/><label for="unmet-needs" style="display:inline">It doesn't do what I need it to do</label> </div> <div> <input name="deleteAccountReason" type="radio" value="just browsing" id="just-browsing" style="width:auto;margin-right:10px"/><label for="just-browsing" style="display:inline">I was just browsing</label> </div> <div> <input name="deleteAccountReason" type="radio" value="other" id="other" style="width:auto;margin-right:10px"/><label for="other" style="display:inline">Other</label> </div> </fieldset> </p> <p> <label for="delete-account-comment">Please tell us what we should improve<textarea rows="4" name="deleteAccountComment" id="delete-account-comment"></textarea></label> </p> <p> <a href="https://web.archive.org/web/20210819194224/https://help.appsheet.com/en/articles/962254-resetting-appsheet" class="link clear-devices-help-link"> Deletion of this account will not delete the apps or app data already downloaded to app users' devices. </a> </p> </div> <div class="modal-footer" style="overflow:auto"> <button type="submit">Delete my account</button> </div> </form> </div> </div> </div> </main> <footer class="bottomNav"> <nav> <ul> <li class="company"> <div class="subheader1"><a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/about">Company</a></div> <ul> <li class="about "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/about">About</a> </li> <li class="blog "> <a href="https://web.archive.org/web/20210819194224/http://blog.appsheet.com/">Blog</a> </li> <li class="careers "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/careers">Careers</a> </li> <li class="contactus "> <a href="/web/20210819194224/https://www.appsheet.com/Support/Contact">Contact us</a> </li> </ul> </li> <li class="howitworks"> <div class="subheader1"><a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/application-platform">Platform</a></div> <ul> <li class="box "> <a href="/web/20210819194224/https://www.appsheet.com/HowItWorks/Architecture">Architecture</a> </li> <li class="datasource "> <a href="/web/20210819194224/https://www.appsheet.com/HowItWorks/DataSources">Data Sources</a> </li> <li class="enterprise "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/appsheet-enterprise">Enterprise</a> </li> <li class="trustCenter "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/trust-center">Trust Center</a> </li> </ul> </li> <li class="pricing"> <div class="subheader1"><a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/pricing">Pricing</a></div> <ul> <li class="terms "> <a href="/web/20210819194224/https://www.appsheet.com/Home/Terms">Terms of service</a> </li> <li class="privacy "> <a href="https://web.archive.org/web/20210819194224/https://policies.google.com/privacy">Privacy policy</a> </li> <li class="sales "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/contact">Contact sales</a> </li> </ul> </li> <li class="solutions"> <div class="subheader1"><a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/get-it-done">Solutions</a></div> <ul> <li class="apps "> <a href="/web/20210819194224/https://www.appsheet.com/templates">Sample apps</a> </li> <li class="resources "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/get-it-done#section3-outer-wrap">Resources</a> </li> <li class="industries "> <a href="/web/20210819194224/https://www.appsheet.com/Solutions#industries">Industries</a> </li> <li class="customers "> <a href="https://web.archive.org/web/20210819194224/https://blog.appsheet.com/topic/customers">Customers</a> </li> </ul> </li> <li class="partners"> <div class="subheader1"><a href="/web/20210819194224/https://www.appsheet.com/Partners">Partners</a></div> <ul> <li class="findapartner "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/partners/get-partner-help">Find a partner</a> </li> <li class="becomeapartner "> <a href="https://web.archive.org/web/20210819194224/https://solutions.appsheet.com/partners/become-an-appsheet-partner">Become a partner</a> </li> </ul> </li> <li class="support"> <div class="subheader1"><a href="/web/20210819194224/https://www.appsheet.com/Support">Support</a></div> <ul> <li class="community "> <a href="https://web.archive.org/web/20210819194224/https://community.appsheet.com/">Community</a> </li> <li class="documentation "> <a href="https://web.archive.org/web/20210819194224/https://help.appsheet.com/">Documentation</a> </li> <li class="contactus "> <a href="/web/20210819194224/https://www.appsheet.com/Support/Contact">Contact Us</a> </li> </ul> </li> <li class="account"> <div class="subheader1"><a href="/web/20210819194224/https://www.appsheet.com/Template/Apps">Account</a></div> <ul> <li class="login "> <a href="/web/20210819194224/https://www.appsheet.com/Account/Login">Login</a> </li> <li class="signup "> <a href="/web/20210819194224/https://www.appsheet.com/Home/Start">Start for free</a> </li> </ul> </li> </ul> <div class="bottom-meta"> <div class="socialMedia" itemscope itemtype="http://schema.org/Organization"> <link itemprop="url" href="https://www.appsheet.com"> <a href="https://web.archive.org/web/20210819194224/https://www.youtube.com/channel/UC7xYEO2O_VZWyvctU0LQp8g" itemprop="sameAs"> <i class="material">post_youtube</i> </a> <a href="https://web.archive.org/web/20210819194224/https://www.linkedin.com/company/appsheet" itemprop="sameAs"> <i class="material">post_linkedin</i> </a> <a href="https://web.archive.org/web/20210819194224/https://twitter.com/appsheet" itemprop="sameAs"> <i class="material">post_twitter</i> </a> <a href="https://web.archive.org/web/20210819194224/https://www.facebook.com/appsheet" itemprop="sameAs"> <i class="material">post_facebook</i> </a> </div> </div> </nav> </footer> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/Scripts/jquery-3.5.1.min.js"></script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/Scripts/jquery-migrate-3.3.2.min.js"></script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/bundles/valjquery"></script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/bundles/unobtrusive?v=lWgf8_nB9MzU3N1ztusS2nnyZp9GZERS2J1NvX37gZo1"></script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/Content/scripts/web/utilities.js?update='20210818'.1"></script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/Content/scripts/web/accountStartup.js"> </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" type="text/javascript"> $(function () { var shouldCheck = false; if (shouldCheck) { var oneHour = 60 * 60 * 1000; initCheckAccountStatus(oneHour); } }); </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ=="> $(function () { $.getScript("/Content/scripts/_shared/external/jquery-modal-0.9.1.min.js"); }); </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" type="text/javascript"> var isAndroidApp = false; var isIOSApp = false; var useNativeLoginIOS = false; var useGoogleNativeLoginAndroid = false; var nativeLoginUrlGoogle = 'https://web.archive.org/web/20210819194224/https://www.appsheet.com/Account/InitiateDeviceLogin?returnUrl=%2FSupport%2FContact&provider=google&fullScope=yes'; var nativeLoginUrlMicrosoft = 'https://web.archive.org/web/20210819194224/https://www.appsheet.com/Account/InitiateDeviceLogin?returnUrl=%2FSupport%2FContact&provider=microsoft&fullScope=yes'; var nativeLoginUrlBox = 'https://web.archive.org/web/20210819194224/https://www.appsheet.com/Account/InitiateDeviceLogin?returnUrl=%2FSupport%2FContact&provider=box&fullScope=yes'; var nativeLoginUrlDropbox = 'https://web.archive.org/web/20210819194224/https://www.appsheet.com/Account/InitiateDeviceLogin?returnUrl=%2FSupport%2FContact&provider=dropbox&fullScope=yes'; var nativeLoginUrlSmartsheet = 'https://web.archive.org/web/20210819194224/https://www.appsheet.com/Account/InitiateDeviceLogin?returnUrl=%2FSupport%2FContact&provider=smartsheet&fullScope=yes'; var nativeLoginUrlSalesforce = 'https://web.archive.org/web/20210819194224/https://www.appsheet.com/Account/InitiateDeviceLogin?returnUrl=%2FSupport%2FContact&provider=salesforce&fullScope=yes'; var nativeLoginUrlApple = 'https://web.archive.org/web/20210819194224/https://www.appsheet.com/Account/InitiateDeviceLogin?returnUrl=%2FSupport%2FContact&provider=apple&fullScope=yes'; var callNativeURL = function (nativeURL) { var data = { url: nativeURL }; if (typeof window.webkit !== 'undefined' && typeof window.webkit.messageHandlers.GoogleSignIn !== 'undefined') { window.webkit.messageHandlers.GoogleSignIn.postMessage(data) } else { $.ajax({ type: 'POST', async: false, url: '/jeenee_new?method=GoogleSignIn', data: data }) } } var initPage = function () { if ('False' === 'True') { $('.access-info, footer.bottomNav, header.topNav').hide() } if (useNativeLoginIOS) { $("#Google").on('click',function(e){ e.preventDefault(); callNativeURL(nativeLoginUrlGoogle); }); $("#Microsoft").on('click', function (e) { e.preventDefault(); callNativeURL(nativeLoginUrlMicrosoft); }); $("#Dropbox").on('click', function (e) { e.preventDefault(); callNativeURL(nativeLoginUrlDropbox); }); $("#Box").on('click', function (e) { e.preventDefault(); callNativeURL(nativeLoginUrlBox); }); $("#Smartsheet").on('click', function (e) { e.preventDefault(); callNativeURL(nativeLoginUrlSmartsheet); }); $("#Salesforce").on('click', function (e) { e.preventDefault(); callNativeURL(nativeLoginUrlSalesforce); }); $("#Apple").on('click', function (e) { e.preventDefault(); callNativeURL(nativeLoginUrlApple); }); } if(isIOSApp){ $("#terms, #privacy").each(function(i,e){ $(e).attr("href",'jeenee_method?TargetBlank?href=' + $(e).attr('href')); }); } if (isAndroidApp){ if(useGoogleNativeLoginAndroid) { $("#Google").on('click',function(e){ e.preventDefault(); JeeneeAndroid.GoogleSignIn(nativeLoginUrlGoogle); }); $("#Microsoft").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn(nativeLoginUrlMicrosoft); }); } $("#terms, #privacy").on('click', function(evt){ evt.preventDefault(); JeeneeAndroid.externalLink($(evt.target).attr('href')); return false; }); } } $('form[action]').each(function (i, elem) { if (elem.action && window.location.hash) { elem.action += encodeURIComponent(window.location.hash) } }) Track("Login", { IsSignup: false, SpecificProvider: '', InApp: false }); window.shouldShowErrorDialog = true; window.onLogin = function () { // could get eaten while we are away from the app logging in in chrome or something setTimeout(function () { requestAnimationFrame(function () { // extra delay that happens when we are in the app setTimeout(function () { // check suppression global that gets set to false by native wrapper when we get a return ticket if (window.shouldShowErrorDialog) { // show the error dialog document.getElementById("google-login-error-overlay").style.display = "initial"; } }, 2000) }); }, 3000); }; window.cancelOnLogin = function () { window.shouldShowErrorDialog = false; document.getElementById("google-login-error-overlay").style.display = "none"; } </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" type="text/javascript"> /*! * jQuery Cookie Plugin v1.3.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Klaus Hartl * Released under the MIT license */ (function (d) { "function" === typeof define && define.amd ? define(["jquery"], d) : d(jQuery) })(function (d) { function n(a) { return a } function p(a) { return decodeURIComponent(a.replace(k, " ")) } function l(a) { 0 === a.indexOf('"') && (a = a.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\")); try { return e.json ? JSON.parse(a) : a } catch (c) { } } var k = /\+/g, e = d.cookie = function (a, c, b) { if (void 0 !== c) { b = d.extend({}, e.defaults, b); if ("number" === typeof b.expires) { var g = b.expires, f = b.expires = new Date; f.setDate(f.getDate() + g) } c = e.json ? JSON.stringify(c) : String(c); return document.cookie = [e.raw ? a : encodeURIComponent(a), "=", e.raw ? c : encodeURIComponent(c), b.expires ? "; expires=" + b.expires.toUTCString() : "", b.path ? "; path=" + b.path : "", b.domain ? "; domain=" + b.domain : "", b.secure ? "; secure" : ""].join("") } c = e.raw ? n : p; b = document.cookie.split("; "); for (var g = a ? void 0 : {}, f = 0, k = b.length; f < k; f++) { var h = b[f].split("="), m = c(h.shift()), h = c(h.join("=")); if (a && a === m) { g = l(h); break } a || (g[m] = l(h)) } return g }; e.defaults = {}; d.removeCookie = function (a, c) { return void 0 !== d.cookie(a) ? (d.cookie(a, "", d.extend({}, c, { expires: -1 })), !0) : !1 } }); var USTORE = (function () { var e, a, c, f, b, k, i, j, d; var g = { setValue: function (l, m, n) { if (e) { if (n && a) { sessionStorage.setItem(l, m) } else { localStorage.setItem(l, m) } } else { if (c) { if (n) { i.setAttribute(l, m); i.save(d) } else { f.setAttribute(l, m); f.save(ieDb) } } } }, getValue: function (m, n) { var l = ""; if (e) { if (n && a) { l = sessionStorage.getItem(m) } else { l = localStorage.getItem(m) } } else { if (c) { if (n) { i.load(d); l = i.getAttribute(m) } else { f.load(ieDb); l = f.getAttribute(m) } } } return l }, deleteValue: function (l, m) { if (e) { this.setValue(l, null, m) } else { if (c) { if (m) { i.removeAttribute(l); i.save(d) } else { f.removeAttribute(l); f.save(ieDb) } } } }, clearDB: function (l) { if (e) { if (l) { sessionStorage.clear() } else { localStorage.clear() } } else { if (c) { h.clearDB(l) } } } }; var h = { detectIE: function () { if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { var l = new Number(RegExp.$1); if (l >= 5.5 && l <= 8) { return true } } return false }, init: function () { var n = document.createElement("meta"); n.name = "save"; n.content = "userdata"; document.getElementsByTagName("head")[0].appendChild(n); var m = new Date().getTime(); var l = document.createElement("div"); b = "ie-db-" + m; ieDb = "userStorage"; l.setAttribute("id", b); body.appendChild(l); f = document.getElementById(b); f.style.behavior = "url('#default#userData')"; f.style.display = "none"; if (window.name === null || window.name === undefined || window.name === "") { window.name = "ie-sesh-db-" + m } j = window.name; d = j; l = document.createElement("div"); l.setAttribute("id", j); f.appendChild(l); i = document.getElementById(j); i.style.behavior = "url('#default#userData')"; i.style.display = "none" }, clearDB: function (r) { var m = new Date().getTime(), t = document.createElement("div"), l = r ? i : f, p = r ? d : ieDb, s = l.xmlDocument, n = s.firstChild.attributes, q, o = n.length; while (0 <= --o) { q = n[o]; l.removeAttribute(q.nodeName) } l.save(p) } }; return { init: function () { if (typeof (window.localStorage) === "object") { e = true; try { if (typeof (window.sessionStorage) === "object") { a = true } } catch (l) { a = false } } else { if (h.detectIE()) { c = true; h.init() } } }, setValue: function (l, m) { g.setValue(l, m, false) }, setSessionValue: function (l, m) { g.setValue(l, m, true) }, getValue: function (l) { return g.getValue(l, false) }, getSessionValue: function (l) { return g.getValue(l, true) }, deleteValue: function (l) { g.deleteValue(l, false) }, deleteSessionValue: function (l) { g.deleteValue(l, true) }, clearLocalStorage: function () { g.clearDB(false) }, clearSessionStorage: function () { g.clearDB(true) }, clearDOMStorage: function () { g.clearDB(false); g.clearDB(true) } } })(); </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" type="text/javascript"> $(function () { $(".clickable").on('click', function () { $("#HiddenForms, button.hide, .division.hide").removeClass("hide"); $(this).hide(); $.cookie("hideoptions", "false", { expires: 31, path: '/account' }); $.cookie("hideoptions", "false", { expires: 31, path: '/Account' }); USTORE.setValue("hideoptions", "false"); }); initPage(); if ($.cookie('hideoptions') || USTORE.getValue('hideoptions')) { $(".clickable").click(); } $(".ExpandableSection").on('click', function () { $(this).find(".SectionTitle").toggleClass('collapsed'); $(this).find(".SubSection").toggle(500); }); $('.ExpandableSection button[type="submit"]').on('click', function (e) { e.stopPropagation(); }); }); </script> <script nonce="gFDBUhFyNF2ErrQg/uUmxQ==" src="/web/20210819194224js_/https://www.appsheet.com/bundles/valjquery?v=1JOva1TtAasjAVPR4sIF9tSsHrK0L4EZcerlvIb-z3U1"></script> <noscript> <iframe src="https://web.archive.org/web/20210819194224if_/https://www.googletagmanager.com/ns.html?id=GTM-N6QM4V3" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> </div> </body> </html> <!-- FILE ARCHIVED ON 19:42:24 Aug 19, 2021 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 03:42:02 Dec 12, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.512 exclusion.robots: 0.026 exclusion.robots.policy: 0.015 esindex: 0.009 cdx.remote: 17.526 LoadShardBlock: 256.398 (3) PetaboxLoader3.datanode: 396.463 (4) load_resource: 347.167 PetaboxLoader3.resolve: 198.009 -->