Crea APK gratis

API del bridge JavaScript

Facebook, eventi Meta e Firebase Analytics

Facebook Login, Meta App Events e Firebase Analytics con le chiavi del creatore, impostate nella build. Analytics non raccoglie nulla finché l'utente non ha dato il consenso.

AppMint.analytics helper#

AppMint.analytics — one event to Firebase and Meta

Esempio

Registra un evento su ogni servizio di analytics collegato dalla build: Firebase Analytics (il tuo google-services.json) e Meta App Events. I nomi vengono ripuliti secondo le regole di ciascun servizio e la risposta indica cosa è stato inviato.

Restituisce: log(name, params) → {ok, providers: {firebase?, meta?}}, ciascuno {ok, name, dropped} oppure {ok: false, error}. setUserId(id), setUserProperty(name, value), screenView(name, class), setEnabled(on) → Promise; providers() → {firebase, meta}. Richiede: passaggio Integrazione → Firebase Analytics (carica google-services.json nella scheda Push) e/o Meta App Events.

if (window.AppMint && AppMint.analytics) {
  AppMint.analytics.setUserId(currentUser.id);
  AppMint.analytics.setUserProperty('plan', 'pro');
  var r = await AppMint.analytics.log('add_to_cart', { item_id: 'sku-42', value: 19.99, currency: 'USD' });
  if (!r.ok) console.warn('not logged', r.providers);   // e.g. {firebase: {ok:false, error:'no_consent'}}
}

// Your own consent screen: nothing is collected while this is off (persisted).
document.getElementById('optOut').onchange = (e) => AppMint.analytics.setEnabled(!e.target.checked);

Accesso e disconnessione mantengono allineato l'id utente:

async function onAuthChange(user) {
  if (!(window.AppMint && AppMint.analytics)) return;
  if (user) {
    await AppMint.analytics.setUserId(user.id);
    await AppMint.analytics.setUserProperty('country', user.country);
  } else {
    await AppMint.analytics.setUserId('');           // clears it
  }
}

Verifica quali servizi sono collegati prima di farci affidamento:

if (window.AppMint && AppMint.analytics) {
  const p = await AppMint.analytics.providers();     // { firebase, meta }
  if (!p.firebase && !p.meta) console.warn('no analytics service is connected in this build');
  await AppMint.analytics.screenView('Settings', 'SettingsPage');
  const r = await AppMint.analytics.log('first_open_tip', { shown: true });
  if (!r.ok) console.warn('not logged', r.providers);
}

Note: Consenso: quando l'app mostra annunci, il modulo di consenso di Google decide anche per analytics: non viene raccolto nulla finché non c'è una risposta e, dove si applica il GDPR, lo scopo 1 deve essere concesso; setEnabled(false) della pagina prevale sempre. Finché la raccolta è disattivata, le chiamate rispondono no_consent (nulla viene messo in coda). Nomi Firebase: lettere, cifre e _, fino a 40 caratteri, al massimo 25 parametri, valori stringa fino a 100 caratteri; i nomi riservati (first_open, session_start, firebase_…, google_…, ga_…) rispondono reserved_name / reserved_prefix. params.value (un numero) diventa il value-to-sum di Meta. Con Registra una visualizzazione schermata a ogni cambio di pagina attivo, i cambi di route registrano screen_view automaticamente. Errori: not_configured, missing_google_app_id, params_not_json, invalid_name.

AppMint.facebook helper#

AppMint.facebook — Facebook Login and Meta App Events

Esempio

«Continua con Facebook» sulla TUA app Facebook. L'accesso apre Facebook in una scheda del browser (Custom Tab): usa l'accesso a facebook.com di quel browser, NON l'app Facebook, e torna all'app quando l'utente conferma. Registra anche i Meta App Events quando li hai attivati.

