Zum Inhalt springen
WebViewGold Vibe Coding in den App Store
Deutsch
WebViewGold holen

Claude Code

Native Features mit Claude Code und der WebViewGold-JavaScript-Bridge hinzufügen

WebViewGold stellt deiner Web-App native Fähigkeiten als URL-Schemas und ein paar globale JavaScript-Variablen bereit. Das macht sie zur idealen Aufgabe für einen Agenten: Zeig Claude Code die Dokumentation, sag ihm, welche Features du aktiviert hast, und es baut sie in deine bestehenden Komponenten ein. So geht das ohne erfundene API-Namen.

Ab $109 einmalig pro Plattform, oder unser Team erledigt alles ab $698.

  • Genehmigungsgarantie – oder Geld zurück innerhalb von 14 Tagen
  • Kein Programmieren nötig
  • Einmalzahlung, kostenlose Updates
  • 24/7 Support von echten Menschen
  • Made in Germany seit 2014 · ISO 27001

So funktioniert die Bridge

Deine Web-App bittet den Wrapper um etwas, indem sie zu einem Schema navigiert, zum Beispiel window.location.href = "bioauth://". Der Wrapper fängt die Navigation ab, führt die native Aktion aus und meldet sich zurück, entweder durch den Aufruf einer globalen Funktion, die du definiert hast (onBioAuthSuccess()), durch das Injizieren einer globalen Variable (onesignalplayerid, nativePushEnabled, barcodescanresult) oder durch das Laden einer URL (der QR-Scanner öffnet die gescannte URL in der App). Es gibt kein SDK zu installieren und nichts zu bündeln.

Alles ist in einer einzigen maschinenlesbaren Datei dokumentiert: webviewgold.com/llms-full.txt. Sag Claude Code, dass es den passenden Abschnitt lesen soll, bevor es Code schreibt, dann verwendet es die exakten Schema-Namen statt plausibel klingender. Jedes Schema in diesem Artikel wurde gegen diese Datei geprüft.

Der Integrations-Prompt

Passe die Feature-Liste an das an, was du in Config.swift und Config.java eingeschaltet hast.

In Claude Code einfügen
Our web app also runs inside native iOS and Android apps built with WebViewGold. Native features are triggered by navigating to URL schemes and results come back as global JavaScript variables or global callback functions. Before writing any code, fetch https://www.webviewgold.com/llms-full.txt and read the sections for: Push Notifications API, Biometric Authentication API, QR Code Scanner API, App Sharing Dialog API, Haptic Feedback API, File Downloader API, HTML5 Geolocation API. Use only scheme names that appear in that file.

Then implement, in src/lib/native.ts: isNativeApp() (user agent contains the token WebViewGoldApp), callNative(scheme) (sets window.location.href only when isNativeApp() is true, otherwise returns false), and a readInjected(name, timeoutMs) helper that polls for a global variable the wrapper injects.

Wire these features into the existing UI, each behind isNativeApp() with a web fallback:
1. Push: an Enable notifications button that calls registerpush://, a settings row that calls checkNativePushPermissions:// and reads nativePushEnabled, and after login a call to getonesignalplayerid:// that reads onesignalplayerid and saves it to the user profile via our API.
2. Biometrics: a Face ID / fingerprint lock for the /wallet route using bioauth:// and the three callbacks onBioAuthSuccess, onBioAuthFailure(errorCode, errorMessage), onBioAuthUnavailable; on unavailable, fall back to the password re-entry we already have.
3. QR check-in: a Scan button that calls qrcode://; our QR codes contain URLs on our own domain, so handle the /checkin route they open.
4. Share: replace the copy-link button with shareapp://message?=TEXT&url=URL when native, with encodeURIComponent on both values.
5. Haptics: successhaptic:// after a completed order, errorhaptic:// on form validation errors, lighthaptic:// on tab changes. On iOS, use the iframe technique from the documentation so haptics do not interrupt navigation.
6. Downloads: image downloads use savethisimage://?url=IMAGE_URL; PDF links stay normal links.
7. Geolocation: keep navigator.geolocation but show a pre-permission explanation screen the first time.
Report which Config.swift / Config.java options and Info.plist or AndroidManifest entries I must enable for each feature.

Der Helper, auf dem der Agent aufbauen soll

Klein, framework-unabhängig und die einzige Stelle, die den User-Agent kennt.

