Перейти к содержанию

MAUI Dotnet

Требования

Anchor link to

Для интеграции SDK вашему проекту MAUI нужны следующие версия пакета, целевые платформы и минимальные версии ОС:

  • Pushwoosh.DotNet 2.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 to

1. Добавьте 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:

Info.plist в Xcode, где ключу Pushwoosh_APPID задан код приложения

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. Если вы столкнулись с какими-либо трудностями, пожалуйста, не стесняйтесь поделиться своими мыслями с нами через эту форму.