बैकएंड और अकाउंट
Analytics, Facebook login और सब्सक्रिप्शन - सेटअप
Firebase Analytics, Facebook Login और RevenueCat, चरण-दर-चरण
1यह कार्ड क्या जोड़ता है#
Integrate चरण में Sign-in, analytics & subscriptions नाम का एक कार्ड है। यह आपके अपने अकाउंट जोड़ता है:
- Firebase Analytics: कौन ऐप इस्तेमाल करता है और क्या करता है
- Facebook Login: Continue with 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 पैकेज नाम: विज़ार्ड के Basic चरण वाला पैकेज नाम बिल्कुल वैसा ही टाइप करें, जैसे com.yourname.myapp। एक भी अक्षर ग़लत हुआ तो कोई डेटा नहीं आएगा।
- Nickname वैकल्पिक है, और analytics के लिए SHA-1 की ज़रूरत नहीं है।
Register app पर टैप करें, फिर google-services.json डाउनलोड करें। बाकी Firebase चरण छोड़ सकते हैं; AppMint आपके लिए SDK जोड़ देता है।
बाद में पैकेज नाम बदला? नया पैकेज एक और Android ऐप के रूप में जोड़ें और फ़ाइल फिर से डाउनलोड करें।
4Firebase Analytics: विज़ार्ड में इसे चालू करें#
Integrate चरण → Sign-in, analytics & subscriptions → Firebase Analytics चालू करें। इसके बाद google-services.json अपलोड करने का विकल्प पुश नोटिफ़िकेशन कार्ड में दिखेगा: फ़ाइल वहीं अपलोड करें। पुश भी यही फ़ाइल इस्तेमाल करता है, इसलिए अगर आपने इसे पुश के लिए पहले ही अपलोड कर दिया है, तो काम पूरा है।
हर पेज बदलाव पर स्क्रीन व्यू लॉग करें: इसके चालू होने पर, जब भी आपका पेज रूट बदलता है (लिंक, हिस्ट्री बदलाव, बैक और फ़ॉरवर्ड, # बदलाव), ऐप पाथ और पेज टाइटल के साथ एक screen_view दर्ज करता है। बिना कोड लिखे आप देख सकते हैं कि लोग कौन सी स्क्रीन इस्तेमाल करते हैं। अगर आपका पेज अपने screenView कॉल भेजता है तो इसे बंद रखें, वरना स्क्रीन दो बार गिनी जाएँगी।
5अपने खुद के इवेंट भेजें#
AppMint.analytics.log(name, params) एक इवेंट रिकॉर्ड करता है। नामों में अक्षर, अंक और _ चलते हैं (40 अक्षरों तक, शुरुआत अक्षर से)। जवाब बताता है कि क्या भेजा गया, या क्यों नहीं: no_consent, not_configured, invalid_name, reserved_name।
setUserId इवेंट्स पर आपका अपना user id लगाता है (कभी ईमेल नहीं), 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 console → 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सहमति और opt-out#
विज्ञापन दिखाने वाले ऐप में Google का सहमति फ़ॉर्म एनालिटिक्स के लिए भी फ़ैसला करता है: जब तक यूज़र उसका जवाब नहीं देता, कुछ भी इकट्ठा नहीं होता, और जहाँ GDPR लागू है वहाँ यूज़र का सहमत होना ज़रूरी है। तब तक कॉल no_consent लौटाते हैं और कुछ भी कतार में नहीं रखा जाता।
आपका पेज हमेशा डेटा इकट्ठा करना बंद कर सकता है: AppMint.analytics.setEnabled(false) इसे रोकता है और यह याद रखा जाता है, setEnabled(true) इसे फिर चालू करता है। अपनी प्राइवेसी पॉलिसी और Play के Data safety फ़ॉर्म में analytics का ज़िक्र करें।
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: redirect URL जोड़ें#
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 में प्राइवेसी पॉलिसी URL और आइकन जोड़ें और ऐप को Live पर कर दें।
11Facebook Login: लोगों को साइन इन कराएँ#
AppMint.facebook.login(permissions) Facebook खोलता है और टोकन के साथ पूरा होता है, या यूज़र के पीछे हट जाने पर ok: false और cancelled के साथ। टोकन अपने सर्वर को भेजें और वहीं उसकी जाँच करें। getAccessToken() पेज शुरू होने पर सेव किया गया टोकन लौटाता है; logout() साइन आउट करता है।
इंस्टॉल, ऐप खुलना और अपने खुद के इवेंट Meta Events Manager को भेजने के लिए Meta App Events चालू करें। 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 Store के लिए एक ऐप जोड़ें। Basic चरण वाला पैकेज नाम बिल्कुल वैसा ही डालें।
RevenueCat, service account के ज़रिए Google से खरीदारियों की जाँच करता है: Google Cloud में उसे बनाने के लिए RevenueCat की अपनी गाइड फ़ॉलो करें, Play Console में उसे वे financial अनुमतियाँ देकर आमंत्रित करें जो वह बताती है, और उसके JSON credentials RevenueCat ऐप में अपलोड करें। नए credentials काम करने में Google को एक दिन या उससे ज़्यादा लग सकता है।
13RevenueCat: प्रोडक्ट, एंटाइटलमेंट और ऑफ़रिंग#
- Play Console में अपने सब्सक्रिप्शन या इन-ऐप प्रोडक्ट बनाएँ (ऐप को पहले किसी टेस्टिंग ट्रैक पर अपलोड किया होना चाहिए)।
- RevenueCat → Product catalog में वही product id जोड़ें।
- एक Entitlement बनाएँ, जैसे pro, और उसमें वे प्रोडक्ट जोड़ें जो इसे अनलॉक करते हैं।
- एक Offering बनाएँ (डिफ़ॉल्ट वाली current के रूप में दिखती है), जिसमें Monthly और Annual जैसे पैकेज हों जो उन प्रोडक्ट्स की ओर इशारा करें।
आपका पेज पेवॉल बनाने के लिए मौजूदा offering पढ़ता है, और फ़ीचर अनलॉक करने के लिए entitlement जाँचता है।
14RevenueCat: public Google key#
RevenueCat → Project settings → API keys: अपने Google Play ऐप की PUBLIC key कॉपी करें। यह goog_ से शुरू होती है। इसे विज़ार्ड के RevenueCat फ़ील्ड में पेस्ट करें।
secret key (sk_...) कभी इस्तेमाल न करें। ऐप के अंदर रखी कोई भी चीज़ उसे डाउनलोड करने वाला कोई भी पढ़ सकता है, और secret key से आपके RevenueCat अकाउंट पर पूरा कंट्रोल मिल जाता है।
15RevenueCat: ऑफ़रिंग, खरीदारी और एंटाइटलमेंट#
configure() RevenueCat शुरू करता है (अपना user id दें, या बिना नाम वाले यूज़र के लिए कुछ न दें)। 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;
}