Диагностика проблемы с push-уведомлениями в WooCommerce на мобильных устройствах
Если push-уведомления, например, о новых заказах или изменениях статуса заказов, не приходят на мобильные устройства, следует проверить несколько ключевых моментов:
- Корректность настройки сервиса отправки push-уведомлений (OneSignal, Firebase Cloud Messaging и др.).
- Правильность интеграции push-уведомлений с WooCommerce и WordPress.
- Отсутствие конфликтов с плагинами кеширования или оптимизации.
- Разрешения браузера и устройства на получение уведомлений.
- Ошибки в консоли браузера и серверном логе.
Пошаговое решение проблемы с push-уведомлениями
1. Проверка и настройка Firebase Cloud Messaging (FCM) или другого сервиса
Если вы используете FCM, убедитесь, что:
- В консоли Firebase создан проект и настроен web push сертификат (ключи VAPID).
- В вашем WordPress или плагине push-уведомлений внесены корректные ключи и идентификаторы.
Пример правильной инициализации Firebase в вашем JavaScript-файле сервиса:
import { initializeApp } from 'firebase/app';
import { getMessaging, getToken, onMessage } from 'firebase/messaging';
const firebaseConfig = {
apiKey: 'ВАШ_API_KEY',
authDomain: 'project-id.firebaseapp.com',
projectId: 'project-id',
messagingSenderId: 'ВАШ_SENDER_ID',
appId: 'ВАШ_APP_ID',
vapidKey: 'ВАШ_VAPID_KEY'
};
const app = initializeApp(firebaseConfig);
const messaging = getMessaging(app);
getToken(messaging, { vapidKey: firebaseConfig.vapidKey }).then((currentToken) => {
if (currentToken) {
console.log('FCM Token:', currentToken);
// Отправьте токен на сервер для регистрации
} else {
console.log('Нет разрешения на получение токенов.');
}
}).catch((err) => {
console.error('Ошибка получения токена.', err);
});2. Интеграция с WooCommerce через хуки
Для отправки push-уведомлений при смене статуса заказа используйте хук woocommerce_order_status_changed:
add_action('woocommerce_order_status_changed', 'send_push_on_order_status_change', 10, 4);
function send_push_on_order_status_change($order_id, $old_status, $new_status, $order) {
$user_id = $order->get_user_id();
// Получить FCM токен пользователя из мета или настроек
$fcm_token = get_user_meta($user_id, 'fcm_token', true);
if (!$fcm_token) {
return;
}
$title = 'Статус вашего заказа изменён';
$body = "Заказ #$order_id теперь имеет статус: $new_status";
// Отправка push через FCM
$payload = [
'to' => $fcm_token,
'notification' => [
'title' => $title,
'body' => $body,
'click_action' => home_url(),
]
];
$args = [
'body' => json_encode($payload),
'headers' => [
'Authorization' => 'key=ВАШ_SERVER_KEY',
'Content-Type' => 'application/json',
],
];
wp_remote_post('https://fcm.googleapis.com/fcm/send', $args);
}3. Проверка разрешений браузера и устройства
На мобильном устройстве откройте сайт в браузере, проверьте, что браузер запрашивает разрешение на получение уведомлений, и что пользователь не заблокировал их вручную. В настройках браузера и ОС проверьте, что уведомления разрешены для вашего сайта.
Как проверить, что push-уведомления работают
- Откройте консоль браузера на мобильном устройстве (или эмуляторе) и проверьте вывод сообщений об инициализации FCM и получении токена.
- Отправьте тестовое уведомление через консоль Firebase или с помощью кода.
- Измените статус заказа в WooCommerce и проверьте, приходит ли уведомление на устройство.
- Используйте инструменты разработчика и логи на сервере, чтобы убедиться, что запросы к FCM успешно проходят.
Частые ошибки и способы их исправления
- Отсутствие токена FCM у пользователя: проверьте, что токен сохраняется при первом запросе и есть в метаданных пользователя.
- Ключи и серверный ключ FCM неверны: перепроверьте в Firebase Console, что вы используете актуальные ключи.
- Конфликты с кешированием: отключите кеширование для скриптов push-уведомлений и REST API.
- Браузер блокирует уведомления: очистите настройки разрешений для сайта и дайте разрешение заново.
- Ошибки в JSON-формате запроса к FCM: используйте
json_encodeи проверяйте тело запроса.
Практические советы по безопасности и производительности
- Не храните серверный ключ FCM в открытом доступе, используйте защищенные переменные окружения.
- Ограничьте частоту отправки уведомлений, чтобы не создавать нагрузку и не раздражать пользователей.
- Используйте очереди или WP-Cron для отправки уведомлений, если заказов много.
- Проверяйте и обновляйте зависимости вашего JavaScript SDK Firebase для совместимости с последними версиями браузеров.
- Минимизируйте размер payload уведомлений, чтобы быстро доставлять сообщения даже при медленном мобильном интернете.
Сравнение вариантов реализации push-уведомлений в WooCommerce
| Метод | Плагин | Код | Плюсы | Минусы |
|---|---|---|---|---|
| Готовые плагины (OneSignal, PushEngage) | Да | Нет | Простота настройки, готовые UI, поддержка | Зависимость от сторонних сервисов, лимиты |
| Собственная интеграция с FCM через код | Нет | Да | Максимальный контроль, отсутствие сторонних ограничений | Требует навыков, больше поддержки |
| Использование REST API WooCommerce + внешних сервисов | Частично | Да | Гибкость, масштабируемость | Сложность реализации |