MAUI Dotnet
Требования
Anchor link toДля интеграции SDK вашему проекту MAUI нужны следующие версия пакета, целевые платформы и минимальные версии ОС:
-
Pushwoosh.DotNet2.1.0 или новее. Пакет поставляется со сборками для .NET 8 и .NET 10 (net10.0-android36.0иnet10.0-ios26.0). -
Android: целевая платформа
net8.0-android34.0или выше, устройства с API 23 или новее. Простойnet8.0-androidв .NET 8 SDK разрешается вandroid34.0. -
iOS: устройства с iOS 15.0 или новее. Укажите минимальную версию в файле проекта:
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>При меньшем значении сборка останавливается с
error PW0001.
Интеграция SDK
Anchor link to1. Добавьте Nuget-пакет Pushwoosh.DotNet в проекты для Android и iOS:

2. Примите лицензии для транзитивных зависимостей Android, если это необходимо:

3. Настройте ваш проект в Firebase Console.
4. Добавьте google-services.json в корневой каталог вашей платформы Android. Установите для этого файла действие сборки GoogleServicesJson:

5. Добавьте следующую строку перед объявлением пространства имен в вашем файле MainApplication.cs (XXXXX-XXXXX — это ваш Pushwoosh Application Code):
[assembly: MetaData("com.pushwoosh.appid", Value = "XXXXX-XXXXX")]6. В вашем файле MainApplication.cs переопределите метод OnCreate() и вызовите PushManager.Init(); до base.OnCreate();:
using Android.App;using Android.Runtime;using Pushwoosh.Android;...[Application]public class MainApplication : MauiApplication{ public MainApplication(IntPtr handle, JniHandleOwnership ownership) : base(handle, ownership) { }
public override void OnCreate() { PushManager.Init(); base.OnCreate(); }
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();}base.OnCreate() собирает приложение MAUI и создает App, который уже использует PushManager.Instance. Не вызывайте PushManager.Init() из MainActivity.OnCreate. Activity создается после App, поэтому, когда PushManager.Instance понадобится App, он все еще будет null.
7. В ваш AndroidManifest.xml добавьте следующее:
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_TYPE_API_TOKEN" />Важно: Убедитесь, что Device API token имеет доступ к нужному приложению в вашей Pushwoosh Control Panel. Подробнее
8. В папке платформы iOS создайте файл Platforms/iOS/Entitlements.plist с ключом aps-environment:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>aps-environment</key> <string>development</string></dict></plist>Без этого entitlement iOS не выдает APNs device token, поэтому Register() всегда завершается ошибкой. Для отладочных сборок используйте development. Для дистрибутивной сборки нужны production и provisioning profile с включенными push-уведомлениями.
9. В файле проекта (.csproj) укажите файл entitlements для цели iOS:
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'"> <CodesignEntitlements>Platforms/iOS/Entitlements.plist</CodesignEntitlements></PropertyGroup>10. В файле AppDelegate.cs вашего проекта iOS вызовите PushManager.Init(); в начале метода FinishedLaunching:
using Foundation;using UIKit;using Pushwoosh.iOS;...public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions){ PushManager.Init(); return base.FinishedLaunching(application, launchOptions);}11. Добавьте эти методы в AppDelegate. Класс MauiUIApplicationDelegate не экспортирует их по умолчанию, поэтому добавьте их вручную:
[Export("application:didReceiveRemoteNotification:fetchCompletionHandler:")] public void DidReceiveRemoteNotification(UIKit.UIApplication application, NSDictionary userInfo, Action<UIKit.UIBackgroundFetchResult> completionHandler) { PushManager.Instance.ReceivedRemoteNotification(userInfo); }
[Export("application:didRegisterForRemoteNotificationsWithDeviceToken:")] public void RegisteredForRemoteNotifications(UIKit.UIApplication application, NSData deviceToken) { PushManager.Instance.RegisteredForRemoteNotifications(deviceToken); }
[Export("application:didFailToRegisterForRemoteNotificationsWithError:")] public void FailedToRegisterForRemoteNotifications(UIKit.UIApplication application, NSError error) { PushManager.Instance.FailedToRegisterForRemoteNotifications(error); }12. В файле Info.plist измените значение Pushwoosh_APPID на ваш Pushwoosh Application Code. Его можно найти в вашей Control Panel:

13. В файле Info.plist задайте ключу Pushwoosh_API_TOKEN значение вашего Pushwoosh Device API Token.
Важно: Убедитесь, что токен имеет доступ к нужному приложению в вашей Pushwoosh Control Panel. Подробнее
14. В кроссплатформенной части файла App.xaml.cs вызовите Register() в методе OnStart. Он запрашивает у пользователя разрешение на уведомления и регистрирует устройство для push-уведомлений:
using PushwooshSDK.DotNet.Core;...public partial class App : Application{... protected override void OnStart() { base.OnStart(); PushManager.Instance.Register(); }}Обновление с 2.0.x до 2.1.0
Anchor link toЕсли ваше приложение было настроено по более ранней версии этого руководства, при обновлении до 2.1.0 внесите следующие изменения:
- На Android перенесите
PushManager.Init()изMainActivity.OnCreateвMainApplication.OnCreate, доbase.OnCreate(), как в шаге 6. Если вы используете Geozones, перенесите туда жеLocationManager.Init(), сразу послеPushManager.Init(). - Удалите строку метаданных
com.pushwoosh.senderidи строкуfcm_sender_idиз Resources/values/strings.xml. SDK их не читает. - На iOS добавьте entitlement
aps-environmentиз шагов 8 и 9, если в вашем приложении его еще нет. - Поднимите
SupportedOSPlatformVersionдля цели iOS до 15.0, как показано в разделе Требования. Шаблон проекта MAUI 8 задает 11.0. - Если ваше приложение использует Geozones, обновите
Pushwoosh.DotNet.Geozonesдо 2.1.0 вместе сPushwoosh.DotNet. С Geozones 2.0.x сборка останавливается сerror PW0002. PWInlineInAppViewна iOS помечен как[Obsolete]и ничего не отображает, потому что в нативном iOS SDK 7.x нет встроенных In-App-сообщений. Удалите его из своих макетов.
Примечание для пользователей Windows: При сборке вы можете столкнуться с проблемой, связанной с длиной пути к файлу. Это связано с тем, что общая длина каталогов, используемых Visual Studio, и путей к файлам в Pushwoosh SDK превышает ограничение Windows на максимальную длину пути в 260 символов. Чтобы решить эту проблему, включите параметр LongPathsEnabled в реестре Windows.
Поделитесь с нами своим мнением
Anchor link toВаши отзывы помогают нам улучшать наш продукт, поэтому мы будем рады, если вы расскажете нам о любых проблемах, возникших в процессе интеграции SDK. Если вы столкнулись с какими-либо трудностями, пожалуйста, не стесняйтесь поделиться своими мыслями с нами через эту форму.