CINXE.COM
Login - AppSheet
<!doctype html> <html lang="en" class="newLayout accountPage"> <!-- The AppSheet website and AppSheet apps make use of open source software subject to the licenses and copyright notices at https://www.appsheet.com/oss/notices --> <head> <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"> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" type="text/javascript"> if (self.trustedTypes && self.trustedTypes.createPolicy && !self.trustedTypes.defaultPolicy) { const escapeScriptPolicy = trustedTypes.createPolicy("default", { createHTML: (string) => { if (string === "​" || string === "" || string === "&") { return string; } else { return null; }; } }); } </script> <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=""/> <meta property="og:site_name" content="AppSheet"/> <meta name="robots" content="noindex, follow"> <link rel="shortcut icon" href="/Content/img/Favicon-Material-Rebrand.png" sizes="16x16"/> <link rel="shortcut icon" href="/Content/img/Favicon-Material-Rebrand.png" sizes="32X32"/> <!-- Reskinned stylesheet --> <link href="https://www.appsheet.com/assets/35d55fc0eedffd6aea08586d705d64dc5935fcb4ef5b7c3a70d71d74c5f09e5d.css" rel="stylesheet" type="text/css" media="screen, print" /> <!-- Google Fonts --> <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" rel="stylesheet"> <!-- Navbar --> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="/Content/scripts/web/navbar.js"></script> <link rel="stylesheet" href="/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> <!------------------------ TRACKING ------------------------> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" type="text/javascript"> /** * This is used by this page and MarketingRedirect.cshtml - moved above ShouldLogAnalytics * since this returns false for test accounts and we have an integration test */ 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; } </script> <!-- Google tag (gtag.js) --> <script nonce="gyUsMSbyeg0LvDnlgzHqDw=="> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); function glueCookieNotificationBarLoaded() { (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'}); var firstScript=d.getElementsByTagName(s)[0], dl=l!='dataLayer'?'&l='+l:''; var script = d.createElement(s); script.async = true; var url = 'https://www.googletagmanager.com/gtm.js?id='+i+dl; if (self.trustedTypes && self.trustedTypes.createPolicy) { var policy = self.trustedTypes.createPolicy('gtm-load-fix', { createScriptURL: function(_ignored) { return url; } }); script.src = policy.createScriptURL('_ignored'); } else { script.src = url; } firstScript.parentNode.insertBefore(script, firstScript); })(window,document,'script','dataLayer','GTM-MXWLX3PF'); } </script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="https://www.appsheet.com/assets/090510102d9f686cce5db049efd92db035e66231ef0381147401ce867b7c9e02.js" ></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="https://www.appsheet.com/assets/2e12937f9cad1713615022f1dac0f3ece070d2bd2c1b4869adb27283343662b3.js" ></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="https://www.appsheet.com/assets/3599ce53934853daad86acf51f3d077ae4175583366a41f05bab34e720a31163.js" ></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="https://www.appsheet.com/assets/de6cdd38c56716d906231036300becd46a35b7fc5f40d55429be80c91a935798.js" ></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="https://www.appsheet.com/assets/6f7fa028e348569b4380e330a8a63cf07687cc3ae0c7343ff09430158c589f08.js" ></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="https://www.appsheet.com/assets/caf839b139efcfe921023997f61904bb2dd5453125d71aebb7cb5df7ae70cedd.js" ></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" type="text/javascript"> /** * 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(); /* All DefunctEventCalled events are deprecated, do not use */ window.Track = function (event, properties, callback) { TrackSimpleConcordEvent('Defunct Event Called'); } window.TrackSuperProp = function (properties) { TrackSimpleConcordEvent('Defunct Event Called'); } window.TrackSuperPropOnce = function (properties) { TrackSimpleConcordEvent('Defunct Event Called'); } window.TrackPeopleProp = function (properties) { TrackSimpleConcordEvent('Defunct Event Called'); } window.TrackTabClick = function (pageName, tabName, properties) { TrackSimpleConcordEvent('Defunct Event Called'); } window.TrackActionClick = function (pageName, buttonName, 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. window.TrackLinks = function (query, eventName, properties) { TrackSimpleConcordEvent('Defunct Event Called'); } </script> <!------------------------ END TRACKING ------------------------> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preload" href="https://fonts.googleapis.com/css2?family=Google+Sans+Text:wght@400&family=Google+Sans:wght@500&display=swap" as="style"> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Google+Sans+Text:wght@400&family=Google+Sans:wght@500&display=swap"> <link rel="stylesheet" href="/Content/css/cookienotificationbar.min.css"> </head> <body class="gsuite-root"> <div class="bodyWrapper"> <!-- Hidden logo to show up on links to page --> <img src="/Content/img/Favicon-Material-Rebrand.png" alt="" class="hidden" style="display: none;"/> <script nonce="gyUsMSbyeg0LvDnlgzHqDw=="> window.VerifiedAjaxPostToken = 'dummy:dummy'; var verifiedAjaxPost = function (options, errorOptions) { if (!options.headers) { options.headers = {} } options.method = 'POST' errorOptions = errorOptions || {}; return $.ajax(options).fail((jqXHR, textStatus, errorThrown) => { if ( !errorOptions.disableErrorReporting && window.ErrorHandling && typeof window.ErrorHandling.ReportHttpError === 'function' ) { window.ErrorHandling.ReportHttpError('post', options.url, jqXHR.status, { error: errorOptions.error, errorThrown, textStatus, responseText: jqXHR.responseText, }); } }); } 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' } window.getUserRole = function() { return 'Member'; } window.getUserCorporatePlan = function() { return 0; } window.getIsCoreAdmin = function () { return false; } window.hasRolloutByUserId = (function () { const rollouts = new Set( ["AdminConsoleAppTransfer","AdminConsoleCoreAdmin","AntlrExpressionAssert","AppSheetAdminConsole","AutoResolution","BannerForDeadlineReminderOfFirebaseBrandedAppsMigration","CurryInitialValueFix","DefaultDesktopUI","DontConstructRemoteImageUrls","EnableQuickSyncForASDBApps","EnableRtlForReactRoot","EnableUserFeedback","FirebaseHttpV1MigrationBrandedApps","FixDeletePersistence","FixLabelAttributeCache","FixTouchDoubleClick","FlickerFix","GeminiRebrand","GoogleFormsEvent","ImagesUsePartialDimensions","ImproveEditorOnboarding","InContextActionsAndColumns","InContextSlices","InitializeAppInDesktop","MapViewStackToControlMemo","NewFakeIntercom","NoClearBeforeWrite","OverrideBackNavigation","ParseAppUrlHash","PreserveInitialValuesInTransaction","ReactRootValidationErrors","RefactorOverlayActions","RequestCompression","RevampOnboardingStyles","SerializeFilterExprInSetCurrentUiState","SetSourceQualifierIdFrontend","ShowLiveLastProcessedDate","ShowProminentTableScopeActions","ShowTooltipsForActionsInCardView","SmallActionsImprovements","StaleForm","StaticTaskTableName","UpdateEmulatorExpression","UpdateValidityEnums","UseAppDefRoute","UseLogoutEndpointInApp","UseNewBootStrapBundle","UseNewLocalizedWireValueFallback","UseParentFilters","UseRecursiveFormattingRule","UseTypeDisplayInDesktopUIDrilldownTree","WidgetHelperJSS"] ); return function (rolloutName) { return rollouts.has(rolloutName); } })(); </script> <!-- Messages when creating or cloning apps --> <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 modal-errors-new"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close AlwaysEditable" data-dismiss="modal"> <i class="material">close</i> </button> <h5 class="modal-title-new">Error Creating App</h5> </div> <div id="modalErrorText" class="modal-body-new"></div> <div class="modal-more-errors-holder"> <div> <div id="moreErrorsAvailableText"></div> <button type="button" id="seeMoreArrow"> <i class='fa fa-chevron-down'></i> </button> <button type="button" id="seeLessArrow"> <i class='fa fa-chevron-up'></i> </button> </div> <div id="moreErrorsText" class="modal-more-errors"></div> </div> <div class="modal-footer"> <button id="ackErrorButton" class="btn btn-default AlwaysEditable" data-dismiss="modal">OK</button> <button id="templatesButton" class="btn btn-default AlwaysEditable" data-dismiss="modal">Start with a template</button> </div> </div> </div> </div> </div> </div> <header class="topNav"> <div class="primaryNav"> <div class="logo"> <a href="/"> <img class="material-rebrand-logo" src=https://www.appsheet.com/Content/img/material/appsheet_rebrand_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="https://www.appsheet.com/home" data-label="returnhome" rel="" target=""> <span> Return home </span> </a> </li> </ul> <ul class="mobile"> <li class="returnhome "> <a href="https://www.appsheet.com/home" data-label="returnhome" rel="" target=""> <span> Return home </span> </a> </li> </ul> </nav> </div> </header> <main> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" type="text/javascript"> if (self.ReportingObserver) { const observer = new ReportingObserver((reports) => { reports.forEach((report) => { if (report.body.blockedURL === 'trusted-types-sink') { const ttMsg = "TT Error: " + report.body.sample; const data = { url: report.body.documentURL, msg: ttMsg, errorContext: report.body.sourceFile, line: report.body.lineNumber, }; const headers = { 'Content-Type': 'application/json', }; const blob = new Blob([JSON.stringify(data)], headers); navigator.sendBeacon('/manage/JavaScriptError', blob); } }); }, { types: ["csp-violation"], }); // Start observing errors observer.observe(); } </script> <div class="login-page"> <section class="box" id="box_login"> <div class="sign-in-title"> </div> <form action="/Account/ExternalLogin" method="post"> <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="/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="/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="/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="/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="/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="/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="/Content/img/login/v2_Salesforce.png" alt="Salesforce"> </span> <span class="description"> Salesforce </span> </button> </li> </ul> <input name="__RequestVerificationToken" type="hidden" value="CfDJ8NM6immW_19OsRpOkIoMW6d9G1DSl6UygMh3KWcULMJZJ_S8v3WUZe_UMQUqmS7agDGbOAO98RBs5K8ODcHW1ZMKqJlP5hVFOg_IAbGSNHJP2yEf0hS8NbuiDVHWwvCuNKZnJzns6F_nvlI32yF26vg" /></form> <p id="privacy-notice"> By signing in, you agree to the <a href="/home/terms" target="_target" rel="noreferrer noopener">terms of service</a> and <a href="/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="gyUsMSbyeg0LvDnlgzHqDw=="> 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">X</button> <h5 class="modal-title"> Delete my account </h5> </div> <form method="post" action="/account/delete"> <input type="hidden" name="id" value="-1"> <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://support.google.com/appsheet?p=reset-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="bottomNavCompact"> <nav> <ul> <li> <div class="logo"> <a href="https://www.google.com" title="Google" target="_blank" rel="noopener noreferrer"> Google </a> </div> </li> <li> <div> <a href="https://about.google/intl/en/?utm_source=about.appsheet.com&utm_medium=referral&utm_campaign=appsheet-footer-en " title="About Google" target="_blank" rel="noopener noreferrer"> About Google </a> </div> </li> <li> <div> <a href="https://about.google/products/" title="Google products" target="_blank" rel="noopener noreferrer"> Google products </a> </div> </li> <li> <div> <a href="https://policies.google.com/privacy" title="Privacy" target="_blank" rel="noopener noreferrer"> Privacy </a> </div> </li> <li> <div> <a href="/Home/Terms" title="Terms" target="_blank" rel="noopener noreferrer"> Terms </a> </div> </li> <li> <div> <a aria-hidden="true" class="glue-footer__link glue-cookie-notification-bar-control" role="button" tabindex="0"> Cookies management controls </a> </div> </li> </ul> </nav> </footer> <!-- SCRIPTS --> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="/Scripts/jquery-3.6.2.min.js"></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="/Scripts/bundles/valjquery.js"></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="/Scripts/jquery.unobtrusive-ajax.min.js"></script> <!-- Various utilities (modals, tooltips, etc.) --> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="/Content/scripts/web/utilities.js?update='20241122'.1"></script> <!-- This partial checks the account status every hour using accountStartup.js --> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="/Content/scripts/web/accountStartup.js"> </script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" type="text/javascript"> $(function () { var shouldCheck = false; if (shouldCheck) { var oneHour = 60 * 60 * 1000; initCheckAccountStatus(oneHour); } }); </script> <script type="text/javascript" nonce="gyUsMSbyeg0LvDnlgzHqDw==" src="/Content/scripts/_shared/external/jquery-modal-0.9.1.min.js"></script> <script nonce="gyUsMSbyeg0LvDnlgzHqDw==" type="text/javascript"> function SafeGetLocalStorage(property) { try { return window.localStorage.getItem(property) } catch { return "" } } function GetUtmCampaign() { return SafeGetLocalStorage('JeeneeNewUserCampaign') } function GetUtmSource() { return SafeGetLocalStorage('JeeneeNewUserSource') } function GetUtmMedium() { return SafeGetLocalStorage('JeeneeNewUserMedium') } function GetUtmContent() { return SafeGetLocalStorage('JeeneeNewUserContent') } function GetUtmTerm() { return SafeGetLocalStorage('JeeneeNewUserTerm') } var isAndroidApp = false; var isIOSApp = false; var useNativeLoginIOS = false; var useGoogleNativeLoginAndroid = false; 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) { $("#Dropbox").on('click', function (e) { e.preventDefault(); callNativeURL('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=dropbox&SpecificDomain='); }); $("#Google").on('click', function (e) { e.preventDefault(); callNativeURL('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=google&SpecificDomain='); }); $("#Salesforce").on('click', function (e) { e.preventDefault(); callNativeURL('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=salesforce&SpecificDomain='); }); $("#Box").on('click', function (e) { e.preventDefault(); callNativeURL('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=box&SpecificDomain='); }); $("#Apple").on('click', function (e) { e.preventDefault(); callNativeURL('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=apple&SpecificDomain='); }); $("#Microsoft").on('click', function (e) { e.preventDefault(); callNativeURL('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=microsoft&SpecificDomain='); }); $("#Smartsheet").on('click', function (e) { e.preventDefault(); callNativeURL('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=smartsheet&SpecificDomain='); }); } if(isIOSApp){ $("#terms, #privacy").each(function(i,e){ $(e).attr("href",'jeenee_method?TargetBlank?href=' + $(e).attr('href')); }); } if (isAndroidApp){ if (useGoogleNativeLoginAndroid) { $("#Dropbox").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=dropbox&SpecificDomain='); }); $("#Google").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=google&SpecificDomain='); }); $("#Salesforce").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=salesforce&SpecificDomain='); }); $("#Box").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=box&SpecificDomain='); }); $("#Apple").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=apple&SpecificDomain='); }); $("#Microsoft").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=microsoft&SpecificDomain='); }); $("#Smartsheet").on('click', function (e) { e.preventDefault(); JeeneeAndroid.GoogleSignIn('https://www.appsheet.com/Account/InitiateDeviceLogin?FullScope=True&returnUrl=%2F&provider=smartsheet&SpecificDomain='); }); } $("#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) { if (elem.action.includes("?")) { elem.action += "&" } else { elem.action += "?" } elem.action += "utmCampaign=" + GetUtmCampaign() elem.action += "&utmTerm=" + GetUtmTerm() elem.action += "&utmContent=" + GetUtmContent() elem.action += "&utmMedium=" + GetUtmMedium() elem.action += "&utmSource=" + GetUtmSource() } if (elem.action && window.location.hash) { elem.action += encodeURIComponent(window.location.hash) } }); 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="gyUsMSbyeg0LvDnlgzHqDw==" 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="gyUsMSbyeg0LvDnlgzHqDw==" 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").trigger('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="gyUsMSbyeg0LvDnlgzHqDw==" src="/Scripts/bundles/valjquery.js"></script> <!-- MORE TRACKING --> <!-- Google tag (gtag.js) --> <script nonce="gyUsMSbyeg0LvDnlgzHqDw=="> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); function glueCookieNotificationBarLoaded() { (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'}); var firstScript=d.getElementsByTagName(s)[0], dl=l!='dataLayer'?'&l='+l:''; var script = d.createElement(s); script.async = true; var url = 'https://www.googletagmanager.com/gtm.js?id='+i+dl; if (self.trustedTypes && self.trustedTypes.createPolicy) { var policy = self.trustedTypes.createPolicy('gtm-load-fix', { createScriptURL: function(_ignored) { return url; } }); script.src = policy.createScriptURL('_ignored'); } else { script.src = url; } firstScript.parentNode.insertBefore(script, firstScript); })(window,document,'script','dataLayer','GTM-MXWLX3PF'); } </script> </div> <div id="cookieConsentContainer"></div> </body> </html>