Restituisce: login(permissions) → una Promise che si risolve sempre: {ok: true, accessToken, userId, expires, grantedPermissions, declinedPermissions} oppure {ok: false, cancelled?, error}. getAccessToken() → lo stesso oggetto token, oppure null quando non hai effettuato l'accesso. logEvent(name, valueToSum, params) → {ok, name, dropped} (messo in coda e inviato a gruppi) oppure {ok: false, error}. Richiede: il passaggio Integrazione della build → Facebook Login con il tuo Facebook App ID e Client Token (e Meta App Events per logEvent).

Accedi, poi usa il token con il tuo backend:

async function facebookSignIn() {
  if (!(window.AppMint && AppMint.facebook)) { alert('Open this page in the app'); return; }
  var r = await AppMint.facebook.login(['public_profile', 'email']);
  if (!r.ok) {
    if (r.cancelled) return;                          // the user backed out
    alert('Facebook sign-in failed: ' + (r.message || r.error));
    return;
  }
  // Firebase: firebase.auth().signInWithCredential(firebase.auth.FacebookAuthProvider.credential(r.accessToken))
  await fetch('/api/login/facebook', { method: 'POST', body: JSON.stringify({ token: r.accessToken }) });
  console.log('Signed in as', r.userId, 'until', new Date(r.expires));
}

var existing = AppMint.facebook.getAccessToken();   // null when signed out
if (existing) showSignedIn(existing.userId);

document.getElementById('logout').onclick = () => AppMint.facebook.logout();

Meta App Events:

AppMint.facebook.logEvent('fb_mobile_purchase', 9.99, { fb_currency: 'USD', fb_content_id: 'sku-42' });
AppMint.facebook.logEvent('Level Complete', null, { level: 3 });

Mostra il pulsante Facebook solo dentro l'app e gestisci una configurazione mancante:

const fb = window.AppMint && AppMint.facebook;
document.getElementById('fb-button').hidden = !fb;
if (fb) {
  document.getElementById('fb-button').onclick = async function () {
    const r = await fb.login(['public_profile']);
    if (r.ok || r.cancelled) return;
    if (r.error === 'not_configured') alert('Facebook sign-in is not set up in this build');
    else if (r.error === 'busy') console.log('a login is already open');
    else alert('Facebook sign-in failed: ' + (r.message || r.error));
  };
}

Note: Facebook Developers → la tua app → Facebook Login → Impostazioni → URI di reindirizzamento OAuth validi: aggiungi https://freewebtoapk.com/fb-return/ (la procedura guidata ha un pulsante Copia). Non serve nessun hash della chiave né configurazione della piattaforma Android. Il token viene verificato con Facebook (deve appartenere al tuo App ID) prima che la promise si risolva. Se Android ha chiuso l'app mentre l'utente era nel browser, il risultato non viene consegnato a una promise: il token viene memorizzato e getAccessToken() lo restituisce all'avvio della pagina. Errori: not_configured, busy (un accesso è già aperto), cancelled (anche quando l'utente chiude la scheda), state_mismatch, wrong_app, failed, no_token, foreign_origin (una pagina che non è quella dell'app). Gli App Events (inviati dall'app all'API App Events di Facebook con il tuo client token) partono solo dopo il consenso (vedi AppMint.analytics) e fino ad allora rispondono no_consent. L'accesso web tramite i reindirizzamenti di Supabase o Firebase continua a funzionare come prima.

analyticsLogEvent bridge#

window.WebToApk.analyticsLogEvent(name: String, paramsJson: String): String

Evento Firebase; il nome viene ripulito secondo le regole di Firebase. Restituisce {ok, name, dropped} oppure {ok:false, error}.

Esempio

I metodi grezzi di Firebase Analytics dietro a AppMint.analytics: preferisci il wrapper. Ognuno restituisce la propria risposta come testo JSON: {ok, name, dropped} oppure {ok: false, error}.

Restituisce: testo JSON (analyticsSetEnabled non restituisce nulla). Richiede: passaggio Integrazione → Firebase Analytics, con il tuo google-services.json caricato nella scheda Notifiche push.