javascript
// src/lib/native.ts
export function isNativeApp() {
  return typeof navigator !== "undefined" && navigator.userAgent.indexOf("WebViewGoldApp") !== -1;
}

export function callNative(scheme) {
  if (!isNativeApp()) return false;
  window.location.href = scheme;
  return true;
}

// Wait for a variable the wrapper injects, e.g. onesignalplayerid or nativePushEnabled
export function readInjected(name, timeoutMs) {
  return new Promise(function (resolve, reject) {
    var started = Date.now();
    (function check() {
      if (typeof window[name] !== "undefined") return resolve(window[name]);
      if (Date.now() - started > (timeoutMs || 3000)) return reject(new Error(name + " not injected"));
      setTimeout(check, 100);
    })();
  });
}

Ich bin sehr glücklich, dass ich diese App gekauft habe! Extrem einfach und großartige Dokumentation. Ich stand in Kontakt mit dem Kundenservice, sie antworteten sehr schnell und sehr freundlich. Sie lösten meine Frage innerhalb eines Tages. 10/10 würde ich empfehlen.

Nelis Geiger · CodeCanyon

Push: Berechtigung, Status und die Nutzer-ID

Erfordert einen im Wrapper eingeschalteten Push-Dienst (OneSignal über kPushEnabled und oneSignalID in Config.swift, PUSH_ENABLED plus die IDs in build.gradle auf Android). Setze askforpushpermissionatfirstrun (iOS) und requirePush (Android) auf false, damit du den Zeitpunkt des Dialogs selbst bestimmst.

javascript
import { callNative, readInjected } from "./native";

// 1. Ask at the right moment (after onboarding, not on first launch)
export function askForPush() {
  return callNative("registerpush://");
}

// 2. Is push currently allowed? Sets window.nativePushEnabled
export async function isPushEnabled() {
  if (!callNative("checkNativePushPermissions://")) return null;
  return readInjected("nativePushEnabled", 2000);
}

// 3. Store the OneSignal subscription ID on the user so the server can target this device
export async function syncPushId(saveToProfile) {
  if (!callNative("getonesignalplayerid://")) return;
  var id = await readInjected("onesignalplayerid", 3000);
  await saveToProfile(id);
}

// 4. A local reminder in two hours, no push service needed
export function scheduleLocalReminder(title, message, url) {
  var seconds = 2 * 60 * 60;
  callNative("sendlocalpushmsg://push.send?s=" + seconds + "=msg!" + message + "&!#" + title + "&!#" + url);
}

Biometrie: bioauth:// und seine drei Callbacks

Auf iOS braucht das Projekt die Face-ID-Nutzungsbeschreibung in der Info.plist (NSFaceIDUsageDescription); Android nutzt den System-BiometricPrompt und braucht nichts Zusätzliches. Der Wrapper ruft die globalen Funktionen auf, definiere sie also auf window.

javascript
import { callNative } from "./native";

export function requireBiometrics(onPass, onFallback) {
  window.onBioAuthSuccess = function () { onPass(); };
  window.onBioAuthFailure = function (errorCode, errorMessage) {
    console.warn("bioauth failed", errorCode, errorMessage);
    onFallback();
  };
  window.onBioAuthUnavailable = function () { onFallback(); };
  if (!callNative("bioauth://")) onFallback(); // browser: use the password re-entry instead
}

// Security note from the documentation: treat the success callback as a UI gate only.
// Keep sensitive actions behind a server-side session check as well.

Die übrigen Features in je einer Zeile

QR-Code-Scanner

qrcode:// öffnet den nativen Scanner und lädt die gescannte URL in der App, kodiere also URLs auf deiner eigenen Domain. Für Produkt-Barcodes nutzt du barcodescanner:// und liest barcodescanresult aus.

Share Sheet

shareapp://message?=TEXT&url=URL öffnet auf beiden Plattformen den Teilen-Dialog des Systems. Kodiere beide Werte. Auf Android erlaubt die ShareIntent-API zusätzlich, dass andere Apps in deine App teilen.

Haptik

lighthaptic://, heavyhaptic://, successhaptic://, warninghaptic://, errorhaptic://; mediumhaptic:// gibt es nur auf iOS. Die Docs zeigen einen iframe-Helper, damit der Aufruf keine laufende Navigation abbricht.

Downloads

