API du pont JavaScript
Facebook, événements Meta et Firebase Analytics
Facebook Login, Meta App Events et Firebase Analytics avec les propres clés du créateur, définies lors de la compilation. Analytics ne collecte rien tant que l'utilisateur n'a pas donné son consentement.
AppMint.analytics assistant#
AppMint.analytics — one event to Firebase and Meta
Exemple
Consigne un événement dans chaque service d'analyse connecté par la compilation : Firebase Analytics (votre propre google-services.json) et Meta App Events. Les noms sont nettoyés selon les règles de chaque service et la réponse indique ce qui a été envoyé.
Renvoie : log(name, params) → {ok, providers: {firebase?, meta?}}, chacun {ok, name, dropped} ou {ok: false, error}. setUserId(id), setUserProperty(name, value), screenView(name, class), setEnabled(on) → Promises ; providers() → {firebase, meta}. Nécessite : étape Integrate → Firebase Analytics (envoyez google-services.json dans la carte Push) et/ou 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);La connexion et la déconnexion maintiennent l'identifiant utilisateur à jour :
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
}
}Voir quels services sont connectés avant de s'y fier :
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);
}Remarques : Consentement : quand l'application affiche des publicités, le formulaire de consentement de Google décide aussi pour l'analyse - rien n'est collecté avant qu'il ait une réponse, et là où le RGPD s'applique, la finalité 1 doit être accordée ; le setEnabled(false) de la page l'emporte toujours. Tant que la collecte est désactivée, les appels répondent no_consent (rien n'est mis en file). Noms Firebase : lettres, chiffres et _, jusqu'à 40 caractères, au plus 25 paramètres, valeurs de chaîne jusqu'à 100 caractères ; les noms réservés (first_open, session_start, firebase_…, google_…, ga_…) répondent reserved_name / reserved_prefix. params.value (un nombre) devient la value-to-sum de Meta. Avec Log a screen view for every page change activé, les changements de route consignent screen_view automatiquement. Erreurs : not_configured, missing_google_app_id, params_not_json, invalid_name.
AppMint.facebook assistant#
AppMint.facebook — Facebook Login and Meta App Events
Exemple
« Continuer avec Facebook » sur VOTRE propre application Facebook. La connexion ouvre Facebook dans un onglet du navigateur (Custom Tab) : elle utilise la connexion facebook.com de ce navigateur, PAS l'application Facebook, et revient à l'application quand l'utilisateur confirme. Consigne aussi les Meta App Events si vous les avez activés.
Renvoie : login(permissions) → une Promise qui se résout toujours : {ok: true, accessToken, userId, expires, grantedPermissions, declinedPermissions} ou {ok: false, cancelled?, error}. getAccessToken() → le même objet jeton, ou null quand déconnecté. logEvent(name, valueToSum, params) → {ok, name, dropped} (mis en file et envoyé par lots) ou {ok: false, error}. Nécessite : l'étape Integrate de la compilation → Facebook Login avec votre Facebook App ID et votre Client Token (et Meta App Events pour logEvent).
Se connecter, puis utiliser le jeton avec votre 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 });Afficher le bouton Facebook uniquement dans l'application, et gérer une configuration manquante :
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));
};
}Remarques : Facebook Developers → votre application → Facebook Login → Settings → Valid OAuth Redirect URIs : ajoutez https://freewebtoapk.com/fb-return/ (l'assistant a un bouton Copier). Aucune empreinte de clé ni configuration de plateforme Android n'est nécessaire. Le jeton est vérifié auprès de Facebook (il doit appartenir à votre App ID) avant que la promesse ne soit résolue. Si Android a fermé l'application pendant que l'utilisateur était dans le navigateur, le résultat n'est pas remis à une promesse - le jeton est stocké et getAccessToken() le renvoie au démarrage de la page. Erreurs : not_configured, busy (une connexion est déjà ouverte), cancelled (aussi quand l'utilisateur ferme l'onglet), state_mismatch, wrong_app, failed, no_token, foreign_origin (une page qui n'est pas celle de l'application). Les App Events (envoyés par l'application à l'API App Events de Facebook avec votre client token) ne démarrent qu'après consentement (voir AppMint.analytics) et répondent no_consent d'ici là. La connexion web via les redirections Supabase ou Firebase continue de fonctionner comme avant.
analyticsLogEvent pont#
window.WebToApk.analyticsLogEvent(name: String, paramsJson: String): String
Événement Firebase ; le nom est nettoyé selon les règles de Firebase. Renvoie {ok, name, dropped} ou {ok:false, error}.
Exemple
Les méthodes Firebase Analytics brutes derrière AppMint.analytics - préférez l'enveloppe. Chacune renvoie sa réponse sous forme de texte JSON : {ok, name, dropped} ou {ok: false, error}.
Renvoie : du texte JSON (analyticsSetEnabled ne renvoie rien). Nécessite : étape Integrate → Firebase Analytics, avec votre google-services.json envoyé dans la carte Push Notifications.
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 providerDétecter la fonctionnalité, puis consigner un achat et un affichage d'écran :
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 }));
};
}Gérer un événement refusé et un interrupteur de consentement :
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 });Remarques : analyticsSetEnabled est l'interrupteur de consentement de la page pour Firebase et Meta App Events ensemble ; voir AppMint.analytics pour les règles de consentement.
analyticsLogScreenView pont#
window.WebToApk.analyticsLogScreenView(screenName: String, screenClass: String): String
screen_view Firebase pour [screenName] (par ex. le chemin de la route).
Exemple
Documenté avec WebToApk.analyticsLogEvent : l'exemple qui s'y trouve illustre aussi celui-ci.
Les méthodes Firebase Analytics brutes derrière AppMint.analytics - préférez l'enveloppe. Chacune renvoie sa réponse sous forme de texte JSON : {ok, name, dropped} ou {ok: false, error}.
Renvoie : du texte JSON (analyticsSetEnabled ne renvoie rien). Nécessite : étape Integrate → Firebase Analytics, avec votre google-services.json envoyé dans la carte Push Notifications.
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 providerDétecter la fonctionnalité, puis consigner un achat et un affichage d'écran :
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 }));
};
}Gérer un événement refusé et un interrupteur de consentement :
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 });Remarques : analyticsSetEnabled est l'interrupteur de consentement de la page pour Firebase et Meta App Events ensemble ; voir AppMint.analytics pour les règles de consentement.
analyticsSetEnabled pont#
window.WebToApk.analyticsSetEnabled(enabled: Boolean)
L'interrupteur d'analyse propre à la page pour tous les fournisseurs ; conservé.
Exemple
Documenté avec WebToApk.analyticsLogEvent : l'exemple qui s'y trouve illustre aussi celui-ci.
Les méthodes Firebase Analytics brutes derrière AppMint.analytics - préférez l'enveloppe. Chacune renvoie sa réponse sous forme de texte JSON : {ok, name, dropped} ou {ok: false, error}.
Renvoie : du texte JSON (analyticsSetEnabled ne renvoie rien). Nécessite : étape Integrate → Firebase Analytics, avec votre google-services.json envoyé dans la carte Push Notifications.
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 providerDétecter la fonctionnalité, puis consigner un achat et un affichage d'écran :
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 }));
};
}Gérer un événement refusé et un interrupteur de consentement :
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 });Remarques : analyticsSetEnabled est l'interrupteur de consentement de la page pour Firebase et Meta App Events ensemble ; voir AppMint.analytics pour les règles de consentement.
analyticsSetUserId pont#
window.WebToApk.analyticsSetUserId(userId: String): String
Identifiant utilisateur Firebase ("" l'efface).
Exemple
Documenté avec WebToApk.analyticsLogEvent : l'exemple qui s'y trouve illustre aussi celui-ci.
Les méthodes Firebase Analytics brutes derrière AppMint.analytics - préférez l'enveloppe. Chacune renvoie sa réponse sous forme de texte JSON : {ok, name, dropped} ou {ok: false, error}.
Renvoie : du texte JSON (analyticsSetEnabled ne renvoie rien). Nécessite : étape Integrate → Firebase Analytics, avec votre google-services.json envoyé dans la carte Push Notifications.
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 providerDétecter la fonctionnalité, puis consigner un achat et un affichage d'écran :
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 }));
};
}Gérer un événement refusé et un interrupteur de consentement :
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 });Remarques : analyticsSetEnabled est l'interrupteur de consentement de la page pour Firebase et Meta App Events ensemble ; voir AppMint.analytics pour les règles de consentement.
analyticsSetUserProperty pont#
window.WebToApk.analyticsSetUserProperty(name: String, value: String): String
Propriété utilisateur Firebase (nom jusqu'à 24 caractères, valeur jusqu'à 36 ; "" l'efface).
Exemple
Documenté avec WebToApk.analyticsLogEvent : l'exemple qui s'y trouve illustre aussi celui-ci.
Les méthodes Firebase Analytics brutes derrière AppMint.analytics - préférez l'enveloppe. Chacune renvoie sa réponse sous forme de texte JSON : {ok, name, dropped} ou {ok: false, error}.
Renvoie : du texte JSON (analyticsSetEnabled ne renvoie rien). Nécessite : étape Integrate → Firebase Analytics, avec votre google-services.json envoyé dans la carte Push Notifications.
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 providerDétecter la fonctionnalité, puis consigner un achat et un affichage d'écran :
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 }));
};
}Gérer un événement refusé et un interrupteur de consentement :
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 });Remarques : analyticsSetEnabled est l'interrupteur de consentement de la page pour Firebase et Meta App Events ensemble ; voir AppMint.analytics pour les règles de consentement.
facebookLogEvent pont#
window.WebToApk.facebookLogEvent(name: String, valueToSum: String, paramsJson: String): String
Événement Meta App ; [valueToSum] un nombre sous forme de texte ou "" ; [paramsJson] un objet JSON plat. Renvoie {ok, name, dropped} ou {ok:false, error}.
Exemple
Documenté avec WebToApk.facebookLogin : l'exemple qui s'y trouve illustre aussi celui-ci.
Les méthodes brutes derrière AppMint.facebook - préférez l'enveloppe à promesses. Compilée avec votre Facebook App ID + Client Token (étape Integrate) ; sans eux, chaque appel répond not_configured.
Renvoie : facebookLogin(permissionsCsv, callbackId) résout window.__appmintReplies[callbackId] ; avec un callbackId vide, la réponse arrive sous forme d'événement appmint:facebook-login. getFacebookAccessToken() renvoie le JSON du jeton ou "". facebookLogEvent(name, valueToSum, paramsJson) renvoie {ok, name, dropped} sous forme de texte JSON (valueToSum est un nombre sous forme de texte, ou ""). Nécessite : Facebook Login activé dans la compilation.
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();Masquer le bouton quand la connexion Facebook n'est pas configurée dans cette compilation :
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', '');
});Consigner un événement d'achat et se déconnecter :
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();
});Remarques : Implémenté dans FacebookBridge.kt sans aucun SDK Facebook : la connexion utilise le flux web manuel de Facebook dans un onglet du navigateur, les App Events vont à l'API Graph App Events de Facebook.
facebookLogin pont#
window.WebToApk.facebookLogin(permissionsCsv: String, callbackId: String)
Connexion Facebook native ; [permissionsCsv] par ex. « public_profile,email ». Résout [callbackId], ou déclenche `appmint:facebook-login` quand il est vide.
Exemple
Les méthodes brutes derrière AppMint.facebook - préférez l'enveloppe à promesses. Compilée avec votre Facebook App ID + Client Token (étape Integrate) ; sans eux, chaque appel répond not_configured.
Renvoie : facebookLogin(permissionsCsv, callbackId) résout window.__appmintReplies[callbackId] ; avec un callbackId vide, la réponse arrive sous forme d'événement appmint:facebook-login. getFacebookAccessToken() renvoie le JSON du jeton ou "". facebookLogEvent(name, valueToSum, paramsJson) renvoie {ok, name, dropped} sous forme de texte JSON (valueToSum est un nombre sous forme de texte, ou ""). Nécessite : Facebook Login activé dans la compilation.
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();Masquer le bouton quand la connexion Facebook n'est pas configurée dans cette compilation :
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', '');
});Consigner un événement d'achat et se déconnecter :
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();
});Remarques : Implémenté dans FacebookBridge.kt sans aucun SDK Facebook : la connexion utilise le flux web manuel de Facebook dans un onglet du navigateur, les App Events vont à l'API Graph App Events de Facebook.
facebookLogout pont#
window.WebToApk.facebookLogout()
Déconnecte l'utilisateur Facebook de cette application (efface le jeton d'accès en cache).
Exemple
Documenté avec WebToApk.facebookLogin : l'exemple qui s'y trouve illustre aussi celui-ci.
Les méthodes brutes derrière AppMint.facebook - préférez l'enveloppe à promesses. Compilée avec votre Facebook App ID + Client Token (étape Integrate) ; sans eux, chaque appel répond not_configured.
Renvoie : facebookLogin(permissionsCsv, callbackId) résout window.__appmintReplies[callbackId] ; avec un callbackId vide, la réponse arrive sous forme d'événement appmint:facebook-login. getFacebookAccessToken() renvoie le JSON du jeton ou "". facebookLogEvent(name, valueToSum, paramsJson) renvoie {ok, name, dropped} sous forme de texte JSON (valueToSum est un nombre sous forme de texte, ou ""). Nécessite : Facebook Login activé dans la compilation.
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();Masquer le bouton quand la connexion Facebook n'est pas configurée dans cette compilation :
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', '');
});Consigner un événement d'achat et se déconnecter :
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();
});Remarques : Implémenté dans FacebookBridge.kt sans aucun SDK Facebook : la connexion utilise le flux web manuel de Facebook dans un onglet du navigateur, les App Events vont à l'API Graph App Events de Facebook.
getFacebookAccessToken pont#
window.WebToApk.getFacebookAccessToken(): String
Le jeton d'accès Facebook actuel en JSON {accessToken, userId, expires, grantedPermissions, declinedPermissions}, ou "" quand déconnecté.
Exemple
Documenté avec WebToApk.facebookLogin : l'exemple qui s'y trouve illustre aussi celui-ci.
Les méthodes brutes derrière AppMint.facebook - préférez l'enveloppe à promesses. Compilée avec votre Facebook App ID + Client Token (étape Integrate) ; sans eux, chaque appel répond not_configured.
Renvoie : facebookLogin(permissionsCsv, callbackId) résout window.__appmintReplies[callbackId] ; avec un callbackId vide, la réponse arrive sous forme d'événement appmint:facebook-login. getFacebookAccessToken() renvoie le JSON du jeton ou "". facebookLogEvent(name, valueToSum, paramsJson) renvoie {ok, name, dropped} sous forme de texte JSON (valueToSum est un nombre sous forme de texte, ou ""). Nécessite : Facebook Login activé dans la compilation.
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();Masquer le bouton quand la connexion Facebook n'est pas configurée dans cette compilation :
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', '');
});Consigner un événement d'achat et se déconnecter :
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();
});Remarques : Implémenté dans FacebookBridge.kt sans aucun SDK Facebook : la connexion utilise le flux web manuel de Facebook dans un onglet du navigateur, les App Events vont à l'API Graph App Events de Facebook.