var r = JSON.parse(WebToApk.analyticsLogEvent('share', JSON.stringify({ method: 'whatsapp', content_type: 'post' })));
if (!r.ok) console.warn(r.error);                        // 'no_consent', 'reserved_name', …
WebToApk.analyticsLogScreenView('/checkout', 'CheckoutPage');
WebToApk.analyticsSetUserId('user-123');                 // '' clears it
WebToApk.analyticsSetUserProperty('favorite_food', 'pizza');
WebToApk.analyticsSetEnabled(false);                     // stops every analytics provider

Rileva la funzionalità, poi registra un acquisto e la visualizzazione di una schermata:

if (window.WebToApk && WebToApk.analyticsLogEvent) {
  WebToApk.analyticsLogScreenView(location.pathname, 'ProductPage');
  document.getElementById('buy').onclick = function () {
    WebToApk.analyticsLogEvent('purchase', JSON.stringify({ value: 19.99, currency: 'USD', transaction_id: orderId }));
  };
}

Gestisci un evento rifiutato e un interruttore del consenso:

function track(name, params) {
  if (!(window.WebToApk && WebToApk.analyticsLogEvent)) return;      // browser, or option off
  const r = JSON.parse(WebToApk.analyticsLogEvent(name, JSON.stringify(params || {})));
  if (!r.ok) console.warn('analytics dropped', name, r.error);       // 'no_consent', 'invalid_name', ...
}

document.getElementById('analytics-toggle').onchange = function (e) {
  WebToApk.analyticsSetEnabled(e.target.checked);
};
track('tutorial_complete', { step_count: 5 });

Note: analyticsSetEnabled è l'interruttore di consenso della pagina per Firebase e Meta App Events insieme; vedi AppMint.analytics per le regole sul consenso.

analyticsLogScreenView bridge#

window.WebToApk.analyticsLogScreenView(screenName: String, screenClass: String): String

screen_view di Firebase per [screenName] (ad es. il percorso della route).

Esempio

Documentato insieme a WebToApk.analyticsLogEvent - l'esempio lì mostra anche questo.

I metodi grezzi di Firebase Analytics dietro a AppMint.analytics: preferisci il wrapper. Ognuno restituisce la propria risposta come testo JSON: {ok, name, dropped} oppure {ok: false, error}.

Restituisce: testo JSON (analyticsSetEnabled non restituisce nulla). Richiede: passaggio Integrazione → Firebase Analytics, con il tuo google-services.json caricato nella scheda Notifiche push.

var r = JSON.parse(WebToApk.analyticsLogEvent('share', JSON.stringify({ method: 'whatsapp', content_type: 'post' })));
if (!r.ok) console.warn(r.error);                        // 'no_consent', 'reserved_name', …
WebToApk.analyticsLogScreenView('/checkout', 'CheckoutPage');
WebToApk.analyticsSetUserId('user-123');                 // '' clears it
WebToApk.analyticsSetUserProperty('favorite_food', 'pizza');
WebToApk.analyticsSetEnabled(false);                     // stops every analytics provider

Rileva la funzionalità, poi registra un acquisto e la visualizzazione di una schermata:

if (window.WebToApk && WebToApk.analyticsLogEvent) {
  WebToApk.analyticsLogScreenView(location.pathname, 'ProductPage');
  document.getElementById('buy').onclick = function () {
    WebToApk.analyticsLogEvent('purchase', JSON.stringify({ value: 19.99, currency: 'USD', transaction_id: orderId }));
  };
}

Gestisci un evento rifiutato e un interruttore del consenso:

function track(name, params) {
  if (!(window.WebToApk && WebToApk.analyticsLogEvent)) return;      // browser, or option off
  const r = JSON.parse(WebToApk.analyticsLogEvent(name, JSON.stringify(params || {})));
  if (!r.ok) console.warn('analytics dropped', name, r.error);       // 'no_consent', 'invalid_name', ...
}

