@soroka282/appmetrica-capacitor-plugin
v1.0.2
Published
Yandex App metrica plugin for Capacitor
Readme
Плагин Yandex App Metrica для Capacitor
- Поддержка Capacitor 2–7.
- Работает на платформах: iOS, Android.
- Поддерживает E-Commerce события
- Поддерживает отправку атрибутов профиля
- Deeplinks (не тестровались)
- Locations (не тестровались)
Версии AppMetrica SDK:
- Android: 7.12.0 (analytics, analytics-network)
Примечание: модуль analytics-ndk-crashes удалён из зависимостей плагина, чтобы исключить попадание нативных библиотек .so в APK/Bundle.
Демо приложение
cd example
npm install
npm run build
npx cap sync
npx cap open android|iosУстановка
Capacitor 3–7:
npm install @soroka282/appmetrica-capacitor-plugin
npx cap syncДля Capacitor 2:
npm install @soroka282/appmetrica-capacitor-plugin@^2.0.0
npx cap syncAndroid
Настройка геолокации (опционально)
Подробнее: ссылка
Открыть файл: android/app/src/main/AndroidManifest.xml
<manifest>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application>...</application>
</manifest>Использование
Создать новое приложение и получить ключ здесь.
Конфигурация/Активация
import { AppMetrica } from '@soroka282/appmetrica-capacitor-plugin';
AppMetrica.activate({
apiKey: '<API key приложения>',
logs: true,
})
.then(() => {
// Успешная активация
})
.catch(() => {
// Что-то пошло не так
});Отправка событий
Простое событие:
AppMetrica.reportEvent({
name: 'Имя события',
params: {
ключ: 'значение',
},
});Событие ошибки:
AppMetrica.reportError({
group: 'идентификатор_группы',
message: 'Сообщение ошибки',
parameters: {
// В Android данные передаются в виде JSON строки внутри Throwable объекта
key: 'value',
},
});WARNING: Ранее данные события ошибки передавались через поля name и error - данные значения объявлены как deprecated, будут удалены в следующей версии.
Отправка атрибутов профиля
Задать идентификатор профиля:
AppMetrica.setUserProfileId({ id: 'user_id_1' });Отправка атрибутов:
const userProfile: YAMUserProfile = {
name: 'Nalivayko Ivan',
gender: 'male',
notificationEnabled: true,
birthDate: {
// or { age: 20 }
year: 2001,
month: 1,
day: 1,
},
};
AppMetrica.reportUserProfile(userProfile);E-Commerce события
const screen: ECommerceScreen = {
"name": "ProductCardActivity",
"searchQuery": "даниссимо кленовый сироп",
"categoriesPath": ["Акции", "Красная цена"],
"payload": {
"full_screen": "true",
}
};
AppMetrica.showScreenEvent(screen);
const screen: ECommerceScreen = {
"name": "ProductCardActivity",
"searchQuery": "даниссимо кленовый сироп",
"categoriesPath": ["Акции", "Красная цена"],
"payload": {
"full_screen": "true",
}
};
const actualPrice: ECommercePrice = {
"fiat": [4.53, "USD"],
"internalComponents": [
[30570000, "wood"],
[26.89, "iron"],
[5.1, "gold"]
]
};
const product: ECommerceProduct = {
"sku": "779213",
"name": "Продукт творожный «Даниссимо» 5.9%, 130 г.",
"actualPrice": actualPrice,
"originalPrice": {
"fiat": [5.78, "USD"],
"internalComponents": [
[30590000, "wood"],
[26.92, "iron"],
[5.5, "gold"],
]
},
"categoriesPath": ["Продукты", "Молочные продукты", "Йогурты"],
"promocodes": ["BT79IYX", "UT5412EP"],
"payload": {
"full_screen": "true",
}
};
AppMetrica.showProductCardEvent({ product, screen });const screen: ECommerceScreen = {
name: 'ProductCardActivity',
searchQuery: 'даниссимо кленовый сироп',
categoriesPath: ['Акции', 'Красная цена'],
payload: {
full_screen: 'true',
},
};
const actualPrice: ECommercePrice = {
fiat: [4.53, 'USD'],
internalComponents: [
[30570000, 'wood'],
[26.89, 'iron'],
[5.1, 'gold'],
],
};
const product: ECommerceProduct = {
sku: '779213',
name: 'Продукт творожный «Даниссимо» 5.9%, 130 г.',
actualPrice: actualPrice,
originalPrice: {
fiat: [5.78, 'USD'],
internalComponents: [
[30590000, 'wood'],
[26.92, 'iron'],
[5.5, 'gold'],
],
},
categoriesPath: ['Продукты', 'Молочные продукты', 'Йогурты'],
promocodes: ['BT79IYX', 'UT5412EP'],
payload: {
full_screen: 'true',
},
};
const referrer: ECommerceReferrer = {
type: 'button',
identifier: '76890',
screen: screen,
};
AppMetrica.showProductDetailsEvent({ product, referrer });const screen: ECommerceScreen = {
name: 'ProductCardActivity',
searchQuery: 'даниссимо кленовый сироп',
categoriesPath: ['Акции', 'Красная цена'],
payload: {
full_screen: 'true',
},
};
const actualPrice: ECommercePrice = {
fiat: [4.53, 'USD'],
internalComponents: [
[30570000, 'wood'],
[26.89, 'iron'],
[5.1, 'gold'],
],
};
const product: ECommerceProduct = {
sku: '779213',
name: 'Продукт творожный «Даниссимо» 5.9%, 130 г.',
actualPrice: actualPrice,
originalPrice: {
fiat: [5.78, 'USD'],
internalComponents: [
[30590000, 'wood'],
[26.92, 'iron'],
[5.5, 'gold'],
],
},
categoriesPath: ['Продукты', 'Молочные продукты', 'Йогурты'],
promocodes: ['BT79IYX', 'UT5412EP'],
payload: {
full_screen: 'true',
},
};
const referrer: ECommerceReferrer = {
type: 'button',
identifier: '76890',
screen: screen,
};
const addedItem: ECommerceCartItem = {
product,
referrer,
quantity: 1.0,
revenue: actualPrice,
};
// Добавление
AppMetrica.addCartItemEvent(addedItem);
// Удаление
AppMetrica.removeCartItemEvent(addedItem);const screen: ECommerceScreen = {
"name": "ProductCardActivity",
"searchQuery": "даниссимо кленовый сироп",
"categoriesPath": ["Акции", "Красная цена"],
"payload": {
"full_screen": "true",
}
};
const actualPrice: ECommercePrice = {
"fiat": [4.53, "USD"],
"internalComponents": [
[30570000, "wood"],
[26.89, "iron"],
[5.1, "gold"]
]
};
const product: ECommerceProduct = {
"sku": "779213",
"name": "Продукт творожный «Даниссимо» 5.9%, 130 г.",
"actualPrice": actualPrice,
"originalPrice": {
"fiat": [5.78, "USD"],
"internalComponents": [
[30590000, "wood"],
[26.92, "iron"],
[5.5, "gold"],
]
},
"categoriesPath": ["Продукты", "Молочные продукты", "Йогурты"],
"promocodes": ["BT79IYX", "UT5412EP"],
"payload": {
"full_screen": "true",
}
};
const referrer: ECommerceReferrer = {
"type": "button",
"identifier": "76890",
"screen": screen
};
const addedItem: ECommerceCartItem = {
product,
referrer,
quantity: 1.0,
revenue: actualPrice
};
const order: ECommerceOrder = {
"identifier": "88528768",
"cartItems": [
addedItem,
// ...
],
"payload": ["black_friday": "true"]
};
// Начало оформления
AppMetrica.beginCheckoutEvent(order);
// Завершение покупки
AppMetrica.purchaseEvent(order);Местоположение
const location: YAMLocation = {
latitude: 51.660781
longitude: 39.200296
// altitude?: number;
// accuracy?: number;
// vAccuracy?: number;
// hAccuracy?: number;
// course?: number;
// speed?: number;
// timestamp?: number;
};
AppMetrica.setLocation(location);AppMetrica.setLocationTracking({ enabled: true });Документация
Android SDK
iOS SDK
Проверка APK на отсутствие .so и советы по ABI/App Bundle
Плагин не тянет analytics-ndk-crashes, поэтому нативные библиотеки AppMetrica не должны попадать в сборку. Можно проверить APK:
APK=app/build/outputs/apk/debug/app-debug.apk
unzip -l "$APK" | grep -E "libappmetrica|\\.so$" || echo "OK: native libs not found"Если нужно дополнительно ограничить ABI (размер APK), можно указать фильтры:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a'
}
}
}Рекомендуется собирать App Bundle (AAB) — Google Play сам доставит нужный ABI на устройство, что уменьшит размер установки и исключит лишние архитектуры.
