Ücretsiz HTML to APK
Geliştiriciler

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): void

Bu pencere için 0,0 ile 1,0 arası; negatif değer sistem parlaklığını geri yükler.

FreeApp.fullscreen(on: boolean): void

Sistem çubuklarını gizleyin (sürükleyici mod).

FreeApp.keepAwake(on: boolean): void

Ekranı açık tutun.

FreeApp.notify(title: string, body?: string): void

Anlık yerel bildirim (Android 13+ sürümünde izin ister).

FreeApp.orientation(value: 'portrait' | 'landscape' | 'sensor_portrait' | 'sensor_landscape' | 'sensor' | 'unspecified'): void
FreeApp.print(): void

Sayfayı PDF olarak yazdırın / kaydedin.

FreeApp.scheduleNotification(title: string, body: string, delayMs: number, opts?: {id?: number, url?: string, repeatMs?: number, exact?: boolean}): number

Kimliği döndürür.

FreeApp.speak(text: string, lang?: string): void

Yerel metinden konuşmaya, 'en-US' gibi dil.

FreeApp.statusBar(hexColor: string): void

Örn. '#2563EB'.

FreeApp.stopSpeaking(): void
FreeApp.toast(message: string): void

Kısa yerel toast mesajı.

FreeApp.vibrate(ms?: number | number[]): void

Tek 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(): boolean
FreeApp.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): boolean

El 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) | null

Bir 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): void

Bir 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) | null

Bir durdurma işlevi döndürür, kullanılamıyorsa null.

FreeApp.sensors.stop(type: string): void
FreeApp.watchLocation(cb: (p) => void, opts?: {interval?: number, distance?: number}): () => void

Bir 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 | null

Uygulamayı açan derin bağlantı.

FreeApp.network(): 'wifi' | 'cellular' | 'ethernet' | 'vpn' | 'other' | 'none' | 'unknown'
FreeApp.on('deeplink', (d: {url}) => void): () => void

Uygulama çalışırken açılan bağlantılar.

FreeApp.online(): boolean

Dosyalar, paylaşım ve depolama

FreeApp.copy(text: string): void

Panoya kopyala.

FreeApp.open(url: string): void

Harici tarayıcıda / uygulamada açın.

FreeApp.paste(): string

Pano 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.share(text: string, title?: string): void

Android paylaşım sayfası.

FreeApp.shareFile(fileName: string, mimeType: string, base64OrDataUrl: string): boolean

Gerçek bir dosyayı paylaşın.

FreeApp.store.get(key: string): any | null
FreeApp.store.set(key: string, value: any): void

Kalı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): boolean
FreeApp.openSettings(): void

Bu 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'): void

Bir 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(): void

Test cihazlarında Google'ın Ad Inspector aracını açar.

FreeApp.ads.on(cb: (event) => void): () => void

initialized, 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): boolean

Kullanı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): Promise

Tek 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(): boolean

Kullanı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): void

Google 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): () => void

Satı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.