document.getElementById('analytics-toggle').onchange = function (e) {
  WebToApk.analyticsSetEnabled(e.target.checked);
};
track('tutorial_complete', { step_count: 5 });

Note: analyticsSetEnabled è l'interruttore di consenso della pagina per Firebase e Meta App Events insieme; vedi AppMint.analytics per le regole sul consenso.

analyticsSetEnabled bridge#

window.WebToApk.analyticsSetEnabled(enabled: Boolean)

L'interruttore di analytics della pagina per ogni provider; viene memorizzato.

Esempio

Documentato insieme a WebToApk.analyticsLogEvent - l'esempio lì mostra anche questo.

I metodi grezzi di Firebase Analytics dietro a AppMint.analytics: preferisci il wrapper. Ognuno restituisce la propria risposta come testo JSON: {ok, name, dropped} oppure {ok: false, error}.

Restituisce: testo JSON (analyticsSetEnabled non restituisce nulla). Richiede: passaggio Integrazione → Firebase Analytics, con il tuo google-services.json caricato nella scheda Notifiche push.

var r = JSON.parse(WebToApk.analyticsLogEvent('share', JSON.stringify({ method: 'whatsapp', content_type: 'post' })));
if (!r.ok) console.warn(r.error);                        // 'no_consent', 'reserved_name', …
WebToApk.analyticsLogScreenView('/checkout', 'CheckoutPage');
WebToApk.analyticsSetUserId('user-123');                 // '' clears it
WebToApk.analyticsSetUserProperty('favorite_food', 'pizza');
WebToApk.analyticsSetEnabled(false);                     // stops every analytics provider

Rileva la funzionalità, poi registra un acquisto e la visualizzazione di una schermata:

if (window.WebToApk && WebToApk.analyticsLogEvent) {
  WebToApk.analyticsLogScreenView(location.pathname, 'ProductPage');
  document.getElementById('buy').onclick = function () {
    WebToApk.analyticsLogEvent('purchase', JSON.stringify({ value: 19.99, currency: 'USD', transaction_id: orderId }));
  };
}

Gestisci un evento rifiutato e un interruttore del consenso:

function track(name, params) {
  if (!(window.WebToApk && WebToApk.analyticsLogEvent)) return;      // browser, or option off
  const r = JSON.parse(WebToApk.analyticsLogEvent(name, JSON.stringify(params || {})));
  if (!r.ok) console.warn('analytics dropped', name, r.error);       // 'no_consent', 'invalid_name', ...
}

document.getElementById('analytics-toggle').onchange = function (e) {
  WebToApk.analyticsSetEnabled(e.target.checked);
};
track('tutorial_complete', { step_count: 5 });

Note: analyticsSetEnabled è l'interruttore di consenso della pagina per Firebase e Meta App Events insieme; vedi AppMint.analytics per le regole sul consenso.

analyticsSetUserId bridge#

window.WebToApk.analyticsSetUserId(userId: String): String

Id utente Firebase ("" lo cancella).

Esempio

Documentato insieme a WebToApk.analyticsLogEvent - l'esempio lì mostra anche questo.

I metodi grezzi di Firebase Analytics dietro a AppMint.analytics: preferisci il wrapper. Ognuno restituisce la propria risposta come testo JSON: {ok, name, dropped} oppure {ok: false, error}.

Restituisce: testo JSON (analyticsSetEnabled non restituisce nulla). Richiede: passaggio Integrazione → Firebase Analytics, con il tuo google-services.json caricato nella scheda Notifiche push.

var r = JSON.parse(WebToApk.analyticsLogEvent('share', JSON.stringify({ method: 'whatsapp', content_type: 'post' })));
if (!r.ok) console.warn(r.error);                        // 'no_consent', 'reserved_name', …
WebToApk.analyticsLogScreenView('/checkout', 'CheckoutPage');
WebToApk.analyticsSetUserId('user-123');                 // '' clears it
WebToApk.analyticsSetUserProperty('favorite_food', 'pizza');
WebToApk.analyticsSetEnabled(false);                     // stops every analytics provider

