API پل جاوااسکریپت
Facebook، رویدادهای Meta و Firebase Analytics
Facebook Login، Meta App Events و Firebase Analytics با کلیدهای خودِ سازنده که در ساخت تنظیم میشوند. تحلیل تا وقتی کاربر رضایت ندهد چیزی جمع نمیکند.
AppMint.analytics کمککننده#
AppMint.analytics — one event to Firebase and Meta
نمونه
یک رویداد را در هر سرویس تحلیلی که ساخت متصل کرده ثبت میکند: Firebase Analytics (google-services.json خودتان) و Meta App Events. نامها طبق قواعد هر سرویس پاکسازی میشوند و پاسخ میگوید چه چیزی فرستاده شده.
مقدار بازگشتی: log(name, params) ← {ok, providers: {firebase?, meta?}}، هرکدام {ok, name, dropped} یا {ok: false, error}. setUserId(id)، setUserProperty(name, value)، screenView(name, class)، setEnabled(on) ← Promise؛ providers() ← {firebase, meta}. پیشنیاز: مرحلهٔ Integrate ← Firebase Analytics (google-services.json را در کارت Push بارگذاری کنید) و/یا 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);ورود و خروج، شناسهٔ کاربر را هماهنگ نگه میدارند:
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
}
}پیش از تکیه بر سرویسها ببینید کدامها متصلاند:
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);
}نکتهها: رضایت: وقتی اپلیکیشن تبلیغ نشان میدهد، فرم رضایت Google برای تحلیل هم تصمیم میگیرد - پیش از پاسخ هیچ چیز جمع نمیشود و جایی که GDPR اعمال میشود هدف 1 باید پذیرفته شود؛ setEnabled(false) خودِ صفحه همیشه برنده است. تا وقتی جمعآوری خاموش است، فراخوانیها no_consent پاسخ میدهند (هیچ چیز در صف نمیرود). نامهای Firebase: حروف، ارقام و _، تا 40 نویسه، حداکثر 25 پارامتر، مقادیر رشتهای تا 100 نویسه؛ نامهای رزروشده (first_open، session_start، firebase_…، google_…، ga_…) reserved_name / reserved_prefix پاسخ میدهند. params.value (یک عدد) به value-to-sum در Meta تبدیل میشود. با روشن بودن Log a screen view for every page change، تغییرهای route بهصورت خودکار screen_view ثبت میکنند. خطاها: not_configured, missing_google_app_id, params_not_json, invalid_name.
AppMint.facebook کمککننده#
AppMint.facebook — Facebook Login and Meta App Events
نمونه
«ادامه با Facebook» روی اپلیکیشن Facebook خودتان. ورود، Facebook را در یک زبانهٔ مرورگر (Custom Tab) باز میکند: از ورود facebook.com همان مرورگر استفاده میکند، نه اپلیکیشن Facebook، و وقتی کاربر تأیید کرد به اپلیکیشن برمیگردد. اگر Meta App Events را روشن کرده باشید، آنها را هم ثبت میکند.
مقدار بازگشتی: login(permissions) ← یک Promise که همیشه حل میشود: {ok: true, accessToken, userId, expires, grantedPermissions, declinedPermissions} یا {ok: false, cancelled?, error}. getAccessToken() ← همان شیء توکن، یا null وقتی خارج شده باشد. logEvent(name, valueToSum, params) ← {ok, name, dropped} (در صف و بهصورت دستهای ارسال میشود) یا {ok: false, error}. پیشنیاز: مرحلهٔ Integrate ساخت ← Facebook Login با Facebook App ID و Client Token شما (و Meta App Events برای logEvent).
وارد شوید، سپس از توکن با بکاند خود استفاده کنید:
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 });دکمهٔ Facebook را فقط داخل اپلیکیشن نشان دهید و نبودِ راهاندازی را مدیریت کنید:
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));
};
}نکتهها: Facebook Developers ← اپلیکیشن شما ← Facebook Login ← Settings ← Valid OAuth Redirect URIs: https://freewebtoapk.com/fb-return/ را اضافه کنید (ویزارد دکمهٔ Copy دارد). به کلید hash یا راهاندازی پلتفرم Android نیازی نیست. توکن با Facebook بررسی میشود (باید به App ID شما تعلق داشته باشد) پیش از آنکه promise حل شود. اگر Android اپلیکیشن را وقتی کاربر در مرورگر بود بست، نتیجه به promise تحویل داده نمیشود - توکن ذخیره میشود و getAccessToken() هنگام شروع صفحه آن را برمیگرداند. خطاها: not_configured، busy (یک ورود از قبل باز است)، cancelled (وقتی کاربر زبانه را ببندد هم)، state_mismatch، wrong_app، failed، no_token، foreign_origin (صفحهای که از خودِ اپلیکیشن نیست). App Events (که از اپلیکیشن با توکن مشتری شما به App Events API فیسبوک فرستاده میشوند) فقط پس از رضایت شروع میشوند (ببینید AppMint.analytics) و تا آن موقع no_consent پاسخ میدهند. ورود وب از طریق ریدایرکتهای Supabase یا Firebase مثل قبل کار میکند.
analyticsLogEvent پل#
window.WebToApk.analyticsLogEvent(name: String, paramsJson: String): String
رویداد Firebase؛ نام طبق قواعد Firebase پاکسازی میشود. {ok, name, dropped} یا {ok:false, error} برمیگرداند.
نمونه
متدهای خام Firebase Analytics پشت AppMint.analytics - پوشش را ترجیح دهید. هر کدام پاسخش را بهصورت متن JSON برمیگرداند: {ok, name, dropped} یا {ok: false, error}.
مقدار بازگشتی: متن JSON (analyticsSetEnabled چیزی برنمیگرداند). پیشنیاز: مرحلهٔ Integrate ← Firebase Analytics، با google-services.json شما که در کارت 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 providerابتدا وجود قابلیت را بررسی کنید، سپس یک خرید و یک نمایش صفحه ثبت کنید:
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 }));
};
}یک رویداد ردشده و یک کلید رضایت را مدیریت کنید:
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 });نکتهها: analyticsSetEnabled کلید رضایت صفحه برای Firebase و Meta App Events با هم است؛ برای قواعد رضایت ببینید AppMint.analytics.
analyticsLogScreenView پل#
window.WebToApk.analyticsLogScreenView(screenName: String, screenClass: String): String
screen_view در Firebase برای [screenName] (مثلاً مسیر route).
نمونه
همراه با WebToApk.analyticsLogEvent مستند شده - نمونهٔ آنجا این یکی را هم نشان میدهد.
متدهای خام Firebase Analytics پشت AppMint.analytics - پوشش را ترجیح دهید. هر کدام پاسخش را بهصورت متن JSON برمیگرداند: {ok, name, dropped} یا {ok: false, error}.
مقدار بازگشتی: متن JSON (analyticsSetEnabled چیزی برنمیگرداند). پیشنیاز: مرحلهٔ Integrate ← Firebase Analytics، با google-services.json شما که در کارت 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 providerابتدا وجود قابلیت را بررسی کنید، سپس یک خرید و یک نمایش صفحه ثبت کنید:
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 }));
};
}یک رویداد ردشده و یک کلید رضایت را مدیریت کنید:
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 });نکتهها: analyticsSetEnabled کلید رضایت صفحه برای Firebase و Meta App Events با هم است؛ برای قواعد رضایت ببینید AppMint.analytics.
analyticsSetEnabled پل#
window.WebToApk.analyticsSetEnabled(enabled: Boolean)
کلید تحلیل خودِ صفحه برای همهٔ ارائهدهندگان؛ ذخیره میشود.
نمونه
همراه با WebToApk.analyticsLogEvent مستند شده - نمونهٔ آنجا این یکی را هم نشان میدهد.
متدهای خام Firebase Analytics پشت AppMint.analytics - پوشش را ترجیح دهید. هر کدام پاسخش را بهصورت متن JSON برمیگرداند: {ok, name, dropped} یا {ok: false, error}.
مقدار بازگشتی: متن JSON (analyticsSetEnabled چیزی برنمیگرداند). پیشنیاز: مرحلهٔ Integrate ← Firebase Analytics، با google-services.json شما که در کارت 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 providerابتدا وجود قابلیت را بررسی کنید، سپس یک خرید و یک نمایش صفحه ثبت کنید:
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 }));
};
}یک رویداد ردشده و یک کلید رضایت را مدیریت کنید:
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 });نکتهها: analyticsSetEnabled کلید رضایت صفحه برای Firebase و Meta App Events با هم است؛ برای قواعد رضایت ببینید AppMint.analytics.
analyticsSetUserId پل#
window.WebToApk.analyticsSetUserId(userId: String): String
شناسهٔ کاربر Firebase ("" آن را پاک میکند).
نمونه
همراه با WebToApk.analyticsLogEvent مستند شده - نمونهٔ آنجا این یکی را هم نشان میدهد.
متدهای خام Firebase Analytics پشت AppMint.analytics - پوشش را ترجیح دهید. هر کدام پاسخش را بهصورت متن JSON برمیگرداند: {ok, name, dropped} یا {ok: false, error}.
مقدار بازگشتی: متن JSON (analyticsSetEnabled چیزی برنمیگرداند). پیشنیاز: مرحلهٔ Integrate ← Firebase Analytics، با google-services.json شما که در کارت 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 providerابتدا وجود قابلیت را بررسی کنید، سپس یک خرید و یک نمایش صفحه ثبت کنید:
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 }));
};
}یک رویداد ردشده و یک کلید رضایت را مدیریت کنید:
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 });نکتهها: analyticsSetEnabled کلید رضایت صفحه برای Firebase و Meta App Events با هم است؛ برای قواعد رضایت ببینید AppMint.analytics.
analyticsSetUserProperty پل#
window.WebToApk.analyticsSetUserProperty(name: String, value: String): String
ویژگی کاربر Firebase (نام تا 24 نویسه، مقدار تا 36؛ "" آن را پاک میکند).
نمونه
همراه با WebToApk.analyticsLogEvent مستند شده - نمونهٔ آنجا این یکی را هم نشان میدهد.
متدهای خام Firebase Analytics پشت AppMint.analytics - پوشش را ترجیح دهید. هر کدام پاسخش را بهصورت متن JSON برمیگرداند: {ok, name, dropped} یا {ok: false, error}.
مقدار بازگشتی: متن JSON (analyticsSetEnabled چیزی برنمیگرداند). پیشنیاز: مرحلهٔ Integrate ← Firebase Analytics، با google-services.json شما که در کارت 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 providerابتدا وجود قابلیت را بررسی کنید، سپس یک خرید و یک نمایش صفحه ثبت کنید:
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 }));
};
}یک رویداد ردشده و یک کلید رضایت را مدیریت کنید:
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 });نکتهها: analyticsSetEnabled کلید رضایت صفحه برای Firebase و Meta App Events با هم است؛ برای قواعد رضایت ببینید AppMint.analytics.
facebookLogEvent پل#
window.WebToApk.facebookLogEvent(name: String, valueToSum: String, paramsJson: String): String
رویداد Meta App؛ [valueToSum] یک عدد بهصورت متن یا ""؛ [paramsJson] یک شیء JSON تخت. {ok, name, dropped} یا {ok:false, error} برمیگرداند.
نمونه
همراه با WebToApk.facebookLogin مستند شده - نمونهٔ آنجا این یکی را هم نشان میدهد.
متدهای خام پشت AppMint.facebook - پوشش promise را ترجیح دهید. با Facebook App ID + Client Token شما (مرحلهٔ Integrate) ساخته میشود؛ بدون آنها هر فراخوانی پاسخ میدهد not_configured.
مقدار بازگشتی: facebookLogin(permissionsCsv, callbackId) مقدار window.__appmintReplies[callbackId] را حل میکند؛ با callbackId خالی پاسخ بهصورت رویداد appmint:facebook-login میرسد. getFacebookAccessToken() JSON توکن یا "" برمیگرداند. facebookLogEvent(name, valueToSum, paramsJson) مقدار {ok, name, dropped} را بهصورت متن JSON برمیگرداند (valueToSum یک عدد بهصورت متن یا "" است). پیشنیاز: Facebook Login در ساخت روشن باشد.
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();وقتی ورود Facebook در این ساخت راهاندازی نشده، دکمه را پنهان کنید:
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', '');
});یک رویداد خرید ثبت کنید و خارج شوید:
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();
});نکتهها: در FacebookBridge.kt بدون هیچ SDK فیسبوک پیادهسازی شده: ورود جریان وب دستیِ Facebook در یک زبانهٔ مرورگر است و App Events به Graph API مربوط به App Events فیسبوک میروند.
facebookLogin پل#
window.WebToApk.facebookLogin(permissionsCsv: String, callbackId: String)
ورود بومی Facebook؛ [permissionsCsv] مثلاً "public_profile,email". [callbackId] را حل میکند، یا وقتی خالی است `appmint:facebook-login` را فعال میکند.
نمونه
متدهای خام پشت AppMint.facebook - پوشش promise را ترجیح دهید. با Facebook App ID + Client Token شما (مرحلهٔ Integrate) ساخته میشود؛ بدون آنها هر فراخوانی پاسخ میدهد not_configured.
مقدار بازگشتی: facebookLogin(permissionsCsv, callbackId) مقدار window.__appmintReplies[callbackId] را حل میکند؛ با callbackId خالی پاسخ بهصورت رویداد appmint:facebook-login میرسد. getFacebookAccessToken() JSON توکن یا "" برمیگرداند. facebookLogEvent(name, valueToSum, paramsJson) مقدار {ok, name, dropped} را بهصورت متن JSON برمیگرداند (valueToSum یک عدد بهصورت متن یا "" است). پیشنیاز: Facebook Login در ساخت روشن باشد.
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();وقتی ورود Facebook در این ساخت راهاندازی نشده، دکمه را پنهان کنید:
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', '');
});یک رویداد خرید ثبت کنید و خارج شوید:
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();
});نکتهها: در FacebookBridge.kt بدون هیچ SDK فیسبوک پیادهسازی شده: ورود جریان وب دستیِ Facebook در یک زبانهٔ مرورگر است و App Events به Graph API مربوط به App Events فیسبوک میروند.
facebookLogout پل#
window.WebToApk.facebookLogout()
کاربر Facebook را از این اپلیکیشن خارج میکند (توکن دسترسی کششده را پاک میکند).
نمونه
همراه با WebToApk.facebookLogin مستند شده - نمونهٔ آنجا این یکی را هم نشان میدهد.
متدهای خام پشت AppMint.facebook - پوشش promise را ترجیح دهید. با Facebook App ID + Client Token شما (مرحلهٔ Integrate) ساخته میشود؛ بدون آنها هر فراخوانی پاسخ میدهد not_configured.
مقدار بازگشتی: facebookLogin(permissionsCsv, callbackId) مقدار window.__appmintReplies[callbackId] را حل میکند؛ با callbackId خالی پاسخ بهصورت رویداد appmint:facebook-login میرسد. getFacebookAccessToken() JSON توکن یا "" برمیگرداند. facebookLogEvent(name, valueToSum, paramsJson) مقدار {ok, name, dropped} را بهصورت متن JSON برمیگرداند (valueToSum یک عدد بهصورت متن یا "" است). پیشنیاز: Facebook Login در ساخت روشن باشد.
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();وقتی ورود Facebook در این ساخت راهاندازی نشده، دکمه را پنهان کنید:
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', '');
});یک رویداد خرید ثبت کنید و خارج شوید:
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();
});نکتهها: در FacebookBridge.kt بدون هیچ SDK فیسبوک پیادهسازی شده: ورود جریان وب دستیِ Facebook در یک زبانهٔ مرورگر است و App Events به Graph API مربوط به App Events فیسبوک میروند.
getFacebookAccessToken پل#
window.WebToApk.getFacebookAccessToken(): String
توکن دسترسی فعلی Facebook بهصورت JSON {accessToken, userId, expires, grantedPermissions, declinedPermissions}، یا "" وقتی خارج شده باشد.
نمونه
همراه با WebToApk.facebookLogin مستند شده - نمونهٔ آنجا این یکی را هم نشان میدهد.
متدهای خام پشت AppMint.facebook - پوشش promise را ترجیح دهید. با Facebook App ID + Client Token شما (مرحلهٔ Integrate) ساخته میشود؛ بدون آنها هر فراخوانی پاسخ میدهد not_configured.
مقدار بازگشتی: facebookLogin(permissionsCsv, callbackId) مقدار window.__appmintReplies[callbackId] را حل میکند؛ با callbackId خالی پاسخ بهصورت رویداد appmint:facebook-login میرسد. getFacebookAccessToken() JSON توکن یا "" برمیگرداند. facebookLogEvent(name, valueToSum, paramsJson) مقدار {ok, name, dropped} را بهصورت متن JSON برمیگرداند (valueToSum یک عدد بهصورت متن یا "" است). پیشنیاز: Facebook Login در ساخت روشن باشد.
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();وقتی ورود Facebook در این ساخت راهاندازی نشده، دکمه را پنهان کنید:
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', '');
});یک رویداد خرید ثبت کنید و خارج شوید:
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();
});نکتهها: در FacebookBridge.kt بدون هیچ SDK فیسبوک پیادهسازی شده: ورود جریان وب دستیِ Facebook در یک زبانهٔ مرورگر است و App Events به Graph API مربوط به App Events فیسبوک میروند.