Passer au contenu

MAUI Dotnet

Prérequis

Anchor link to

Pour intégrer le SDK, votre projet MAUI a besoin de la version de package, des frameworks cibles et des versions minimales de système d’exploitation suivants :

  • Pushwoosh.DotNet 2.1.0 ou une version ultérieure. Le package fournit des builds pour .NET 8 et .NET 10 (net10.0-android36.0 et net10.0-ios26.0).

  • Android : framework cible net8.0-android34.0 ou supérieur, appareils avec l’API 23 ou une version ultérieure. Un simple net8.0-android est résolu en android34.0 avec le SDK .NET 8.

  • iOS : appareils avec iOS 15.0 ou une version ultérieure. Définissez le minimum dans votre fichier de projet :

    <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>

    Avec une valeur inférieure, la compilation s’arrête avec error PW0001.

Intégration du SDK

Anchor link to

1. Ajoutez le paquet Nuget Pushwoosh.DotNet aux projets Android et iOS :

2. Acceptez les licences pour les dépendances Android transitives si nécessaire :

3. Configurez votre projet dans la console Firebase.

4. Ajoutez google-services.json à la racine du répertoire de votre plateforme Android. Définissez l’action de build GoogleServicesJson pour ce fichier :

5. Ajoutez la ligne suivante avant de déclarer l’espace de noms dans votre MainApplication.cs (XXXXX-XXXXX est ici votre code d’application Pushwoosh) :

[assembly: MetaData("com.pushwoosh.appid", Value = "XXXXX-XXXXX")]

6. Dans votre MainApplication.cs, surchargez OnCreate() et appelez PushManager.Init(); avant 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() construit l’application MAUI et crée App, qui utilise déjà PushManager.Instance. N’appelez pas PushManager.Init() depuis MainActivity.OnCreate. L’activité est créée après App, donc PushManager.Instance serait encore null au moment où App en a besoin.

7. Dans votre AndroidManifest.xml, ajoutez ce qui suit :

<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_TYPE_API_TOKEN" />

Important : Assurez-vous que le jeton d’API de l’appareil a accès à la bonne application dans votre panneau de contrôle Pushwoosh. En savoir plus

8. Dans le dossier de la plateforme iOS, créez Platforms/iOS/Entitlements.plist avec la clé 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>

Sans cet entitlement, iOS n’émet pas de jeton d’appareil APNs, et Register() échoue donc systématiquement. Utilisez development pour les builds de débogage. Un build de distribution nécessite production et un profil de provisionnement avec les notifications push activées.

9. Dans votre fichier de projet (.csproj), indiquez le fichier d’entitlements à la cible iOS :

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
<CodesignEntitlements>Platforms/iOS/Entitlements.plist</CodesignEntitlements>
</PropertyGroup>

10. Dans le fichier AppDelegate.cs de votre projet iOS, appelez PushManager.Init(); au début de la méthode FinishedLaunching :

using Foundation;
using UIKit;
using Pushwoosh.iOS;
...
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
PushManager.Init();
return base.FinishedLaunching(application, launchOptions);
}

11. Ajoutez ces méthodes à l’AppDelegate. La classe MauiUIApplicationDelegate ne les exporte pas par défaut, ajoutez-les donc manuellement :

[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. Dans le fichier Info.plist, modifiez la valeur de Pushwoosh_APPID par votre code d’application Pushwoosh. Vous pouvez le trouver dans votre panneau de contrôle :

13. Dans le fichier Info.plist, définissez la clé Pushwoosh_API_TOKEN sur votre jeton d’API d’appareil Pushwoosh.

Important : Assurez-vous de donner au jeton l’accès à la bonne application dans votre panneau de contrôle Pushwoosh. En savoir plus

14. Dans la partie multiplateforme de App.xaml.cs, appelez Register() dans la méthode OnStart. Elle demande à l’utilisateur l’autorisation d’envoyer des notifications et enregistre l’appareil pour les notifications push :

using PushwooshSDK.DotNet.Core;
...
public partial class App : Application
{
...
protected override void OnStart()
{
base.OnStart();
PushManager.Instance.Register();
}
}

Mise à niveau de 2.0.x vers 2.1.0

Anchor link to

Si votre application a été configurée avec une version antérieure de ce guide, apportez ces modifications lors de la mise à jour vers 2.1.0 :

  • Sur Android, déplacez PushManager.Init() de MainActivity.OnCreate vers MainApplication.OnCreate, avant base.OnCreate(), comme à l’étape 6. Si vous utilisez les Geozones, déplacez-y aussi LocationManager.Init(), juste après PushManager.Init().
  • Supprimez la ligne de métadonnées com.pushwoosh.senderid et la chaîne fcm_sender_id de Resources/values/strings.xml. Le SDK ne les lit pas.
  • Sur iOS, ajoutez l’entitlement aps-environment des étapes 8 et 9 si votre application ne l’a pas encore.
  • Passez SupportedOSPlatformVersion de la cible iOS à 15.0, comme indiqué dans Prérequis. Le modèle de projet MAUI 8 définit 11.0.
  • Si votre application utilise les Geozones, mettez à jour Pushwoosh.DotNet.Geozones vers 2.1.0 en même temps que Pushwoosh.DotNet. Avec Geozones 2.0.x, la compilation s’arrête avec error PW0002.
  • PWInlineInAppView sur iOS est marqué [Obsolete] et n’affiche rien, car le SDK iOS natif 7.x ne prend pas en charge les messages in-app inline. Supprimez-le de vos layouts.

Remarque pour les utilisateurs de Windows : Lors de la compilation, vous pouvez rencontrer un problème lié à la longueur du chemin du fichier. Cela est dû au fait que la longueur combinée des répertoires utilisés par Visual Studio et des chemins de fichiers dans le SDK Pushwoosh dépasse la limitation de longueur de chemin maximale de Windows de 260 caractères. Pour résoudre ce problème, activez le paramètre LongPathsEnabled dans le Registre Windows.

Partagez vos commentaires avec nous

Anchor link to

Vos commentaires nous aident à créer une meilleure expérience, nous serions donc ravis de vous entendre si vous rencontrez des problèmes lors du processus d’intégration du SDK. Si vous rencontrez des difficultés, n’hésitez pas à nous faire part de vos réflexions via ce formulaire.