Rileva la funzionalità, poi registra un acquisto e la visualizzazione di una schermata:

if (window.WebToApk && WebToApk.analyticsLogEvent) {
  WebToApk.analyticsLogScreenView(location.pathname, 'ProductPage');
  document.getElementById('buy').onclick = function () {
    WebToApk.analyticsLogEvent('purchase', JSON.stringify({ value: 19.99, currency: 'USD', transaction_id: orderId }));
  };
}

Gestisci un evento rifiutato e un interruttore del consenso:

function track(name, params) {
  if (!(window.WebToApk && WebToApk.analyticsLogEvent)) return;      // browser, or option off
  const r = JSON.parse(WebToApk.analyticsLogEvent(name, JSON.stringify(params || {})));
  if (!r.ok) console.warn('analytics dropped', name, r.error);       // 'no_consent', 'invalid_name', ...
}

document.getElementById('analytics-toggle').onchange = function (e) {
  WebToApk.analyticsSetEnabled(e.target.checked);
};
track('tutorial_complete', { step_count: 5 });

Note: analyticsSetEnabled è l'interruttore di consenso della pagina per Firebase e Meta App Events insieme; vedi AppMint.analytics per le regole sul consenso.

analyticsSetUserProperty bridge#

window.WebToApk.analyticsSetUserProperty(name: String, value: String): String

Proprietà utente Firebase (nome fino a 24 caratteri, valore fino a 36; "" la cancella).

Esempio

Documentato insieme a WebToApk.analyticsLogEvent - l'esempio lì mostra anche questo.

I metodi grezzi di Firebase Analytics dietro a AppMint.analytics: preferisci il wrapper. Ognuno restituisce la propria risposta come testo JSON: {ok, name, dropped} oppure {ok: false, error}.

Restituisce: testo JSON (analyticsSetEnabled non restituisce nulla). Richiede: passaggio Integrazione → Firebase Analytics, con il tuo google-services.json caricato nella scheda Notifiche push.

var r = JSON.parse(WebToApk.analyticsLogEvent('share', JSON.stringify({ method: 'whatsapp', content_type: 'post' })));
if (!r.ok) console.warn(r.error);                        // 'no_consent', 'reserved_name', …
WebToApk.analyticsLogScreenView('/checkout', 'CheckoutPage');
WebToApk.analyticsSetUserId('user-123');                 // '' clears it
WebToApk.analyticsSetUserProperty('favorite_food', 'pizza');
WebToApk.analyticsSetEnabled(false);                     // stops every analytics provider

Rileva la funzionalità, poi registra un acquisto e la visualizzazione di una schermata:

if (window.WebToApk && WebToApk.analyticsLogEvent) {
  WebToApk.analyticsLogScreenView(location.pathname, 'ProductPage');
  document.getElementById('buy').onclick = function () {
    WebToApk.analyticsLogEvent('purchase', JSON.stringify({ value: 19.99, currency: 'USD', transaction_id: orderId }));
  };
}

Gestisci un evento rifiutato e un interruttore del consenso:

function track(name, params) {
  if (!(window.WebToApk && WebToApk.analyticsLogEvent)) return;      // browser, or option off
  const r = JSON.parse(WebToApk.analyticsLogEvent(name, JSON.stringify(params || {})));
  if (!r.ok) console.warn('analytics dropped', name, r.error);       // 'no_consent', 'invalid_name', ...
}

document.getElementById('analytics-toggle').onchange = function (e) {
  WebToApk.analyticsSetEnabled(e.target.checked);
};
track('tutorial_complete', { step_count: 5 });

Note: analyticsSetEnabled è l'interruttore di consenso della pagina per Firebase e Meta App Events insieme; vedi AppMint.analytics per le regole sul consenso.

facebookLogEvent bridge#

