1<!DOCTYPE HTML><html lang="en" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="google-site-verification" content="0N1oW43-tS6aRD7Xxmlz9K64sn3OlX7tU45pwC0H5IA" /><meta name="facebook-domain-verification" content="" /><meta name="csrf-token" content="054757198510129ed3f5e0d39d0d5776b64958befa408db034b7da30d388d29d"><meta http-equiv="X-UA-Compatible" content="IE=edge"><link rel="apple-touch-icon" sizes="57x57" href="/assets/images/meta/apple-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="/assets/images/meta/apple-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="/assets/images/meta/apple-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="/assets/images/meta/apple-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="/assets/images/meta/apple-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="/assets/images/meta/apple-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="/assets/images/meta/apple-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="/assets/images/meta/apple-icon-152x152.png"><link rel="apple-touch-icon" sizes="180x180" href="/assets/images/meta/apple-icon-180x180.png"><link rel="icon" type="image/png" sizes="192x192" href="/assets/images/meta/android-icon-192x192.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/images/meta/favicon-32x32.png"><link rel="icon" type="image/png" sizes="96x96" href="/assets/images/meta/favicon-96x96.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/images/meta/favicon-16x16.png"><link rel="manifest" href="/assets/images/meta/manifest.json"><meta name="msapplication-TileColor" content="#ffffff"><meta name="msapplication-TileImage" content="/assets/images/meta/ms-icon-144x144.png"><meta name="theme-color" content="#ffffff"><title>Download the app | PubliBike and PubliBike Velospot</title><meta name="description" content="Depending on the region, you use a different app." /><link rel="alternate" hreflang="de" href="https://www.publibike.ch/de/app" /><link rel="canonical" href="https://www.publibike.ch/en/app" /><link rel="alternate" hreflang="en" href="https://www.publibike.ch/en/app" /><link rel="alternate" hreflang="fr" href="https://www.publibike.ch/fr/app" /><link rel="alternate" hreflang="it" href="https://www.publibike.ch/it/app" /><link rel="alternate" hreflang="x-default" href="https://www.publibike.ch/de/app" /><link href="/assets/css/bootstrap.min.css" rel="stylesheet"><link rel="stylesheet" href="/assets/css/flexslider.css"><link rel="stylesheet" href="/assets/css/jquery.fancybox.min.css"><link rel="stylesheet" href="/assets/css/icomoon.css"><link rel="stylesheet" href="/assets/css/bootstrap-icons.css" rel="stylesheet"><link rel="stylesheet" href="/assets/css/custom.css"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap" rel="stylesheet"><link rel="gbfs" type="application/json" href=https://api.publibike.ch/v1/gbfs/v2/gbfs.json /></head><body><header><div class="pb-app-popup" id="pbAppPopup"><div class="pb-app-popup__card"><h2 class="pb-app-popup__title" id="pbPopupTitle">App herunterladen</h2><p class="pb-app-popup__subtitle" id="pbPopupSubtitle">Scanne den Code mit deinem Smartphone.</p><div class="pb-app-popup__qr"><img id="pbPopupQr"� src="https://api.qrserver.com/v1/create-qr-code/?size=200x200&color=522142&data=https%3A%2F%2Fapp.publibike.ch%2F"� alt="QR Code" width="200" height="200"></div><div class="pb-app-popup__badges"><a id="pbPopupIos" href="https://apps.apple.com/app/id6739938966"� target="_blank" rel="noopener"><img src="https://upload.wikimedia.org/wikipedia/commons/3/3c/Download_on_the_App_Store_Badge.svg"� alt="App Store" height="40"></a><a id="pbPopupAndroid" href="https://play.google.com/store/apps/details?id=ch.publibike2.app"� target="_blank" rel="noopener"><img src="https://upload.wikimedia.org/wikipedia/commons/7/78/Google_Play_Store_badge_EN.svg"� alt="Google Play" height="40"></a></div></div></div><style>� .pb-app-popup {� background: #522142;� min-height: 100vh;� display: flex;� align-items: center;� justify-content: center;� padding: 40px 20px;� box-sizing: border-box;� }� .pb-app-popup__card {� background: #ffffff;� padding: 48px 40px;� border-radius: 24px;� text-align: center;� max-width: 400px;� width: 100%;� box-sizing: border-box;� }� .pb-app-popup__title {� color: #522142;� margin: 0 0 10px 0;� font-weight: 800;� font-size: 24px;� font-family: "Frutiger Next", "Frutiger", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;� }� .pb-app-popup__subtitle {� color: #666666;� margin: 0 0 20px 0;� font-size: 15px;� font-family: "Frutiger Next", "Frutiger", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;� }� .pb-app-popup__qr {� width: 180px;� height: 180px;� background: #ffffff;� margin: 25px auto;� border-radius: 16px;� border: 1px solid #eeeeee;� padding: 10px;� box-sizing: border-box;� }� .pb-app-popup__qr img {� width: 100%;� height: auto;� display: block;� }� .pb-app-popup__badges {� display: flex;� gap: 10px;� justify-content: center;� margin-top: 20px;� }� .pb-app-popup__badges a {� display: block;� height: 40px;� }� .pb-app-popup__badges img {� height: 100%;� width: auto;� display: block;� }� </style>
1<script>� (function () {� var TEXTE = {� de: { title: 'App herunterladen',� subtitle: 'Scanne den Code mit deinem Smartphone.',� qr: 'QR-Code zum Herunterladen der App',� ios: 'Im App Store laden', android: 'Bei Google Play laden' },� fr: { title: 'Télécharger l\u2019app',� subtitle: 'Scanne le code avec ton smartphone.',� qr: 'Code QR pour télécharger l\u2019app',� ios: 'Télécharger dans l\u2019App Store', android: 'Disponible sur Google Play' },� it: { title: 'Scarica l\u2019app',� subtitle: 'Scansiona il codice con il tuo smartphone.',� qr: 'Codice QR per scaricare l\u2019app',� ios: 'Scarica su App Store', android: 'Disponibile su Google Play' },� en: { title: 'Download the app',� subtitle: 'Scan the code with your smartphone.',� qr: 'QR code to download the app',� ios: 'Download on the App Store', android: 'Get it on Google Play' }� };� � /* ââ Ziel des QR-Codes ââââââââââââââââââââââââââââââââââââ� Wer auf dem Rechner einen Deep Link anklickt, landet hier. Der� QR-Code soll ihn auf dem Handy an dieselbe Stelle bringen und� nicht bloss auf die Startseite.� � Das Ziel kommt aus einer von drei Quellen, in dieser Reihenfolge:� 1. ?to=/subscription?section=promoCode (ausdrücklich gesetzt)� 2. der Pfad dieser Seite, falls er einem Deep Link entspricht� 3. sonst die Startseite� � Nur bekannte Pfade werden übernommen â sonst liesse sich über� die Adresszeile ein beliebiges Ziel in den Code schmuggeln. */� var APP ='https://app.publibike.ch';� var PFADE = ['/', '/station', '/profile', '/payment', '/subscription',� '/ride-history', '/access-media', '/chat'];� � function zielFinden() {� var hier = new URL(window.location.href);� � var gesetzt = hier.searchParams.get('to');� var roh = gesetzt || (hier.pathname + hier.search);� � /* Als relativen Pfad lesen, damit eine fremde Domain im� Parameter nicht durchkommt. */� var ziel;� try { ziel = new URL(roh, APP); } catch (e) { return APP + '/'; }� if (ziel.origin !== APP) return APP + '/';� � var pfad = ziel.pathname.replace(/\/+$/, '') || '/';� if (PFADE.indexOf(pfad) === -1) return APP + '/';� � /* Beim ausdrücklich gesetzten Ziel dessen Parameter nehmen,� sonst die dieser Seite â abzüglich «to». */� var werte = gesetzt ? ziel.searchParams : hier.searchParams;� werte.delete('to');� var such = werte.toString();� � return APP + pfad + (such ? '?' + such : '');� }� � function qrAdresse(ziel) {� return 'https://api.qrserver.com/v1/create-qr-code/?size=200x200&color=522142'� + '&data=' + encodeURIComponent(ziel);� }� � /* Erste Sprache der Browserliste, die wir kennen. navigator.languages� ist nach Vorliebe sortiert, also gewinnt die oberste passende.� «de-CH» und «de» führen beide zu «de». */� function spracheFinden() {� var liste = (navigator.languages && navigator.languages.length)� ? navigator.languages� : [navigator.language || navigator.userLanguage || ''];� � for (var i = 0; i < liste.length; i++) {� var code = String(liste[i] || '').slice(0, 2).toLowerCase();� if (TEXTE[code]) return code;� }� return 'de';� }� � function setzen() {� var karte = document.getElementById('pbAppPopup');� if (!karte) return false; // Elemente noch nicht da� � var t = TEXTE[spracheFinden()];� � var titel = document.getElementById('pbPopupTitle');� var unter = document.getElementById('pbPopupSubtitle');� var qr = document.getElementById('pbPopupQr');� var ios = document.getElementById('pbPopupIos');� var andr = document.getElementById('pbPopupAndroid');� � if (titel) titel.textContent = t.title;� if (unter) unter.textContent = t.subtitle;� if (qr) {� qr.alt = t.qr;� qr.src = qrAdresse(zielFinden());� }� if (ios) { ios.title = t.ios; ios.setAttribute('aria-label', t.ios);� var i1 = ios.querySelector('img'); if (i1) i1.alt = t.ios; }� if (andr) { andr.title = t.android; andr.setAttribute('aria-label', t.android);� var i2 = andr.querySelector('img'); if (i2) i2.alt = t.android; }� � /* Hilft Vorlesegeräten und der Silbentrennung. */� karte.setAttribute('lang', spracheFinden());� return true;� }� � /* Je nachdem, wo das CMS diesen Block einfügt, laufen wir vor oder� nach dem Markup. Beide Fälle abdecken statt auf einen hoffen. */� if (!setzen()) {� if (document.readyState ==='loading') {� document.addEventListener('DOMContentLoaded', setzen);� } else {� setTimeout(setzen, 0);� }� }� })();� </script>
1</header><main id="content-skip"><div class="width_basic mx-auto"></div></main><footer id="footer-skip"><div class="width_basic mx-auto"></div></footer>
1<script src="/assets/js/jquery.min.js"></script>
1<script src="/assets/js/bootstrap.min.js"></script>
1<script src="/assets/js/jquery.fancybox.min.js"></script>
1<script src="/assets/js/jquery.flexslider.js"></script>
1<script src="/assets/js/svg-inject.js"></script>
1<script src="/assets/js/markerclusterer.min.js"></script>
1<script src="/assets/js/main.js"></script>
1<script src="/assets/js/shop.js"></script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.