MAUI Dotnet
要集成 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 或更高版本。在 .NET 8 SDK 上,单纯的net8.0-android会解析为android34.0。 -
iOS:设备 iOS 15.0 或更高版本。在项目文件中设置最低版本:
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>如果设置的值更低,构建会以
error PW0001停止。
SDK 集成
Anchor link to1. 将 Pushwoosh.DotNet Nuget 包添加到 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(),并在 base.OnCreate(); 之前调用 PushManager.Init();:
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,而 App 已经在使用 PushManager.Instance。不要在 MainActivity.OnCreate 中调用 PushManager.Init()。Activity 在 App 之后创建,因此当 App 需要 PushManager.Instance 时,它仍然是 null。
7. 在您的 AndroidManifest.xml 中,添加以下内容:
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_TYPE_API_TOKEN" />重要提示: 确保 Device API token (设备 API 令牌) 在您的 Pushwoosh Control Panel 中有权访问正确的应用程序。了解更多
8. 在 iOS 平台文件夹中,创建带有 aps-environment 键的 Platforms/iOS/Entitlements.plist:
<?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 设备令牌,因此 Register() 总是失败。调试构建请使用 development。分发构建需要 production 以及启用了推送通知的描述文件(provisioning profile)。
9. 在您的项目文件(.csproj)中,将 iOS 目标指向 entitlements 文件:
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'"> <CodesignEntitlements>Platforms/iOS/Entitlements.plist</CodesignEntitlements></PropertyGroup>10. 在您的 iOS 项目的 AppDelegate.cs 中,在 FinishedLaunching 方法的开头调用 PushManager.Init();:
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 (设备 API 令牌)。
重要提示: 请务必为该令牌授予访问您 Pushwoosh Control Panel 中正确应用程序的权限。了解更多
14. 在 App.xaml.cs 的跨平台部分,在 OnStart 方法中调用 Register()。它会向用户请求通知权限,并为设备注册推送通知:
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()之后。 - 从 Resources/values/strings.xml 中删除
com.pushwoosh.senderid元数据行和fcm_sender_id字符串。SDK 不会读取它们。 - 在 iOS 上,如果您的应用还没有第 8 步和第 9 步中的
aps-environmententitlement,请添加它。 - 将 iOS 目标的
SupportedOSPlatformVersion提高到 15.0,如要求中所示。MAUI 8 项目模板设置的是 11.0。 - 如果您的应用使用 Geozones,请将
Pushwoosh.DotNet.Geozones与Pushwoosh.DotNet一起更新到 2.1.0。使用 Geozones 2.0.x 时,构建会以error PW0002停止。 - iOS 上的
PWInlineInAppView已标记为[Obsolete]且不显示任何内容,因为原生 iOS SDK 7.x 不支持内嵌应用内消息。请将其从您的布局中删除。
Windows 用户请注意: 在构建时,您可能会遇到与文件路径长度相关的问题。 这是因为 Visual Studio 使用的目录和 Pushwoosh SDK 内的文件路径的组合长度超过了 Windows 260 个字符的最大路径长度限制。 要解决此问题,请在 Windows 注册表中启用 LongPathsEnabled 设置。
与我们分享您的反馈
Anchor link to您的反馈有助于我们创造更好的体验,因此,如果您在 SDK 集成过程中遇到任何问题,我们非常希望听到您的声音。如果您遇到任何困难,请随时通过此表单与我们分享您的想法。