window.WebToApk.facebookLogEvent(name: String, valueToSum: String, paramsJson: String): String

Evento Meta App Event; [valueToSum] un numero come testo oppure ""; [paramsJson] un oggetto JSON piatto. Restituisce {ok, name, dropped} oppure {ok:false, error}.

Esempio

Documentato insieme a WebToApk.facebookLogin - l'esempio lì mostra anche questo.

I metodi grezzi dietro a AppMint.facebook: preferisci il wrapper basato su promise. Creati con il tuo Facebook App ID + Client Token (passaggio Integrazione); senza di essi ogni chiamata risponde not_configured.

Restituisce: facebookLogin(permissionsCsv, callbackId) risolve window.__appmintReplies[callbackId]; con un callbackId vuoto la risposta arriva come evento appmint:facebook-login. getFacebookAccessToken() restituisce il JSON del token oppure "". facebookLogEvent(name, valueToSum, paramsJson) restituisce {ok, name, dropped} come testo JSON (valueToSum è un numero come testo, oppure ""). Richiede: Facebook Login attivato nella build.

window.addEventListener('appmint:facebook-login', (e) => {
  if (e.detail.ok) console.log('token', e.detail.accessToken);
  else if (!e.detail.cancelled) console.warn(e.detail.error);
});
WebToApk.facebookLogin('public_profile,email', '');

var t = WebToApk.getFacebookAccessToken();          // '' when signed out
var logged = JSON.parse(WebToApk.facebookLogEvent('Subscribe', '4.99', JSON.stringify({ plan: 'monthly' })));
WebToApk.facebookLogout();

Nascondi il pulsante quando Facebook Login non è configurato in questa build:

var btn = document.getElementById('fb-login');
btn.hidden = !(window.WebToApk && WebToApk.facebookLogin);

btn.addEventListener('click', function () {
  window.addEventListener('appmint:facebook-login', function onLogin(e) {
    window.removeEventListener('appmint:facebook-login', onLogin);
    if (e.detail.ok) showProfile(e.detail.accessToken);
    else if (e.detail.error === 'not_configured') btn.hidden = true;   // built without the Facebook App ID
  });
  WebToApk.facebookLogin('public_profile', '');
});

Registra un evento di acquisto e disconnettiti:

function trackPurchase(amount, currency) {
  if (!(window.WebToApk && WebToApk.facebookLogEvent)) return;
  var r = JSON.parse(WebToApk.facebookLogEvent('Purchase', String(amount), JSON.stringify({ currency: currency })));
  if (!r.ok) console.warn('event not logged');
}

document.getElementById('fb-signout').addEventListener('click', function () {
  if (window.WebToApk && WebToApk.facebookLogout) WebToApk.facebookLogout();
  showSignedOut();
});

Note: Implementato in FacebookBridge.kt senza alcun SDK di Facebook: l'accesso è il flusso web manuale di Facebook in una scheda del browser, gli App Events vanno all'API Graph App Events di Facebook.

facebookLogin bridge#

window.WebToApk.facebookLogin(permissionsCsv: String, callbackId: String)

Accesso Facebook nativo; [permissionsCsv] ad es. "public_profile,email". Risolve [callbackId], oppure genera `appmint:facebook-login` quando è vuoto.

Esempio

I metodi grezzi dietro a AppMint.facebook: preferisci il wrapper basato su promise. Creati con il tuo Facebook App ID + Client Token (passaggio Integrazione); senza di essi ogni chiamata risponde not_configured.

Restituisce: facebookLogin(permissionsCsv, callbackId) risolve window.__appmintReplies[callbackId]; con un callbackId vuoto la risposta arriva come evento appmint:facebook-login. getFacebookAccessToken() restituisce il JSON del token oppure "". facebookLogEvent(name, valueToSum, paramsJson) restituisce {ok, name, dropped} come testo JSON (valueToSum è un numero come testo, oppure ""). Richiede: Facebook Login attivato nella build.

