MAUI Dotnet
요구 사항
Anchor link toSDK를 통합하려면 MAUI 프로젝트가 다음 패키지 버전, 대상 프레임워크 및 최소 OS 버전을 충족해야 합니다:
-
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. Android 및 iOS 프로젝트 모두에 Pushwoosh.DotNet Nuget 패키지를 추가합니다:

2. 필요한 경우 전이적 Android 종속성에 대한 라이선스에 동의합니다:

3. Firebase Console에서 프로젝트를 구성합니다.
4. google-services.json을 Android 플랫폼 디렉터리의 루트에 추가합니다. 이 파일에 대해 GoogleServicesJson 빌드 작업을 설정합니다:

5. MainApplication.cs에서 네임스페이스를 선언하기 전에 다음 줄을 추가합니다(XXXXX-XXXXX는 Pushwoosh 애플리케이션 코드입니다):
[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 토큰이 Pushwoosh 제어판의 올바른 애플리케이션에 액세스할 수 있는지 확인하십시오. 자세히 알아보기
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과 푸시 알림이 활성화된 프로비저닝 프로필이 필요합니다.
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 애플리케이션 코드로 변경합니다. 제어판에서 찾을 수 있습니다:

13. Info.plist에서 Pushwoosh_API_TOKEN 키를 Pushwoosh Device API 토큰으로 설정합니다.
중요: 토큰이 Pushwoosh 제어판의 올바른 앱에 액세스할 수 있도록 하십시오. 자세히 알아보기
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에서는 6단계와 같이
PushManager.Init()를MainActivity.OnCreate에서MainApplication.OnCreate의base.OnCreate()앞으로 옮깁니다. Geozones를 사용하는 경우LocationManager.Init()도PushManager.Init()바로 다음으로 옮깁니다. com.pushwoosh.senderid메타데이터 줄과 Resources/values/strings.xml의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 SDK 7.x에는 인라인 인앱 메시지가 없으므로 iOS의
PWInlineInAppView는[Obsolete]로 표시되며 아무것도 표시하지 않습니다. 레이아웃에서 제거하세요.
Windows 사용자 참고: 빌드 시 파일 경로 길이와 관련된 문제가 발생할 수 있습니다. 이는 Visual Studio에서 사용하는 디렉터리와 Pushwoosh SDK 내의 파일 경로의 총 길이가 Windows의 최대 경로 길이 제한인 260자를 초과하기 때문입니다. 이 문제를 해결하려면 Windows 레지스트리에서 LongPathsEnabled 설정을 활성화하십시오.
피드백 공유
Anchor link to여러분의 피드백은 더 나은 경험을 만드는 데 도움이 됩니다. SDK 통합 과정에서 문제가 발생하면 언제든지 알려주시기 바랍니다. 어려움이 있으시면 주저하지 마시고 이 양식을 통해 의견을 공유해 주세요.