ข้ามไปยังเนื้อหา

MAUI Dotnet

ข้อกำหนด

Anchor link to

ในการผสานการทำงาน SDK โปรเจกต์ MAUI ของคุณต้องใช้เวอร์ชันแพ็กเกจ, target framework และเวอร์ชัน OS ขั้นต่ำดังต่อไปนี้:

  • Pushwoosh.DotNet 2.1.0 ขึ้นไป แพ็กเกจนี้มีบิลด์สำหรับ .NET 8 และ .NET 10 (net10.0-android36.0 และ net10.0-ios26.0)

  • Android: target framework 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 to

1. เพิ่มแพ็คเกจ Nuget Pushwoosh.DotNet ไปยังโปรเจกต์ทั้ง Android และ iOS:

2. ยอมรับใบอนุญาตสำหรับ dependency ของ Android ที่ส่งผ่านหากจำเป็น:

3. กำหนดค่าโปรเจกต์ของคุณใน Firebase Console

4. เพิ่ม google-services.json ไปยังไดเรกทอรีรากของแพลตฟอร์ม Android ของคุณ ตั้งค่า build action เป็น GoogleServicesJson สำหรับไฟล์นี้:

5. เพิ่มบรรทัดต่อไปนี้ก่อนการประกาศ namespace ในไฟล์ MainApplication.cs ของคุณ (XXXXX-XXXXX ในที่นี้คือ Pushwoosh Application Code ของคุณ):

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

6. ในไฟล์ MainApplication.cs ของคุณ ให้ override 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 จะยังคงเป็น null เมื่อ App ต้องการใช้งาน

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 notifications

9. ในไฟล์โปรเจกต์ (.csproj) ของคุณ ให้กำหนดให้ target ของ iOS ชี้ไปยังไฟล์ entitlements:

<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 เมธอดเหล่านี้โดยค่าเริ่มต้น ดังนั้นให้เพิ่มด้วยตนเอง:

[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. ในส่วน cross-platform ของไฟล์ App.xaml.cs ให้เรียกใช้ Register() ในเมธอด OnStart ซึ่งจะขอสิทธิ์การแจ้งเตือนจากผู้ใช้และลงทะเบียนอุปกรณ์เพื่อรับ push notifications:

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() ทันที
  • ลบบรรทัด metadata com.pushwoosh.senderid และสตริง fcm_sender_id ออกจาก Resources/values/strings.xml เนื่องจาก SDK ไม่ได้อ่านค่าเหล่านี้
  • บน iOS ให้เพิ่ม entitlement aps-environment จากขั้นตอนที่ 8 และ 9 หากแอปของคุณยังไม่มี
  • เพิ่ม SupportedOSPlatformVersion สำหรับ target ของ 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 แบบ inline ให้ลบออกจากเลย์เอาต์ของคุณ

หมายเหตุสำหรับผู้ใช้ Windows: เมื่อทำการ build คุณอาจพบปัญหาที่เกี่ยวข้องกับความยาวของเส้นทางไฟล์ ปัญหานี้เกิดจากความยาวรวมของไดเรกทอรีที่ Visual Studio ใช้และเส้นทางไฟล์ภายใน Pushwoosh SDK เกินขีดจำกัดความยาวเส้นทางสูงสุดของ Windows ที่ 260 ตัวอักษร เพื่อแก้ไขปัญหานี้ ให้เปิดใช้งานการตั้งค่า LongPathsEnabled ใน Windows Registry

แบ่งปันความคิดเห็นของคุณกับเรา

Anchor link to

ความคิดเห็นของคุณช่วยให้เราสร้างประสบการณ์ที่ดีขึ้น ดังนั้นเรายินดีที่จะรับฟังจากคุณหากคุณมีปัญหาใดๆ ในระหว่างขั้นตอนการผสานการทำงาน SDK หากคุณประสบปัญหาใดๆ โปรดอย่าลังเลที่จะแบ่งปันความคิดเห็นของคุณกับเรา ผ่านแบบฟอร์มนี้