window.addEventListener('appmint:facebook-login', (e) => {
  if (e.detail.ok) console.log('token', e.detail.accessToken);
  else if (!e.detail.cancelled) console.warn(e.detail.error);
});
WebToApk.facebookLogin('public_profile,email', '');

var t = WebToApk.getFacebookAccessToken();          // '' when signed out
var logged = JSON.parse(WebToApk.facebookLogEvent('Subscribe', '4.99', JSON.stringify({ plan: 'monthly' })));
WebToApk.facebookLogout();

Nascondi il pulsante quando Facebook Login non è configurato in questa build:

var btn = document.getElementById('fb-login');
btn.hidden = !(window.WebToApk && WebToApk.facebookLogin);

btn.addEventListener('click', function () {
  window.addEventListener('appmint:facebook-login', function onLogin(e) {
    window.removeEventListener('appmint:facebook-login', onLogin);
    if (e.detail.ok) showProfile(e.detail.accessToken);
    else if (e.detail.error === 'not_configured') btn.hidden = true;   // built without the Facebook App ID
  });
  WebToApk.facebookLogin('public_profile', '');
});

Registra un evento di acquisto e disconnettiti:

function trackPurchase(amount, currency) {
  if (!(window.WebToApk && WebToApk.facebookLogEvent)) return;
  var r = JSON.parse(WebToApk.facebookLogEvent('Purchase', String(amount), JSON.stringify({ currency: currency })));
  if (!r.ok) console.warn('event not logged');
}

document.getElementById('fb-signout').addEventListener('click', function () {
  if (window.WebToApk && WebToApk.facebookLogout) WebToApk.facebookLogout();
  showSignedOut();
});

Note: Implementato in FacebookBridge.kt senza alcun SDK di Facebook: l'accesso è il flusso web manuale di Facebook in una scheda del browser, gli App Events vanno all'API Graph App Events di Facebook.

facebookLogout bridge#

window.WebToApk.facebookLogout()

Disconnette l'utente Facebook da questa app (cancella il token di accesso nella cache).

Esempio

Documentato insieme a WebToApk.facebookLogin - l'esempio lì mostra anche questo.

I metodi grezzi dietro a AppMint.facebook: preferisci il wrapper basato su promise. Creati con il tuo Facebook App ID + Client Token (passaggio Integrazione); senza di essi ogni chiamata risponde not_configured.

Restituisce: facebookLogin(permissionsCsv, callbackId) risolve window.__appmintReplies[callbackId]; con un callbackId vuoto la risposta arriva come evento appmint:facebook-login. getFacebookAccessToken() restituisce il JSON del token oppure "". facebookLogEvent(name, valueToSum, paramsJson) restituisce {ok, name, dropped} come testo JSON (valueToSum è un numero come testo, oppure ""). Richiede: Facebook Login attivato nella build.

window.addEventListener('appmint:facebook-login', (e) => {
  if (e.detail.ok) console.log('token', e.detail.accessToken);
  else if (!e.detail.cancelled) console.warn(e.detail.error);
});
WebToApk.facebookLogin('public_profile,email', '');

var t = WebToApk.getFacebookAccessToken();          // '' when signed out
var logged = JSON.parse(WebToApk.facebookLogEvent('Subscribe', '4.99', JSON.stringify({ plan: 'monthly' })));
WebToApk.facebookLogout();

Nascondi il pulsante quando Facebook Login non è configurato in questa build:

var btn = document.getElementById('fb-login');
btn.hidden = !(window.WebToApk && WebToApk.facebookLogin);

btn.addEventListener('click', function () {
  window.addEventListener('appmint:facebook-login', function onLogin(e) {
    window.removeEventListener('appmint:facebook-login', onLogin);
    if (e.detail.ok) showProfile(e.detail.accessToken);
    else if (e.detail.error === 'not_configured') btn.hidden = true;   // built without the Facebook App ID
  });
  WebToApk.facebookLogin('public_profile', '');
});