savethisimage://?url=… speichert ein Bild in der Fotomediathek. Links, die auf .pdf, .docx, .xlsx, .mp3 und andere gelistete Endungen enden, werden nativ heruntergeladen; erweitere die Liste über extentionARY (Config.swift) oder downloadableExtension (Config.java), oder aktiviere autodownloader / AUTO_DOWNLOAD_FILES für Content-Disposition-Header.

Geolocation

Normales navigator.geolocation funktioniert; der Wrapper zeigt den nativen Berechtigungsdialog. iOS braucht HTTPS und den Text der Standort-Nutzungsbeschreibung in der Info.plist, Android braucht requireLocation auf true in Config.java samt den Manifest-Einträgen.

Welcher Wrapper-Schalter zu welchem Feature gehört

FeatureiOS (Config.swift / Projekt)Android (Config.java / Projekt)
Push (OneSignal)kPushEnabled, oneSignalID; DocsPUSH_ENABLED, IDs in build.gradle; Docs
BiometrieFace-ID-Nutzungsbeschreibung in der Info.plist; DocsKeine Einstellung nötig; Docs
QR / BarcodeKamera-Nutzungsbeschreibung; qrcodelinks entscheidet, wo gescannte URLs geöffnet werden; DocsrequireCamera, QR_CODE_URL_OPTIONS; Docs
Teilen, HaptikNichts zu aktivieren; DocsNichts zu aktivieren; Docs
DownloadsextentionARY, autodownloader; DocsdownloadableExtension, AUTO_DOWNLOAD_FILES, requireStorage; Docs
GeolocationStandort-Nutzungsbeschreibung in der Info.plist; DocsrequireLocation; Docs

Häufig gestellte Fragen

Braucht Claude Code Internetzugang, um llms-full.txt zu lesen?

Es muss die Datei einmal abrufen. Wenn dein Setup Webzugriff blockiert, lade die Datei ins Repository (zum Beispiel nach docs/webviewgold-llms-full.txt) und verweise in der CLAUDE.md auf diesen Pfad.

Warum die OneSignal-Subscription-ID am Nutzer speichern?

Weil der Server dann einen Push an eine bestimmte Person senden kann (Bestellung verschickt, neue Antwort). Ohne die ID kannst du nur an Segmente broadcasten.

Kann der Agent die Features auch in den WebViewGold-Projekten aktivieren?

Ja, für Werte in Config.swift und Config.java sowie Berechtigungstexte. Signierung und Provisioning lässt du nicht in seine Hände; der Guide zur Projektkonfiguration erklärt die Grenzen.

Was passiert, wenn ich ein Schema für ein ausgeschaltetes Feature aufrufe?

Nichts Sichtbares. registerpush:// ohne aktiven Push-Dienst hat zum Beispiel keine Wirkung. Aktiviere das Feature zuerst im Wrapper, dann teste den Aufruf.

Drei Wege, deine App in die Stores zu bringen

Gleiches Ergebnis, unterschiedlich viel Arbeit auf deiner Seite. Alle drei kommen mit Genehmigungsgarantie und 24/7 Support von echten Menschen.

Selbst machen

$109 pro Plattform, einmalig

Die WebViewGold-Lizenz: ein fertiges Xcode- oder Android-Studio-Projekt. URL einfügen, Name und Icon setzen, Features einschalten, bauen und einreichen. Kostenlose Updates für immer.

Pakete auf der Hauptseite ansehen

Full Service

$698 pro Plattform $798

Schick uns deine URL und dein Icon. Unser Team konfiguriert, baut und liefert deine App innerhalb von 72 Stunden, White-Label, inklusive Quellprojekten. Beide Plattformen für $1,158.

Full-Service-Details Powered by WeSetupYourWebViewApp

Winter-Sale-Preise gültig bis 31. Dezember 2026.

Bereit, deine App zu veröffentlichen?

App Store & Google Play Genehmigungsgarantie – oder Geld zurück innerhalb von 14 Tagen

Lieber abgeben? Full Service: Wir konfigurieren, bauen und liefern innerhalb von 72 Stunden, ab $698 pro Plattform. Fragen? Chatte mit uns – 24/7.

Erstattungen erfolgen zu den in unseren FAQ genannten Bedingungen: eine nicht inhaltsbedingte Ablehnung durch Apple und/oder Google, geltend gemacht innerhalb von 14 Tagen nach dem Kauf.