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.
Claude Code
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.
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.
Passe die Feature-Liste an das an, was du in Config.swift und Config.java eingeschaltet hast.
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.
Klein, framework-unabhängig und die einzige Stelle, die den User-Agent kennt.
// 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.
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.
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);
}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.
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.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.
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.
lighthaptic://, heavyhaptic://, successhaptic://, warninghaptic://, errorhaptic://; mediumhaptic:// gibt es nur auf iOS. Die Docs zeigen einen iframe-Helper, damit der Aufruf keine laufende Navigation abbricht.
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.
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.
| Feature | iOS (Config.swift / Projekt) | Android (Config.java / Projekt) |
|---|---|---|
| Push (OneSignal) | kPushEnabled, oneSignalID; Docs | PUSH_ENABLED, IDs in build.gradle; Docs |
| Biometrie | Face-ID-Nutzungsbeschreibung in der Info.plist; Docs | Keine Einstellung nötig; Docs |
| QR / Barcode | Kamera-Nutzungsbeschreibung; qrcodelinks entscheidet, wo gescannte URLs geöffnet werden; Docs | requireCamera, QR_CODE_URL_OPTIONS; Docs |
| Teilen, Haptik | Nichts zu aktivieren; Docs | Nichts zu aktivieren; Docs |
| Downloads | extentionARY, autodownloader; Docs | downloadableExtension, AUTO_DOWNLOAD_FILES, requireStorage; Docs |
| Geolocation | Standort-Nutzungsbeschreibung in der Info.plist; Docs | requireLocation; Docs |
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.
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.
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.
Nichts Sichtbares. registerpush:// ohne aktiven Push-Dienst hat zum Beispiel keine Wirkung. Aktiviere das Feature zuerst im Wrapper, dann teste den Aufruf.
Gleiches Ergebnis, unterschiedlich viel Arbeit auf deiner Seite. Alle drei kommen mit Genehmigungsgarantie und 24/7 Support von echten Menschen.
$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$349 pro Lizenz, einmaliges Add-on
Kein Mac, kein Xcode, kein Android Studio: Du konfigurierst im Browser, wir bauen beide Apps in der Cloud und übergeben sie an App Store Connect und die Play Console.
So funktioniert der Cloud Builder Kostenlose Demo ausprobieren$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 byWinter-Sale-Preise gültig bis 31. Dezember 2026.
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.