Серверная часть и аккаунты
Аналитика, вход через Facebook и подписки — настройка
Firebase Analytics, Facebook Login и RevenueCat — шаг за шагом
1Что подключает эта карточка#
На шаге «Интеграция» есть карточка «Вход, аналитика и подписки». Она подключает ВАШИ СОБСТВЕННЫЕ аккаунты:
- Firebase Analytics: кто пользуется приложением и что делает
- Facebook Login: кнопка «Продолжить с Facebook» и Meta App Events
- RevenueCat: подписки и покупки
Каждый переключатель работает отдельно. Включайте только то, чем пользуетесь; приложение со всеми выключенными переключателями собирается как раньше.
2Firebase Analytics: создайте проект или выберите существующий#
Откройте консоль Firebase и нажмите Create a project (или выберите проект, который ваше приложение уже использует для push). Когда спросят, оставьте Google Analytics ВКЛЮЧЁННЫМ и выберите или создайте аккаунт Analytics.
Уже есть проект без Analytics? Project settings → Integrations → Google Analytics → Enable.
3Firebase Analytics: добавьте ваше приложение для Android#
В проекте нажмите Add app → Android.
- Имя пакета Android: введите ТОЧНОЕ имя пакета с шага «Основное» в мастере, например com.yourname.myapp. Одна неверная буква — и данные не придут.
- Псевдоним необязателен, а SHA-1 для аналитики не нужен.
Нажмите Register app, затем Download google-services.json. Остальные шаги Firebase можно пропустить; SDK AppMint добавит сам.
Позже изменили имя пакета? Добавьте новый пакет как ещё одно приложение Android и скачайте файл снова.
4Firebase Analytics: включите в мастере#
Шаг «Интеграция» → «Вход, аналитика и подписки» → включите Firebase Analytics. Загрузка google-services.json появится в карточке push-уведомлений: загрузите файл туда. Это тот же файл, что используется для push, поэтому, если вы уже загрузили его для push, всё готово.
Записывать просмотр экрана при каждой смене страницы: когда это включено, приложение фиксирует screen_view при каждой смене маршрута вашей страницы (ссылки, изменения истории, назад и вперёд, изменения #), с путём и заголовком страницы. Вы видите, какими экранами пользуются, без единой строки кода. Оставьте выключенным, если ваша страница сама отправляет вызовы screenView, иначе экраны будут считаться дважды.
5Отправляйте собственные события#
AppMint.analytics.log(name, params) записывает одно событие. Имена могут содержать буквы, цифры и _ (до 40 символов, начинаться должны с буквы). В ответе сказано, что было отправлено, или почему нет: no_consent, not_configured, invalid_name, reserved_name.
setUserId помечает события вашим собственным id пользователя (но не e-mail), 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 в уже существующее приложение). Задайте название и контактный e-mail.
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.
Хеш ключа и настройка платформы Android не нужны: вход открывается во вкладке браузера и возвращает пользователя в ваше приложение.
10Facebook Login: App ID и Client Token#
В App settings → Basic указан App ID. В App settings → Advanced → Security указан Client token. Вставьте оба значения в поля Facebook Login в мастере.
Пока приложение Facebook в режиме разработки, войти могут только люди с ролью в нём (вы и ваши тестировщики). Перед публикацией добавьте адрес политики конфиденциальности и значок в 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 Store. Введите ТОЧНОЕ имя пакета с шага «Основное».
RevenueCat проверяет покупки в Google через сервисный аккаунт: следуйте собственному руководству RevenueCat, чтобы создать его в Google Cloud, пригласите его в Play Console с перечисленными финансовыми разрешениями и загрузите его учётные данные JSON в приложение RevenueCat. Google может потратить день и больше, прежде чем новые учётные данные заработают.
13RevenueCat: продукты, право доступа и набор предложений#
- В Play Console создайте подписки или покупки в приложении (сначала приложение нужно загрузить в тестовый трек).
- В RevenueCat → Product catalog добавьте те же id продуктов.
- Создайте Entitlement, например pro, и привяжите к нему продукты, которые его открывают.
- Создайте Offering (набор по умолчанию отображается как текущий) с пакетами, например Monthly и Annual, которые указывают на эти продукты.
Ваша страница читает текущее предложение, чтобы нарисовать экран с предложениями, и проверяет право доступа, чтобы открывать функции.
14RevenueCat: публичный ключ Google#
RevenueCat → Project settings → API keys: скопируйте ПУБЛИЧНЫЙ ключ вашего приложения Google Play. Он начинается с goog_. Вставьте его в поле RevenueCat в мастере.
Никогда не используйте секретный ключ (sk_...). Всё, что находится внутри приложения, может прочитать любой, кто его скачает, а секретный ключ даёт полный контроль над вашим аккаунтом RevenueCat.
15RevenueCat: предложения, покупки и права доступа#
configure() запускает RevenueCat (передайте свой id пользователя или ничего, если пользователь анонимный). getOfferings() возвращает экран с предложениями, purchase(package) запускает покупку в Google Play, а getCustomerInfo() сообщает, что есть у пользователя. restore() возвращает прежние покупки. Проверяйте с аккаунтом тестировщика лицензий и установкой из тестового трека 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;
}