Как настроить Push-уведомления в Xamarin?
Настройка Push-уведомлений в Xamarin.Forms требует взаимодействия с внешними службами доставки сообщений (например, Firebase Cloud Messaging (FCM) для Android и Apple Push Notification Service (APNS) для iOS), а также реализации платформенно-зависимой логики на уровне нативных проектов. Общая архитектура включает регистрацию устройства, получение токена, обработку уведомлений и, при необходимости, взаимодействие с сервером для отправки уведомлений.
Общая схема работы Push-уведомлений
-
Регистрация устройства — приложение получает уникальный токен от FCM (Android) или APNS (iOS).
-
Отправка токена на сервер — бэкенд сохраняет токен устройства для последующей доставки сообщений.
-
Отправка уведомления — сервер отправляет уведомление через API Firebase/APNS.
-
Приём и отображение уведомления — приложение отображает уведомление в фоне или обрабатывает в активном режиме.
Настройка Push-уведомлений для Android
1. Создание проекта в Firebase
-
Перейдите в Firebase Console.
-
Создайте проект.
-
Перейдите в Cloud Messaging.
-
Получите Server Key и Sender ID.
-
Добавьте Android-приложение:
-
Укажите Package Name (например, com.companyname.appname)
-
Скачайте google-services.json
-
Добавьте его в корень проекта YourApp.Android.
-
2. Настройка проекта Xamarin.Android
Установка пакета:
Добавьте NuGet:
- Xamarin.Firebase.Messaging
Изменение AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application>
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="default" />
<service android:name="com.google.firebase.messaging.FirebaseMessagingService" />
<service android:name="com.google.firebase.iid.FirebaseInstanceIdService"
android:exported="true"/>
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
android:exported="false" />
</application>
Настройка FirebaseService:
\[Service(Exported = true)\]
\[IntentFilter(new\[\] { "com.google.firebase.MESSAGING_EVENT" })\]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
public override void OnMessageReceived(RemoteMessage message)
{
var body = message.GetNotification()?.Body ?? message.Data\["message"\];
// Обработка уведомления
ShowNotification(body);
}
void ShowNotification(string message)
{
var builder = new NotificationCompat.Builder(this, "default")
.SetContentTitle("Новое сообщение")
.SetContentText(message)
.SetSmallIcon(Resource.Drawable.icon);
var notificationManager = NotificationManagerCompat.From(this);
notificationManager.Notify(0, builder.Build());
}
public override void OnNewToken(string token)
{
// Отправить токен на сервер
}
}
#### **Регистрация канала уведомлений (Android 8+):**
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var channel = new NotificationChannel("default", "Default", NotificationImportance.High);
var manager = (NotificationManager)GetSystemService(NotificationService);
manager.CreateNotificationChannel(channel);
}
Настройка Push-уведомлений для iOS
1. Настройка App ID и сертификатов
-
Перейдите в Apple Developer.
-
Создайте App ID с включенной опцией "Push Notifications".
-
Создайте Push-сертификаты (Production или Development) через Keychain и загрузите в Apple Developer.
-
Включите Push-уведомления в Capabilities проекта.
2. Добавьте Firebase в iOS-проект
-
В Firebase добавьте приложение для iOS.
-
Укажите Bundle Identifier.
-
Скачайте GoogleService-Info.plist и добавьте в YourApp.iOS.
3. Добавьте NuGet и инициализируйте Firebase
Установите:
- Xamarin.Firebase.iOS.CloudMessaging
AppDelegate.cs:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Firebase.Core.App.Configure();
UNUserNotificationCenter.Current.Delegate = new MyUNUserNotificationCenterDelegate();
Messaging.SharedInstance.Delegate = new MyMessagingDelegate();
RegisterForPushNotifications();
return base.FinishedLaunching(app, options);
}
void RegisterForPushNotifications()
{
UNUserNotificationCenter.Current.RequestAuthorization(
UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound,
(granted, error) =>
{
if (granted)
InvokeOnMainThread(UIApplication.SharedApplication.RegisterForRemoteNotifications);
});
}
Обработка токена:
public class MyMessagingDelegate : MessagingDelegate
{
public override void DidReceiveRegistrationToken(Messaging messaging, string fcmToken)
{
// Отправить токен на сервер
}
}
Обработка входящих уведомлений:
public class MyUNUserNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
completionHandler(UNNotificationPresentationOptions.Alert | UNNotificationPresentationOptions.Sound);
}
}
Отправка Push-уведомлений
Можно отправлять уведомления вручную через Post-запрос к FCM:
POST https://fcm.googleapis.com/fcm/send
{
"to": "DEVICE_TOKEN",
"notification": {
"title": "Заголовок",
"body": "Сообщение"
},
"data": {
"key1": "value1",
"key2": "value2"
}
}
Заголовки:
Authorization: key=YOUR_SERVER_KEY
Content-Type: application/json
Использование плагинов
1. Plugin.FirebasePushNotification (объединяет Android/iOS реализацию)
-
Устанавливается через NuGet.
-
Поддерживает получение уведомлений, темы, клики по уведомлениям.
Пример регистрации:
CrossFirebasePushNotification.Current.OnTokenRefresh += (s, p) =>
{
System.Diagnostics.Debug.WriteLine($"TOKEN : {p.Token}");
};
CrossFirebasePushNotification.Current.OnNotificationReceived += (s, p) =>
{
System.Diagnostics.Debug.WriteLine("Received");
};
Тестирование Push-уведомлений
-
На Android можно использовать Firebase Console или curl-запросы.
-
На iOS для тестов нужно использовать реальное устройство, так как симулятор не поддерживает Push.
-
Проверяйте наличие токена и интернет-доступа.
-
Убедитесь, что уведомления разрешены на уровне ОС.
Важные аспекты
-
У пользователей должно быть разрешение на получение уведомлений (особенно в iOS).
-
Поддерживайте обработку в фоне и в активном режиме.
-
Следите за обновлением токенов.
-
Храните токены на сервере и обновляйте при изменении.
-
На iOS нужно заботиться о сертификатах и Provisioning Profile.
Безопасность
-
Никогда не вшивайте Server Key в клиентское приложение.
-
Не передавайте Push-токены третьим лицам.
-
Используйте защищённые каналы между приложением и сервером.
Push-уведомления в Xamarin.Forms требуют конфигурации платформенных SDK (Firebase, APNS), настройки разрешений, получения токенов и их управления. Несмотря на сложность первоначальной настройки, после интеграции они становятся мощным инструментом взаимодействия с пользователями: от напоминаний и оповещений до триггерных событий и маркетинга.