@suro4ek/appmetrica-push-sdk 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AppMetricaPushSDK.podspec +28 -0
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/android/.gradle/9.0.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.0.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.0.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.0.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.0.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build.gradle +44 -0
- package/android/settings.gradle +1 -0
- package/android/src/main/java/com/appmetricapush/AppMetricaPushModule.kt +176 -0
- package/android/src/main/java/com/appmetricapush/AppMetricaPushPackage.kt +21 -0
- package/android/src/main/java/com/appmetricapush/FirebaseMessagingMainService.kt +79 -0
- package/android/src/main/java/com/appmetricapush/SilentPushReceiver.kt +53 -0
- package/docs/ANALYTICS_GUIDE.md +68 -0
- package/docs/INTEGRATION_GUIDE.md +652 -0
- package/docs/IOS_APNS_SETUP.md +95 -0
- package/ios/AppMetricaPushSDK/AppMetricaPushModule.m +25 -0
- package/ios/AppMetricaPushSDK/AppMetricaPushModule.swift +200 -0
- package/package.json +75 -0
- package/src/AppMetricaPushModule.ts +188 -0
- package/src/hooks/useAppMetricaPush.ts +81 -0
- package/src/index.ts +24 -0
- package/src/types/index.ts +35 -0
- package/src/utils/index.ts +121 -0
|
@@ -0,0 +1,652 @@
|
|
|
1
|
+
# Полное руководство по интеграции AppMetrica Push SDK
|
|
2
|
+
|
|
3
|
+
## Содержание
|
|
4
|
+
|
|
5
|
+
1. [Обзор](#обзор)
|
|
6
|
+
2. [Установка](#установка)
|
|
7
|
+
3. [Настройка зависимостей](#настройка-зависимостей)
|
|
8
|
+
4. [Настройка нативного кода](#настройка-нативного-кода)
|
|
9
|
+
5. [Использование в React Native](#использование-в-react-native)
|
|
10
|
+
6. [API Reference](#api-reference)
|
|
11
|
+
7. [Примеры использования](#примеры-использования)
|
|
12
|
+
8. [Troubleshooting](#troubleshooting)
|
|
13
|
+
|
|
14
|
+
## Обзор
|
|
15
|
+
|
|
16
|
+
`@suro4ek/appmetrica-push-sdk` - это React Native библиотека для интеграции с Yandex AppMetrica Push SDK. Библиотека предоставляет единый API для работы с push-уведомлениями на iOS и Android.
|
|
17
|
+
|
|
18
|
+
### Основные возможности
|
|
19
|
+
|
|
20
|
+
- ✅ **Кросс-платформенность** - единый API для iOS и Android
|
|
21
|
+
- ✅ **TypeScript поддержка** - полная типизация
|
|
22
|
+
- ✅ **Автоматическая обработка** - silent push уведомления
|
|
23
|
+
- ✅ **Простая интеграция** - минимум настройки
|
|
24
|
+
- ✅ **Firebase интеграция** - поддержка APNS токенов через Firebase
|
|
25
|
+
|
|
26
|
+
## Установка
|
|
27
|
+
|
|
28
|
+
### 1. Установка библиотеки
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Через npm
|
|
32
|
+
npm install @suro4ek/appmetrica-push-sdk
|
|
33
|
+
|
|
34
|
+
# Через yarn
|
|
35
|
+
yarn add @suro4ek/appmetrica-push-sdk
|
|
36
|
+
|
|
37
|
+
# Через pnpm
|
|
38
|
+
pnpm add @suro4ek/appmetrica-push-sdk
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. Установка зависимостей
|
|
42
|
+
|
|
43
|
+
#### React Native Firebase
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install @react-native-firebase/messaging
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
#### AppMetrica (обязательно)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm install @appmetrica/react-native-analytics
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
#### iOS
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd ios && pod install
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Настройка зависимостей
|
|
62
|
+
|
|
63
|
+
### Android
|
|
64
|
+
|
|
65
|
+
#### 1. Firebase Cloud Messaging
|
|
66
|
+
|
|
67
|
+
Добавьте в `android/app/build.gradle`:
|
|
68
|
+
|
|
69
|
+
```gradle
|
|
70
|
+
dependencies {
|
|
71
|
+
// Firebase Cloud Messaging
|
|
72
|
+
implementation platform('com.google.firebase:firebase-bom:33.2.0')
|
|
73
|
+
implementation 'com.google.firebase:firebase-messaging'
|
|
74
|
+
implementation 'com.google.firebase:firebase-messaging-ktx'
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// В конце файла
|
|
78
|
+
apply plugin: 'com.google.gms.google-services'
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### 2. Google Services
|
|
82
|
+
|
|
83
|
+
Добавьте в `android/build.gradle`:
|
|
84
|
+
|
|
85
|
+
```gradle
|
|
86
|
+
buildscript {
|
|
87
|
+
dependencies {
|
|
88
|
+
classpath 'com.google.gms:google-services:4.4.0'
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### 3. Google Services JSON
|
|
94
|
+
|
|
95
|
+
Скачайте `google-services.json` из Firebase Console и поместите в `android/app/`
|
|
96
|
+
|
|
97
|
+
### iOS
|
|
98
|
+
|
|
99
|
+
#### 1. Firebase Configuration
|
|
100
|
+
|
|
101
|
+
Скачайте `GoogleService-Info.plist` из Firebase Console и добавьте в Xcode проект
|
|
102
|
+
|
|
103
|
+
#### 2. Push Notifications
|
|
104
|
+
|
|
105
|
+
Включите Push Notifications в Xcode:
|
|
106
|
+
|
|
107
|
+
1. Откройте проект в Xcode
|
|
108
|
+
2. Выберите ваш target
|
|
109
|
+
3. Перейдите в "Signing & Capabilities"
|
|
110
|
+
4. Нажмите "+ Capability"
|
|
111
|
+
5. Добавьте "Push Notifications"
|
|
112
|
+
|
|
113
|
+
## Настройка нативного кода
|
|
114
|
+
|
|
115
|
+
### Android
|
|
116
|
+
|
|
117
|
+
#### 1. AndroidManifest.xml
|
|
118
|
+
|
|
119
|
+
Добавьте в `android/app/src/main/AndroidManifest.xml`:
|
|
120
|
+
|
|
121
|
+
```xml
|
|
122
|
+
<application>
|
|
123
|
+
<!-- Silent Push Receiver для AppMetrica Push SDK -->
|
|
124
|
+
<receiver android:name="com.appmetricapush.SilentPushReceiver"
|
|
125
|
+
android:exported="false">
|
|
126
|
+
<intent-filter>
|
|
127
|
+
<action android:name="com.appmetricapush.action.ymp.SILENT_PUSH_RECEIVE"/>
|
|
128
|
+
</intent-filter>
|
|
129
|
+
</receiver>
|
|
130
|
+
|
|
131
|
+
<!-- Firebase Messaging Service для интеграции с AppMetrica Push SDK -->
|
|
132
|
+
<service android:name="com.appmetricapush.FirebaseMessagingMainService"
|
|
133
|
+
android:enabled="true"
|
|
134
|
+
android:exported="false">
|
|
135
|
+
<intent-filter android:priority="100">
|
|
136
|
+
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
|
137
|
+
</intent-filter>
|
|
138
|
+
</service>
|
|
139
|
+
|
|
140
|
+
<!-- Отключаем стандартный AppMetrica Messaging Service -->
|
|
141
|
+
<service android:name="io.appmetrica.analytics.push.provider.firebase.AppMetricaMessagingService"
|
|
142
|
+
android:enabled="false"
|
|
143
|
+
tools:node="remove"/>
|
|
144
|
+
|
|
145
|
+
<!-- Иконка уведомлений по умолчанию для AppMetrica Push SDK -->
|
|
146
|
+
<meta-data android:name="io.appmetrica.analytics.push.default_notification_icon"
|
|
147
|
+
android:resource="@drawable/ic_stat_notification"/>
|
|
148
|
+
</application>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
#### 2. Иконка уведомлений
|
|
152
|
+
|
|
153
|
+
Создайте иконку `ic_stat_notification.png` в `android/app/src/main/res/drawable/`
|
|
154
|
+
|
|
155
|
+
### iOS
|
|
156
|
+
|
|
157
|
+
#### 1. AppDelegate.swift
|
|
158
|
+
|
|
159
|
+
Минимальная настройка (инициализация происходит через React Native):
|
|
160
|
+
|
|
161
|
+
```swift
|
|
162
|
+
import UIKit
|
|
163
|
+
import Firebase
|
|
164
|
+
|
|
165
|
+
@main
|
|
166
|
+
class AppDelegate: UIResponder, UIApplicationDelegate {
|
|
167
|
+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
|
|
168
|
+
// Firebase инициализация
|
|
169
|
+
FirebaseApp.configure()
|
|
170
|
+
|
|
171
|
+
// AppMetrica Push SDK инициализируется через React Native
|
|
172
|
+
return true
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
#### 2. Info.plist
|
|
178
|
+
|
|
179
|
+
Добавьте разрешения для push уведомлений:
|
|
180
|
+
|
|
181
|
+
```xml
|
|
182
|
+
<key>UIBackgroundModes</key>
|
|
183
|
+
<array>
|
|
184
|
+
<string>remote-notification</string>
|
|
185
|
+
</array>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Использование в React Native
|
|
189
|
+
|
|
190
|
+
### ⚠️ Важно: Порядок инициализации
|
|
191
|
+
|
|
192
|
+
**AppMetrica Push SDK должен инициализироваться ТОЛЬКО после активации основной AppMetrica!**
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
import { AppMetrica } from "@appmetrica/react-native-analytics";
|
|
196
|
+
|
|
197
|
+
// 1. Сначала активируем основную AppMetrica
|
|
198
|
+
AppMetrica.activate({
|
|
199
|
+
apiKey: "YOUR_APPMETRICA_API_KEY",
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// 2. ТОЛЬКО ПОСЛЕ этого инициализируем Push SDK
|
|
203
|
+
await AppMetricaPush.initialize({
|
|
204
|
+
debugMode: __DEV__,
|
|
205
|
+
apnsToken: Platform.OS === "ios" ? apnsToken : undefined,
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 1. Базовый пример
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
import { Platform } from "react-native";
|
|
213
|
+
import { getAPNSToken, getMessaging } from "@react-native-firebase/messaging";
|
|
214
|
+
import { AppMetrica } from "@appmetrica/react-native-analytics";
|
|
215
|
+
import { AppMetricaPush } from "@suro4ek/appmetrica-push-sdk";
|
|
216
|
+
|
|
217
|
+
const initializeAppMetricaWithPush = async () => {
|
|
218
|
+
try {
|
|
219
|
+
// 1. Активация основной AppMetrica
|
|
220
|
+
AppMetrica.activate({
|
|
221
|
+
apiKey: "YOUR_APPMETRICA_API_KEY",
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
console.log("AppMetrica activated");
|
|
225
|
+
|
|
226
|
+
// 2. Получение APNS токена для iOS
|
|
227
|
+
let apnsToken = "";
|
|
228
|
+
if (Platform.OS === "ios") {
|
|
229
|
+
const messaging = getMessaging();
|
|
230
|
+
apnsToken = (await getAPNSToken(messaging)) ?? "";
|
|
231
|
+
|
|
232
|
+
if (!apnsToken) {
|
|
233
|
+
console.error("Failed to get APNS token for iOS");
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// 3. Инициализация AppMetrica Push SDK (ТОЛЬКО после AppMetrica.activate)
|
|
239
|
+
const result = await AppMetricaPush.initialize({
|
|
240
|
+
debugMode: __DEV__,
|
|
241
|
+
apnsToken: Platform.OS === "ios" ? apnsToken : undefined,
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
if (result.success) {
|
|
245
|
+
console.log("AppMetrica Push SDK initialized successfully");
|
|
246
|
+
} else {
|
|
247
|
+
console.error("Failed to initialize AppMetrica Push SDK:", result.error);
|
|
248
|
+
}
|
|
249
|
+
} catch (error) {
|
|
250
|
+
console.error("Error initializing AppMetrica Push SDK:", error);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### 2. Обработка push уведомлений
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
import messaging from "@react-native-firebase/messaging";
|
|
259
|
+
import { AppMetricaPush } from "@suro4ek/appmetrica-push-sdk";
|
|
260
|
+
|
|
261
|
+
// Обработка уведомлений в foreground
|
|
262
|
+
const unsubscribe = messaging().onMessage(async (remoteMessage) => {
|
|
263
|
+
console.log("A new FCM message arrived!", remoteMessage);
|
|
264
|
+
|
|
265
|
+
// Проверяем, что уведомление от AppMetrica
|
|
266
|
+
const isFromAppMetrica = await AppMetricaPush.isNotificationFromAppMetrica(
|
|
267
|
+
remoteMessage
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
if (isFromAppMetrica) {
|
|
271
|
+
// Получаем пользовательские данные
|
|
272
|
+
const userData = await AppMetricaPush.getUserData(remoteMessage);
|
|
273
|
+
console.log("AppMetrica user data:", userData);
|
|
274
|
+
|
|
275
|
+
// Показываем уведомление
|
|
276
|
+
// ... ваш код для отображения уведомления
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// Обработка уведомлений при открытии приложения
|
|
281
|
+
messaging().onNotificationOpenedApp((remoteMessage) => {
|
|
282
|
+
console.log(
|
|
283
|
+
"Notification caused app to open from background state:",
|
|
284
|
+
remoteMessage
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
// Проверяем, что уведомление от AppMetrica
|
|
288
|
+
AppMetricaPush.isNotificationFromAppMetrica(remoteMessage).then(
|
|
289
|
+
(isFromAppMetrica) => {
|
|
290
|
+
if (isFromAppMetrica) {
|
|
291
|
+
// Обрабатываем открытие уведомления
|
|
292
|
+
// ... ваш код навигации
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
);
|
|
296
|
+
});
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### 3. Использование React Hook
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
import React from "react";
|
|
303
|
+
import { View, Text } from "react-native";
|
|
304
|
+
import { useAppMetricaPush } from "@suro4ek/appmetrica-push-sdk";
|
|
305
|
+
|
|
306
|
+
const MyComponent = () => {
|
|
307
|
+
const { sdkInfo, isInitialized, isLoading } = useAppMetricaPush();
|
|
308
|
+
|
|
309
|
+
if (isLoading) {
|
|
310
|
+
return <Text>Loading...</Text>;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return (
|
|
314
|
+
<View>
|
|
315
|
+
<Text>SDK initialized: {isInitialized ? "Yes" : "No"}</Text>
|
|
316
|
+
{sdkInfo && <Text>Version: {sdkInfo.version}</Text>}
|
|
317
|
+
</View>
|
|
318
|
+
);
|
|
319
|
+
};
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## API Reference
|
|
323
|
+
|
|
324
|
+
### Основные методы
|
|
325
|
+
|
|
326
|
+
#### `initialize(config: PushConfig): Promise<InitializationResult>`
|
|
327
|
+
|
|
328
|
+
Инициализация AppMetrica Push SDK.
|
|
329
|
+
|
|
330
|
+
**Параметры:**
|
|
331
|
+
|
|
332
|
+
- `config.debugMode?: boolean` - режим отладки
|
|
333
|
+
- `config.apnsToken?: string` - APNS токен для iOS (обязательно)
|
|
334
|
+
- `config.appGroup?: string` - App Group для iOS расширений
|
|
335
|
+
|
|
336
|
+
**Возвращает:**
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
{
|
|
340
|
+
success: boolean;
|
|
341
|
+
error?: string;
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
#### `isNotificationFromAppMetrica(notification: any): Promise<boolean>`
|
|
346
|
+
|
|
347
|
+
Проверяет, что уведомление отправлено через AppMetrica.
|
|
348
|
+
|
|
349
|
+
**Параметры:**
|
|
350
|
+
|
|
351
|
+
- `notification` - объект уведомления
|
|
352
|
+
|
|
353
|
+
**Возвращает:** `boolean`
|
|
354
|
+
|
|
355
|
+
#### `getUserData(notification: any): Promise<any>`
|
|
356
|
+
|
|
357
|
+
Извлекает пользовательские данные из уведомления AppMetrica.
|
|
358
|
+
|
|
359
|
+
**Параметры:**
|
|
360
|
+
|
|
361
|
+
- `notification` - объект уведомления
|
|
362
|
+
|
|
363
|
+
**Возвращает:** объект с пользовательскими данными
|
|
364
|
+
|
|
365
|
+
#### `getSDKInfo(): Promise<SDKInfo | null>`
|
|
366
|
+
|
|
367
|
+
Получает информацию о SDK.
|
|
368
|
+
|
|
369
|
+
**Возвращает:**
|
|
370
|
+
|
|
371
|
+
```typescript
|
|
372
|
+
{
|
|
373
|
+
version: string;
|
|
374
|
+
platform: string;
|
|
375
|
+
sdkName?: string;
|
|
376
|
+
libraryVersion?: string;
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Утилиты
|
|
381
|
+
|
|
382
|
+
#### `initializeAppMetricaPush(config: PushConfig, forceReinit?: boolean): Promise<boolean>`
|
|
383
|
+
|
|
384
|
+
Инициализация с дополнительными проверками.
|
|
385
|
+
|
|
386
|
+
#### `isSDKInitialized(): boolean`
|
|
387
|
+
|
|
388
|
+
Проверяет, инициализирован ли SDK.
|
|
389
|
+
|
|
390
|
+
#### `getCurrentConfig(): PushConfig | null`
|
|
391
|
+
|
|
392
|
+
Получает текущую конфигурацию.
|
|
393
|
+
|
|
394
|
+
#### `registerDeviceToken(deviceToken: string): Promise<boolean>`
|
|
395
|
+
|
|
396
|
+
Регистрирует device token.
|
|
397
|
+
|
|
398
|
+
### React Hook
|
|
399
|
+
|
|
400
|
+
#### `useAppMetricaPush(): UseAppMetricaPushReturn`
|
|
401
|
+
|
|
402
|
+
Хук для работы с SDK в React компонентах.
|
|
403
|
+
|
|
404
|
+
**Возвращает:**
|
|
405
|
+
|
|
406
|
+
```typescript
|
|
407
|
+
{
|
|
408
|
+
sdkInfo: SDKInfo | null;
|
|
409
|
+
isInitialized: boolean;
|
|
410
|
+
isLoading: boolean;
|
|
411
|
+
refreshSDKInfo: () => Promise<void>;
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
## Примеры использования
|
|
416
|
+
|
|
417
|
+
### 1. Полная инициализация
|
|
418
|
+
|
|
419
|
+
```typescript
|
|
420
|
+
import { useEffect } from "react";
|
|
421
|
+
import { Platform } from "react-native";
|
|
422
|
+
import { getAPNSToken, getMessaging } from "@react-native-firebase/messaging";
|
|
423
|
+
import { AppMetrica } from "@appmetrica/react-native-analytics";
|
|
424
|
+
import { AppMetricaPush } from "@suro4ek/appmetrica-push-sdk";
|
|
425
|
+
|
|
426
|
+
export const useAppMetricaPushInit = () => {
|
|
427
|
+
useEffect(() => {
|
|
428
|
+
const init = async () => {
|
|
429
|
+
try {
|
|
430
|
+
// 1. Активация основной AppMetrica (ОБЯЗАТЕЛЬНО ПЕРВЫМ!)
|
|
431
|
+
AppMetrica.activate({
|
|
432
|
+
apiKey: "YOUR_APPMETRICA_API_KEY",
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
console.log("AppMetrica activated");
|
|
436
|
+
|
|
437
|
+
// 2. Получение разрешений на push уведомления
|
|
438
|
+
const authStatus = await messaging().requestPermission();
|
|
439
|
+
const enabled =
|
|
440
|
+
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
|
|
441
|
+
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
|
|
442
|
+
|
|
443
|
+
if (!enabled) {
|
|
444
|
+
console.log("Push notifications not authorized");
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// 3. Получение APNS токена для iOS
|
|
449
|
+
let apnsToken = "";
|
|
450
|
+
if (Platform.OS === "ios") {
|
|
451
|
+
const messagingInstance = getMessaging();
|
|
452
|
+
apnsToken = (await getAPNSToken(messagingInstance)) ?? "";
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// 4. Инициализация AppMetrica Push SDK (ТОЛЬКО после AppMetrica.activate)
|
|
456
|
+
const result = await AppMetricaPush.initialize({
|
|
457
|
+
debugMode: __DEV__,
|
|
458
|
+
apnsToken: Platform.OS === "ios" ? apnsToken : undefined,
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
if (result.success) {
|
|
462
|
+
console.log("AppMetrica Push SDK initialized");
|
|
463
|
+
}
|
|
464
|
+
} catch (error) {
|
|
465
|
+
console.error("Failed to initialize AppMetrica Push SDK:", error);
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
init();
|
|
470
|
+
}, []);
|
|
471
|
+
};
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### 2. Обработка уведомлений с навигацией
|
|
475
|
+
|
|
476
|
+
```typescript
|
|
477
|
+
import { AppMetricaPush } from "@suro4ek/appmetrica-push-sdk";
|
|
478
|
+
import { NavigationContainerRef } from "@react-navigation/native";
|
|
479
|
+
|
|
480
|
+
const handleNotificationPress = async (notification: any) => {
|
|
481
|
+
const isFromAppMetrica = await AppMetricaPush.isNotificationFromAppMetrica(
|
|
482
|
+
notification
|
|
483
|
+
);
|
|
484
|
+
|
|
485
|
+
if (isFromAppMetrica) {
|
|
486
|
+
const userData = await AppMetricaPush.getUserData(notification);
|
|
487
|
+
|
|
488
|
+
// Навигация на основе данных уведомления
|
|
489
|
+
if (userData?.screen) {
|
|
490
|
+
navigationRef.current?.navigate(userData.screen, userData.params);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
};
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
### 3. Отслеживание событий
|
|
497
|
+
|
|
498
|
+
```typescript
|
|
499
|
+
import { AppMetricaPush } from "@suro4ek/appmetrica-push-sdk";
|
|
500
|
+
|
|
501
|
+
const trackPushEvent = async (notification: any, action: string) => {
|
|
502
|
+
const isFromAppMetrica = await AppMetricaPush.isNotificationFromAppMetrica(
|
|
503
|
+
notification
|
|
504
|
+
);
|
|
505
|
+
|
|
506
|
+
if (isFromAppMetrica) {
|
|
507
|
+
const userData = await AppMetricaPush.getUserData(notification);
|
|
508
|
+
|
|
509
|
+
// Отправка события в аналитику
|
|
510
|
+
analytics.track("push_notification_action", {
|
|
511
|
+
action,
|
|
512
|
+
campaign_id: userData?.campaign_id,
|
|
513
|
+
message_id: userData?.message_id,
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
## Troubleshooting
|
|
520
|
+
|
|
521
|
+
### Частые проблемы
|
|
522
|
+
|
|
523
|
+
#### 1. "AppMetricaPushModule is not available"
|
|
524
|
+
|
|
525
|
+
**Причины:**
|
|
526
|
+
|
|
527
|
+
- Библиотека не установлена
|
|
528
|
+
- Не выполнена линковка (iOS)
|
|
529
|
+
- Не пересобран проект
|
|
530
|
+
|
|
531
|
+
**Решение:**
|
|
532
|
+
|
|
533
|
+
```bash
|
|
534
|
+
# Переустановка
|
|
535
|
+
npm uninstall @suro4ek/appmetrica-push-sdk
|
|
536
|
+
npm install @suro4ek/appmetrica-push-sdk
|
|
537
|
+
|
|
538
|
+
# iOS
|
|
539
|
+
cd ios && pod install
|
|
540
|
+
|
|
541
|
+
# Пересборка
|
|
542
|
+
npx react-native run-ios
|
|
543
|
+
npx react-native run-android
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
#### 2. Push-уведомления не приходят
|
|
547
|
+
|
|
548
|
+
**Проверьте:**
|
|
549
|
+
|
|
550
|
+
1. **Порядок инициализации:**
|
|
551
|
+
|
|
552
|
+
```typescript
|
|
553
|
+
// ❌ НЕПРАВИЛЬНО - Push SDK инициализируется до AppMetrica
|
|
554
|
+
await AppMetricaPush.initialize(config);
|
|
555
|
+
AppMetrica.activate({ apiKey: "YOUR_KEY" });
|
|
556
|
+
|
|
557
|
+
// ✅ ПРАВИЛЬНО - сначала AppMetrica, потом Push SDK
|
|
558
|
+
AppMetrica.activate({ apiKey: "YOUR_KEY" });
|
|
559
|
+
await AppMetricaPush.initialize(config);
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
2. **Firebase настройки:**
|
|
563
|
+
|
|
564
|
+
- `google-services.json` в `android/app/`
|
|
565
|
+
- `GoogleService-Info.plist` в iOS проекте
|
|
566
|
+
|
|
567
|
+
3. **Разрешения:**
|
|
568
|
+
|
|
569
|
+
```typescript
|
|
570
|
+
const authStatus = await messaging().requestPermission();
|
|
571
|
+
console.log("Authorization status:", authStatus);
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
4. **APNS токен (iOS):**
|
|
575
|
+
|
|
576
|
+
```typescript
|
|
577
|
+
const apnsToken = await getAPNSToken(getMessaging());
|
|
578
|
+
console.log("APNS token:", apnsToken);
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
5. **Логи:**
|
|
582
|
+
|
|
583
|
+
```bash
|
|
584
|
+
# Android
|
|
585
|
+
npx react-native log-android
|
|
586
|
+
|
|
587
|
+
# iOS
|
|
588
|
+
npx react-native log-ios
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
#### 3. Ошибки компиляции
|
|
592
|
+
|
|
593
|
+
**Решение:**
|
|
594
|
+
|
|
595
|
+
```bash
|
|
596
|
+
# Очистка кэша
|
|
597
|
+
npx react-native start --reset-cache
|
|
598
|
+
|
|
599
|
+
# Очистка build
|
|
600
|
+
cd android && ./gradlew clean
|
|
601
|
+
cd ios && xcodebuild clean
|
|
602
|
+
|
|
603
|
+
# Пересборка
|
|
604
|
+
npx react-native run-android
|
|
605
|
+
npx react-native run-ios
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
#### 4. Silent Push не работает
|
|
609
|
+
|
|
610
|
+
**Проверьте AndroidManifest.xml:**
|
|
611
|
+
|
|
612
|
+
```xml
|
|
613
|
+
<receiver android:name="com.appmetricapush.SilentPushReceiver"
|
|
614
|
+
android:exported="false">
|
|
615
|
+
<intent-filter>
|
|
616
|
+
<action android:name="com.appmetricapush.action.ymp.SILENT_PUSH_RECEIVE"/>
|
|
617
|
+
</intent-filter>
|
|
618
|
+
</receiver>
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
#### 5. Уведомления без звука
|
|
622
|
+
|
|
623
|
+
**Для Android:** Убедитесь, что в AppMetrica указан канал `appmetrica_push_channel`
|
|
624
|
+
|
|
625
|
+
**Для iOS:** Проверьте настройки APNS сертификатов
|
|
626
|
+
|
|
627
|
+
### Отладка
|
|
628
|
+
|
|
629
|
+
#### Включение debug режима
|
|
630
|
+
|
|
631
|
+
```typescript
|
|
632
|
+
await AppMetricaPush.initialize({
|
|
633
|
+
debugMode: true, // Включает подробные логи
|
|
634
|
+
apnsToken: apnsToken,
|
|
635
|
+
});
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
#### Проверка статуса SDK
|
|
639
|
+
|
|
640
|
+
```typescript
|
|
641
|
+
const isInitialized = AppMetricaPush.isSDKInitialized();
|
|
642
|
+
const config = AppMetricaPush.getConfig();
|
|
643
|
+
const sdkInfo = await AppMetricaPush.getSDKInfo();
|
|
644
|
+
|
|
645
|
+
console.log("SDK Status:", { isInitialized, config, sdkInfo });
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
### Поддержка
|
|
649
|
+
|
|
650
|
+
- **GitHub Issues:** [suro4ek/appmetrica-push-sdk](https://github.com/suro4ek/appmetrica-push-sdk/issues)
|
|
651
|
+
- **AppMetrica Docs:** [Push SDK Documentation](https://appmetrica.yandex.ru/docs/mobile-sdk-dg/push-sdk/about.html)
|
|
652
|
+
- **Firebase Docs:** [React Native Firebase](https://rnfirebase.io/)
|