Myket.InAppBilling
0.0.2
See the version list below for details.
dotnet add package Myket.InAppBilling --version 0.0.2
NuGet\Install-Package Myket.InAppBilling -Version 0.0.2
<PackageReference Include="Myket.InAppBilling" Version="0.0.2" />
<PackageVersion Include="Myket.InAppBilling" Version="0.0.2" />
<PackageReference Include="Myket.InAppBilling" />
paket add Myket.InAppBilling --version 0.0.2
#r "nuget: Myket.InAppBilling, 0.0.2"
#:package Myket.InAppBilling@0.0.2
#addin nuget:?package=Myket.InAppBilling&version=0.0.2
#tool nuget:?package=Myket.InAppBilling&version=0.0.2
Myket In-App Billing for .NET MAUI
کتابخانه غیررسمی و ساده برای پیادهسازی پرداخت درونبرنامهای مایکت (Myket) در پروژههای .NET MAUI.
این کتابخانه مشکل عدم وجود فایلهای AIDL و پیادهسازیهای پیچیده بایندرها را حل کرده و یک رابط کاربری ساده async/await در اختیار شما قرار میدهد.
ویژگیها
- ✅ اتصال آسان به سرویس پرداخت مایکت
- ✅ خرید محصول (Purchase)
- ✅ مصرف محصول (Consume) برای محصولات مصرفی (سکه، جم و...)
- ✅ بدون نیاز به فایلهای Java یا AIDL خارجی
- ✅ کاملاً منطبق با .NET 8+ و MAUI
- ✅ منطبق با اندروید نسخه 26+
نصب
پکیج را از طریق NuGet به پروژه خود اضافه کنید:
dotnet add package Myket.InAppBilling
راهاندازی (Setup)
۱. تنظیمات AndroidManifest.xml
در فایل Platforms/Android/AndroidManifest.xml مجوزهای زیر را اضافه کنید:
<uses-permission android:name="ir.mservices.market.BILLING" />
<uses-permission android:name="com.android.vending.BILLING" />
<queries>
<package android:name="ir.mservices.market" />
</queries>
۲. تنظیمات MainActivity.cs
برای اینکه نتیجه خرید از اکتیویتی به کتابخانه برگردد، باید متد OnActivityResult را در MainActivity.cs خود بازنویسی (Override) کنید:
using Android.App;
using Android.Content;
using Myket.InAppBilling; // فضای نام کتابخانه
namespace YourAppName
{
[Activity(Label = "YourApp", MainLauncher = true, ...)]
public class MainActivity : MauiAppCompatActivity
{
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
// هدایت نتیجه به کتابخانه مایکت
CrossMyketBilling.Current.OnActivityResult(requestCode, (int)resultCode, data);
}
protected override void OnDestroy()
{
// قطع اتصال سرویس برای جلوگیری از نشت حافظه
CrossMyketBilling.Current.Disconnect();
base.OnDestroy();
}
}
}
نحوه استفاده (Usage)
خرید محصول
using Myket.InAppBilling;
private async void PayWithMyket()
{
// شناسه محصول تعریف شده در پنل توسعهدهندگان مایکت
string productId = "coin_pack_100";
// درخواست خرید
var result = await CrossMyketBilling.Current.PurchaseAsync(productId);
if (result.Status == PurchaseStatus.Purchased)
{
// خرید موفقیت آمیز بود
// result.PurchaseToken و result.OrderId در دسترس هستند
// اگر محصول مصرفی است (مثل سکه)، حتما متد زیر را صدا بزنید:
bool consumed = await CrossMyketBilling.Current.ConsumeAsync(result.PurchaseToken);
if (consumed)
{
// سکه را به کاربر اضافه کنید
await DisplayAlert("تبریک", "خرید انجام شد و سکه اضافه شد", "باشه");
}
}
else if (result.Status == PurchaseStatus.Canceled)
{
await DisplayAlert("توجه", "خرید توسط کاربر لغو شد", "باشه");
}
else
{
await DisplayAlert("خطا", $"خطا در خرید: {result.Message}", "باشه");
}
}
متدهای موجود
| متد | توضیحات |
|---|---|
ConnectAsync() |
اتصال دستی به سرویس مایکت (معمولا خودکار انجام میشود اما برای چک کردن وضعیت مفید است). |
PurchaseAsync(id, payload) |
شروع پروسه خرید. payload اختیاری است. |
ConsumeAsync(token) |
مصرف کردن خرید. برای محصولاتی که باید دوباره قابل خرید باشند الزامی است. |
Disconnect() |
قطع ارتباط با سرویس مایکت. |
نکات مهم
- تست روی دستگاه: پرداخت درونبرنامهای روی شبیهساز (Emulator) کار نمیکند. حتماً روی گوشی واقعی که اپلیکیشن مایکت روی آن نصب است و کاربر در آن لاگین کرده، تست کنید.
- شناسه محصول: شناسه محصول (Product ID) باید دقیقاً با پنل مایکت مطابقت داشته باشد.
- نسخه اندروید: این کتابخانه با Android 5.0 (API 21) به بالا سازگار است.
لایسنس
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-android34.0 is compatible. net9.0-android was computed. net10.0-android was computed. |
-
net8.0-android34.0
- Microsoft.Maui.Essentials (>= 8.0.100)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.