Registra un evento di acquisto e disconnettiti:

function trackPurchase(amount, currency) {
  if (!(window.WebToApk && WebToApk.facebookLogEvent)) return;
  var r = JSON.parse(WebToApk.facebookLogEvent('Purchase', String(amount), JSON.stringify({ currency: currency })));
  if (!r.ok) console.warn('event not logged');
}

document.getElementById('fb-signout').addEventListener('click', function () {
  if (window.WebToApk && WebToApk.facebookLogout) WebToApk.facebookLogout();
  showSignedOut();
});

Note: Implementato in FacebookBridge.kt senza alcun SDK di Facebook: l'accesso è il flusso web manuale di Facebook in una scheda del browser, gli App Events vanno all'API Graph App Events di Facebook.

getFacebookAccessToken bridge#

window.WebToApk.getFacebookAccessToken(): String

Il token di accesso Facebook corrente come JSON {accessToken, userId, expires, grantedPermissions, declinedPermissions}, oppure "" quando non hai effettuato l'accesso.

Esempio

Documentato insieme a WebToApk.facebookLogin - l'esempio lì mostra anche questo.

I metodi grezzi dietro a AppMint.facebook: preferisci il wrapper basato su promise. Creati con il tuo Facebook App ID + Client Token (passaggio Integrazione); senza di essi ogni chiamata risponde not_configured.

Restituisce: facebookLogin(permissionsCsv, callbackId) risolve window.__appmintReplies[callbackId]; con un callbackId vuoto la risposta arriva come evento appmint:facebook-login. getFacebookAccessToken() restituisce il JSON del token oppure "". facebookLogEvent(name, valueToSum, paramsJson) restituisce {ok, name, dropped} come testo JSON (valueToSum è un numero come testo, oppure ""). Richiede: Facebook Login attivato nella build.

window.addEventListener('appmint:facebook-login', (e) => {
  if (e.detail.ok) console.log('token', e.detail.accessToken);
  else if (!e.detail.cancelled) console.warn(e.detail.error);
});
WebToApk.facebookLogin('public_profile,email', '');

var t = WebToApk.getFacebookAccessToken();          // '' when signed out
var logged = JSON.parse(WebToApk.facebookLogEvent('Subscribe', '4.99', JSON.stringify({ plan: 'monthly' })));
WebToApk.facebookLogout();

Nascondi il pulsante quando Facebook Login non è configurato in questa build:

var btn = document.getElementById('fb-login');
btn.hidden = !(window.WebToApk && WebToApk.facebookLogin);

btn.addEventListener('click', function () {
  window.addEventListener('appmint:facebook-login', function onLogin(e) {
    window.removeEventListener('appmint:facebook-login', onLogin);
    if (e.detail.ok) showProfile(e.detail.accessToken);
    else if (e.detail.error === 'not_configured') btn.hidden = true;   // built without the Facebook App ID
  });
  WebToApk.facebookLogin('public_profile', '');
});

Registra un evento di acquisto e disconnettiti:

function trackPurchase(amount, currency) {
  if (!(window.WebToApk && WebToApk.facebookLogEvent)) return;
  var r = JSON.parse(WebToApk.facebookLogEvent('Purchase', String(amount), JSON.stringify({ currency: currency })));
  if (!r.ok) console.warn('event not logged');
}

document.getElementById('fb-signout').addEventListener('click', function () {
  if (window.WebToApk && WebToApk.facebookLogout) WebToApk.facebookLogout();
  showSignedOut();
});

Note: Implementato in FacebookBridge.kt senza alcun SDK di Facebook: l'accesso è il flusso web manuale di Facebook in una scheda del browser, gli App Events vanno all'API Graph App Events di Facebook.

Generato dal runtime dell'app e dai suoi file di esempio a ogni build della documentazione. Leggilo in Markdown · Tutte le famiglie.

Verificato rispetto al bridge distribuito il 22/10/2026.