الواجهة الخلفية والحسابات
التحليلات وتسجيل الدخول بـ Facebook والاشتراكات - الإعداد
Firebase Analytics وFacebook Login وRevenueCat، خطوة بخطوة
1ما الذي تربطه هذه البطاقة#
تحتوي خطوة Integrate على بطاقة تسمى Sign-in, analytics & subscriptions. وهي تربط حساباتك أنت:
- Firebase Analytics: من يستخدم التطبيق وماذا يفعل
- Facebook Login: زر «المتابعة باستخدام Facebook»، إضافةً إلى Meta App Events
- RevenueCat: الاشتراكات وعمليات الشراء
كل مفتاح تفعيل مستقل. فعّل فقط ما تستخدمه؛ فالتطبيق الذي جميع مفاتيحه معطلة يُبنى تمامًا كما كان.
2Firebase Analytics: أنشئ مشروعًا أو اختره#
افتح وحدة تحكم Firebase وانقر على Create a project (أو اختر المشروع الذي يستخدمه تطبيقك للإشعارات الفورية). أبقِ Google Analytics مفعّلًا عند السؤال، واختر حساب Analytics أو أنشئ واحدًا.
لديك مشروع دون Analytics؟ Project settings ← Integrations ← Google Analytics ← Enable.
3Firebase Analytics: أضف تطبيق Android الخاص بك#
في المشروع، انقر على Add app ← Android.
- Android package name: اكتب اسم الحزمة الدقيق من خطوة Basic في المعالج، مثل com.yourname.myapp. حرف واحد خاطئ ولن تصل أي بيانات.
- الاسم المستعار اختياري، وSHA-1 غير مطلوب للتحليلات.
انقر على Register app، ثم Download google-services.json. يمكنك تخطي بقية خطوات Firebase؛ يضيف AppMint الـ SDK نيابةً عنك.
غيّرت اسم الحزمة لاحقًا؟ أضف الحزمة الجديدة كتطبيق Android آخر ونزّل الملف مجددًا.
4Firebase Analytics: فعّله في المعالج#
خطوة Integrate ← Sign-in, analytics & subscriptions ← فعّل Firebase Analytics. ثم يظهر رفع google-services.json في بطاقة Push Notifications: ارفع الملف هناك. إنه الملف نفسه الذي تستخدمه الإشعارات الفورية، فإن كنت رفعته سابقًا للإشعارات فقد انتهيت.
سجّل مشاهدة الشاشة عند كل تغيير صفحة: عند تفعيل هذا، يسجّل التطبيق screen_view في كل مرة يتغير فيها مسار صفحتك (الروابط، وتغييرات السجل، والرجوع والتقدم، وتغييرات #)، مع المسار وعنوان الصفحة. ترى أي الشاشات يستخدمها الناس دون كتابة أي كود. أبقه معطلًا إذا كانت صفحتك ترسل استدعاءات screenView الخاصة بها، وإلا حُسبت الشاشات مرتين.
5أرسل أحداثك الخاصة#
AppMint.analytics.log(name, params) يسجّل حدثًا واحدًا. تستخدم الأسماء الأحرف والأرقام و_ (حتى 40 حرفًا، وتبدأ بحرف). تبيّن الإجابة ما أُرسل، أو السبب إن لم يُرسل: no_consent وnot_configured وinvalid_name وreserved_name.
يربط setUserId الأحداث بمعرّف المستخدم الخاص بك (وليس البريد الإلكتروني أبدًا)، ويضبط setUserProperty خاصية مثل plan، ويسجّل screenView شاشة بنفسك. وعند تفعيل Meta App Events، يرسل log الحدث نفسه إلى Meta أيضًا.
if (window.AppMint && AppMint.analytics) {
AppMint.analytics.setUserId('u_42');
AppMint.analytics.setUserProperty('plan', 'pro');
const 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);
AppMint.analytics.screenView('Checkout', 'CheckoutPage');
}6أين تظهر البيانات#
وحدة تحكم Firebase ← Analytics. يعرض Realtime المستخدمين والأحداث خلال دقائق من فتح التطبيق. أما تقارير Dashboard وEvents فتمتلئ خلال نحو 24 ساعة، لذا فالتقرير الفارغ في اليوم الأول أمر طبيعي.
لمشاهدة كل حدث مباشرةً أثناء الاختبار، وصّل الهاتف بالحاسوب ونفّذ الأمر أدناه، ثم افتح التطبيق وانتقل إلى Analytics ← DebugView. استخدم اسم الحزمة الخاص بك.
adb shell setprop debug.firebase.analytics.app com.yourname.myapp
# turn it off again:
adb shell setprop debug.firebase.analytics.app .none.7الموافقة ورفض الاشتراك#
في تطبيق يعرض إعلانات، يحدد نموذج الموافقة من Google أمر التحليلات أيضًا: لا يُجمع شيء حتى يجيب المستخدم عنه، وحيث ينطبق GDPR يجب أن يوافق المستخدم. وحتى ذلك الحين تجيب الاستدعاءات بـ no_consent ولا يُوضع شيء في قائمة الانتظار.
يمكن لصفحتك دائمًا إيقاف الجمع: AppMint.analytics.setEnabled(false) يوقفه ويُحفظ ذلك، وsetEnabled(true) يعيد تشغيله. اذكر التحليلات في سياسة الخصوصية وفي نموذج Data safety في Play.
document.getElementById('optOut').onchange = (e) =>
AppMint.analytics.setEnabled(!e.target.checked);8Facebook Login: أنشئ تطبيق Facebook#
افتح Meta for Developers ← My Apps ← Create app. اختر حالة الاستخدام الخاصة بتسجيل دخول الأشخاص عبر Facebook Login (أو أضف منتج Facebook Login إلى تطبيق لديك). أعطه اسمًا وبريدك الإلكتروني للتواصل.
9Facebook Login: أضف رابط إعادة التوجيه#
Facebook Login ← Settings ← Valid OAuth Redirect URIs: أضف
https://freewebtoapk.com/fb-return/
تمامًا كما هو، بما في ذلك الشرطة المائلة الأخيرة. يحتوي المعالج على زر Copy redirect URL حتى لا تضطر إلى كتابته. أبقِ Client OAuth login وWeb OAuth login مفعّلين، ثم Save changes.
لا حاجة إلى key hash ولا إلى إعداد منصة Android: يفتح تسجيل الدخول في تبويب متصفح ثم يعود إلى تطبيقك.
10Facebook Login: App ID وClient Token#
تعرض App settings ← Basic معرّف App ID. وتعرض App settings ← Advanced ← Security رمز Client token. الصق كليهما في حقول Facebook Login بالمعالج.
ما دام تطبيق Facebook في وضع Development، يمكن فقط للأشخاص الذين لهم دور فيه (أنت ومختبروك) تسجيل الدخول. قبل النشر، أضف رابط سياسة الخصوصية وأيقونة في App settings ← Basic وحوّل التطبيق إلى Live.
11Facebook Login: سجّل دخول المستخدمين#
AppMint.facebook.login(permissions) يفتح Facebook ويُعيد الرمز، أو ok: false وcancelled عندما يتراجع المستخدم. أرسل الرمز إلى خادمك وتحقق منه هناك. يُرجع getAccessToken() الرمز المحفوظ عند بدء الصفحة؛ ويقوم logout() بتسجيل الخروج.
فعّل Meta App Events لإرسال عمليات التثبيت وفتح التطبيق وأحداثك الخاصة إلى Meta Events Manager. AppMint.facebook.logEvent(name, valueToSum, params) يرسل إلى Meta فقط؛ ويتبع قاعدة الموافقة نفسها الخاصة بالتحليلات.
const r = await AppMint.facebook.login(['public_profile', 'email']);
if (r.ok) {
await fetch('/api/login/facebook', { method: 'POST', body: JSON.stringify({ token: r.accessToken }) });
} else if (!r.cancelled) {
alert('Facebook sign-in failed: ' + (r.message || r.error));
}
AppMint.facebook.logEvent('fb_mobile_purchase', 9.99, { fb_currency: 'USD' });12RevenueCat: أنشئ المشروع واربط Google Play#
في RevenueCat، أنشئ مشروعًا وأضف تطبيقًا لمتجر Google Play. أدخل اسم الحزمة الدقيق من الخطوة Basic.
يتحقق RevenueCat من المشتريات مع Google عبر حساب خدمة: اتبع دليل RevenueCat نفسه لإنشائه في Google Cloud، وادعُه في Play Console بالصلاحيات المالية التي يذكرها، وارفع بيانات اعتماده بصيغة JSON إلى تطبيق RevenueCat. قد تحتاج Google إلى يوم أو أكثر قبل أن تعمل بيانات الاعتماد الجديدة.
13RevenueCat: المنتجات والاستحقاق والعرض#
- في Play Console أنشئ اشتراكاتك أو منتجاتك داخل التطبيق (يجب رفع التطبيق أولًا إلى مسار اختبار).
- في RevenueCat ← Product catalog، أضف معرّفات المنتجات نفسها.
- أنشئ Entitlement، مثل pro، وأرفق به المنتجات التي تفتحه.
- أنشئ Offering (يظهر الافتراضي كحالي) مع حزم مثل Monthly وAnnual تشير إلى تلك المنتجات.
تقرأ صفحتك العرض الحالي لرسم شاشة الاشتراك، وتتحقق من الاستحقاق لفتح الميزات.
14RevenueCat: مفتاح Google العام#
RevenueCat ← Project settings ← API keys: انسخ المفتاح العام لتطبيق Google Play الخاص بك. يبدأ بـ goog_. الصقه في حقل RevenueCat بالمعالج.
لا تستخدم مفتاحًا سريًا (sk_...) أبدًا. يمكن لأي شخص ينزّل التطبيق قراءة كل ما بداخله، ويمنح المفتاح السري تحكمًا كاملًا بحساب RevenueCat الخاص بك.
15RevenueCat: العروض وعمليات الشراء والاستحقاقات#
يبدأ configure() تشغيل RevenueCat (مرّر معرّف المستخدم الخاص بك، أو لا شيء لمستخدم مجهول). يُرجع getOfferings() شاشة الاشتراك، وينفّذ purchase(package) عملية الشراء عبر Google Play، ويخبرك getCustomerInfo() بما يملكه المستخدم. يستعيد restore() المشتريات السابقة. اختبر بحساب license tester وتثبيت من مسار اختبار في Play.
if (window.AppMint && AppMint.revenuecat) {
await AppMint.revenuecat.configure({ appUserId: 'u_42' });
const off = await AppMint.revenuecat.getOfferings();
if (off.ok && off.current) {
const pkg = off.current.availablePackages[0];
const r = await AppMint.revenuecat.purchase(pkg);
if (r.ok) unlock();
}
const info = await AppMint.revenuecat.getCustomerInfo();
const isPro = info.ok && !!info.customerInfo.entitlements.active.pro;
}