JavaScript API
Free HTML to APK ile oluşturulan uygulamalar window.FreeApp olarak yerel bir köprü ekler. Bunu düz JavaScript'ten, React veya Vue'dan ya da bir oyun motorundan çağırabilirsiniz. Çağrıları korumaya alırsanız sayfanız normal bir tarayıcıda da çalışmaya devam eder.
Başlarken
Köprü, betikleriniz çalıştıktan bir süre sonra hazır olabilir; bu yüzden yerel kurulumu freeappready olayında yapın, window.FreeApp zaten varsa hemen de yapın. Tarayıcı için her zaman bir yedek sağlayın.
function setup() { FreeApp.statusBar('#E2552A'); FreeApp.toast('Hello from Android'); } if (window.FreeApp) setup(); else window.addEventListener('freeappready', setup, { once: true }); document.querySelector('#buzz').onclick = () => window.FreeApp ? FreeApp.vibrate(40) : console.log('Not in the app');
İzin gerektiren çağrılar (kamera, mikrofon, konum, bildirimler) ilk seferde kullanıcıya sorar. Oluşturucunun İzinler adımında ilgili izni açın; şablonlar kodlarının kullandığı izinleri kendiliğinden açar.
Geri bildirim ve arayüz
FreeApp.brightness(level: number): voidBu pencere için 0,0 ile 1,0 arası; negatif değer sistem parlaklığını geri yükler.
FreeApp.fullscreen(on: boolean): voidSistem çubuklarını gizleyin (sürükleyici mod).
FreeApp.keepAwake(on: boolean): voidEkranı açık tutun.
FreeApp.notify(title: string, body?: string): voidAnlık yerel bildirim (Android 13+ sürümünde izin ister).
FreeApp.orientation(value: 'portrait' | 'landscape' | 'sensor_portrait' | 'sensor_landscape' | 'sensor' | 'unspecified'): voidFreeApp.print(): voidSayfayı PDF olarak yazdırın / kaydedin.
FreeApp.scheduleNotification(title: string, body: string, delayMs: number, opts?: {id?: number, url?: string, repeatMs?: number, exact?: boolean}): numberKimliği döndürür.
FreeApp.speak(text: string, lang?: string): voidYerel metinden konuşmaya, 'en-US' gibi dil.
FreeApp.statusBar(hexColor: string): voidÖrn. '#2563EB'.
FreeApp.stopSpeaking(): voidFreeApp.toast(message: string): voidKısa yerel toast mesajı.
FreeApp.vibrate(ms?: number | number[]): voidTek seferlik titreşim (varsayılan 50 ms) veya [kapalı, açık, kapalı, açık…] düzeni.
Kamera ve tarama
FreeApp.camera.capture(opts?: {maxSize?: number, quality?: number, mirror?: boolean}): Promise<{dataUrl, facing}>Çalışan önizlemeden alınan fotoğraf.
FreeApp.camera.start(opts?: {facing?: 'back' | 'front', element?: string | Element /* place the preview over this element */, behind?: boolean /* draw under a transparent page so HTML controls float on top */}): Promise<{facing}>FreeApp.camera.switch(): Promise<{facing}>; FreeApp.camera.torch(on: boolean): boolean; FreeApp.camera.stop(): void; FreeApp.camera.isOpen(): booleanFreeApp.compressImage(dataUrl: string, opts?: {maxSize?: number, quality?: number}): Promise<{dataUrl, width, height, bytes}>Yerel, düşük seviye telefonlarda hızlı.
FreeApp.saveToGallery(dataUrl: string, fileName?: string): Promise<{uri}>Bir görüntüyü Fotoğraflar'a kaydeder.
FreeApp.scanCode(opts?: {formats?: string[] /* e.g. ['QR_CODE','EAN_13','CODE_128'] */, facing?: 'back' | 'front'}): Promise<{text, format}>Fener destekli tam ekran yerel QR / barkod tarayıcı; 'cancelled' ile reddedilir.
FreeApp.torch(on: boolean): booleanEl feneri, flaş yoksa false döndürür.
Konum ve sensörler
FreeApp.address(lat: number, lng: number): Promise<{address, city, country, countryCode, postalCode, street}>FreeApp.compass(cb: (d: {heading: number /* degrees */, pitch: number, roll: number}) => void): (() => void) | nullBir durdurma işlevi döndürür.
FreeApp.location(opts?: {maxAge?: number}): Promise<{lat, lng, accuracy, altitude, speed, provider, time, fromLastKnown}>FreeApp.maps(query: string): voidBir yeri veya "enlem,boylam" değerini harita uygulamasında açın.
FreeApp.sensors.start(type: 'accelerometer' | 'gyroscope' | 'magnetometer' | 'light' | 'proximity' | 'pressure' | 'gravity' | 'linear_acceleration' | 'rotation' | 'humidity' | 'temperature' | 'steps' | 'step_detector', cb: (d: {type, values: number[], x, y, z, accuracy, t}) => void, intervalMs?: number): (() => void) | nullBir durdurma işlevi döndürür, kullanılamıyorsa null.
FreeApp.sensors.stop(type: string): voidFreeApp.watchLocation(cb: (p) => void, opts?: {interval?: number, distance?: number}): () => voidBir durdurma işlevi döndürür.
Cihaz ve uygulama
FreeApp.app(): {packageName, versionName, versionCode, name, firstInstall}FreeApp.battery(): {level: number /* 0-100 */, charging: boolean}FreeApp.biometric(title: string, subtitle?: string): Promise<boolean>Parmak izi / yüz tanıma ile kilit açma.
FreeApp.device(): {manufacturer, model, brand, androidVersion, sdkInt, language, screenWidth, screenHeight, density, isTablet, darkMode}FreeApp.launchUrl(): string | nullUygulamayı açan derin bağlantı.
FreeApp.network(): 'wifi' | 'cellular' | 'ethernet' | 'vpn' | 'other' | 'none' | 'unknown'FreeApp.on('deeplink', (d: {url}) => void): () => voidUygulama çalışırken açılan bağlantılar.
FreeApp.online(): booleanDosyalar, paylaşım ve depolama
FreeApp.copy(text: string): voidPanoya kopyala.
FreeApp.open(url: string): voidHarici tarayıcıda / uygulamada açın.
FreeApp.paste(): stringPano metnini okuyun.
FreeApp.pickFile(opts?: {accept?: string[], multiple?: boolean}): Promise<{name, mime, size, dataUrl}>FreeApp.saveFile(name: string, mime: string, data: string /* base64 or data: URL */ | Blob): Promise<boolean>İndirilenler'e kaydeder; FreeApp.on('saved', d => …) {name, ok, location} verir.
FreeApp.store.get(key: string): any | nullFreeApp.store.set(key: string, value: any): voidKalıcı yerel anahtar/değer deposu (JSON).
NFC
FreeApp.nfc.read(): Promise<{tagId, techs: string[], writable, maxSize, records: Array<{type: "text" | "uri" | "mime" | "unknown", value, mime?, lang?}>}>Bir etiket bekler; FreeApp.nfc.stop() iptal eder.
FreeApp.nfc.status(): 'ready' | 'disabled' | 'unsupported' | 'not_enabled_in_app'FreeApp.nfc.write(records: string | Array<{type: 'text' | 'uri' | 'mime', value: string, mime?: string}>): Promise<{written}>İzinler
FreeApp.hasPermission(name: string): booleanFreeApp.openSettings(): voidBu uygulamanın sistem ayarları sayfasını açar.
FreeApp.permissionStatus(name: 'camera' | 'microphone' | 'location' | 'notifications' | 'activity'): 'granted' | 'prompt' | 'blocked' | 'unavailable'FreeApp.requestPermission(name: 'camera' | 'microphone' | 'location' | 'notifications'): Promise<boolean>FreeApp.requestPermissions(names: string[]): Promise<{[name]: boolean}>Reklamlar
Oluşturucuda AdMob açıkken kullanılabilir. Test modunda Google'ın test reklamları gösterilir.
FreeApp.ads.loadBanner(unit?: string, position?: 'top' | 'bottom'): voidBir banner yükleyip gösterir. Bağımsız değişken verilmezse oluşturucuda ayarlanan birimi ve konumu kullanır.
FreeApp.ads.showBanner(position?) / hideBanner() / isBannerLoaded()Banner'ı gösterin, gizleyin veya kontrol edin.
FreeApp.ads.loadInterstitial(unit?) / showInterstitial() / isInterstitialLoaded()Ekranlar arasında tam ekran reklamlar. Tam ekran reklamlar arasında en az bir aralık uygulanır.
FreeApp.ads.loadRewarded(unit?) / isRewardedLoaded()Ödüllü reklamı önceden yükleyin.
FreeApp.ads.showRewarded(): Promise<{ok, amount, type}>Ödüllü reklam gösterir; kullanıcı ödülü kazandığında tamamlanır, erken kapatırsa reddedilir.
FreeApp.ads.privacyOptionsRequired(): boolean / showPrivacyOptions()Kullanıcıların onay tercihlerini değiştirmesini sağlar (bazı bölgelerde zorunludur).
FreeApp.ads.adapterStatus(): {[network]: {installed, configured, ready, description, latencyMs}}Aracılıkla: hangi iş ortağı ağlarının uygulamanın içinde olduğu ve hangilerinin AdMob hesabınızda kurulduğu.
FreeApp.ads.openAdInspector(): voidTest cihazlarında Google'ın Ad Inspector aracını açar.
FreeApp.ads.on(cb: (event) => void): () => voidinitialized, bannerLoaded, interstitialDismissed veya rewardedFailed gibi reklam olayları. Aboneliği iptal eden bir işlev döndürür.
Reklamları kaldır satın alındığında banner ve tam ekran reklamlar durur ve adFree olayı tetiklenir. Ödüllü reklamlar çalışmaya devam eder, çünkü kullanıcılar onları izlemeyi kendileri seçer.
Uygulama içi satın almalar
Derleyicide Satın almalar açık olduğunda kullanılabilir. Tek seferlik ürünleri, jeton gibi tüketilebilir ürünleri ve abonelikleri kendi Google Play hesabınız üzerinden satın. Ürünleri önce Play Console'da aynı kimliklerle oluşturun. Satın almalar Google Play'den yüklenen bir kopyada çalışır; bu yüzden bir test kanalı ve lisans test kullanıcısıyla test edin.
const billing = window.FreeApp && FreeApp.billing; if (billing && billing.isOwned('pro_unlock')) unlockPro(); // Unlock in the purchase event: it also arrives for purchases finished while the app was closed. billing && billing.on(e => { if (e.event === 'purchase' && e.id === 'pro_unlock') unlockPro(); }); buyButton.onclick = async () => { try { await billing.buy('pro_unlock'); } catch (err) { if (err.code === 'pending') show('Payment pending'); else if (err.code !== 'cancelled') show('Purchase failed'); } };
FreeApp.billing.products(ids: string[]): Promise<Product[]>Ürünleriniz için Google Play'den canlı ayrıntılar: başlık, yerel fiyat, para birimi ve aboneliklerde faturalandırma dönemi ile teklifler. Play'in tanımadığı kimlikler dahil edilmez.
FreeApp.billing.buy(id: string, opts?: {offer?: string}): Promise<Purchase>Google Play'in ödeme ekranını açar. Abonelikte offer bir temel plan veya teklif kimliği seçer. Kodu cancelled, pending, not_found, unavailable, busy, network veya developer_error olan bir hatayla reddedilir.
FreeApp.billing.owned(): string[] / isOwned(id): booleanKullanıcının sahip oldukları, telefonda kayıtlı; bu yüzden anında ve çevrimdışı da yanıt verir. Ücretli özelliklerin kilidini açmak için başlangıçta kullanın.
FreeApp.billing.restore(): Promise<{purchases, owned}>Satın almaları geri yükle düğmesi için kullanıcının sahip olduğu her şeyi Google Play'den yeniden ister.
FreeApp.billing.consume(idOrToken: string): PromiseTek seferlik bir ürünü tüketir, böylece yeniden satın alınabilir. Derleyicide tüketilebilir olarak listelenen ürünler sizin için otomatik tüketilir.
FreeApp.billing.isAdFree(): booleanKullanıcı, derleyicide ayarlanan Reklamları kaldır ürünlerinden birine sahipse true. Uygulama bu durumda banner ve tam ekran reklamları kendiliğinden durdurur.
FreeApp.billing.manageSubscriptions(id?: string): voidGoogle Play'in abonelik ekranını açar; kullanıcılar orada planlarını iptal eder veya değiştirir.
FreeApp.billing.on(cb: (event) => void): () => voidSatın alma olayları: purchase (kilidi burada açın), pending, owned (sahip olunanlar listesi değişti: bir satın alma, iade veya süresi dolan abonelik), failed ve unavailable. Aboneliği iptal eden bir işlev döndürür.
Uyumluluk katmanı
window.AndroidAPI çağıran, diğer HTML-APK araçları için yazılmış sayfalar çalışmaya devam eder: aynı yöntem adları, geri çağırma kimlikleri ve olay adları desteklenir; reklamsız uygulamalarda reklam çağrıları güvenli biçimde hiçbir şey yapmaz.