این پلاگین امکان یکپارچهسازی آسان با سرویس پرداخت درونبرنامهای مایکت را در پروژههای گودو فراهم میکند. با استفاده از این پلاگین، میتوانید به سادگی قابلیت خرید محصولات مجازی، دریافت اطلاعات آنها و مصرف آنها را به بازی یا برنامه خود اضافه کنید.
فهرست مطالب:
ویژگی ها
- اتصال آسان به سرویس مایکت.
- دریافت اطلاعات محصولات درونبرنامهای (شامل جزئیات و خریدهای کاربر).
- شروع فرآیند خرید محصولات.
- مصرف محصولات یکبار مصرف.
- امکان باز کردن صفحات مختلف مایکت از طریق Intent (صفحه نظرات، جزئیات برنامه، صفحه دانلود و صفحه توسعهدهنده).
نصب
- پوشه
myket
موجود در این ریپو را به پوشهaddons
پروژه گودو خود کپی کنید. - در ویرایشگر گودو، به
Project > Project Settings > Plugins
بروید و پلاگینMyket
را فعال کنید. - به
Project > Install Android Build Template
رفته و رویInstall
کلیک کنید. - از منوی
Project > Tools > Apply Myket Manifest Placeholders
را انتخاب کنید تا تغییرات مربوط به اندروید منیفست اعمال شوند.
استفاده
پیکربندی
- یک نود از نوع
Myket
به صحنه دلخواه خود اضافه کنید. - در پنل Inspector نود
Myket
، مقدار متغیرPublic Key
را با کلید عمومی برنامه خود در مایکت تنظیم کنید.
اتصال به مایکت
اتصال به مایکت به صورت خودکار هنگام آماده شدن نود (_ready
) انجام میشود. همچنین میتوانید با فراخوانی متد connect_to_myket
به صورت دستی این کار را انجام دهید.
var myket_node = get_node("Myket")
func _ready():
myket_node.connection_succeed.connect(_on_connected)
myket_node.connection_failed.connect(_on_connection_failed)
func _on_connected():
print("Myket: با موفقیت متصل شد.")
func _on_connection_failed(message: String):
printerr("Myket: خطا در اتصال - ", message)
دریافت اطلاعات محصولات (Query Inventory)
از متد query_inventory_async
برای دریافت لیست محصولات قابل فروش و خریدهای کاربر استفاده کنید.
func fetch_inventory(skus: Array[String]):
var myket_node = get_node("Myket")
myket_node.query_inventory_finished.connect(_on_inventory_received)
myket_node.query_inventory_failed.connect(_on_inventory_failed)
myket_node.query_inventory_async(true, skus)
func _on_inventory_received(is_success: bool, message: String, inventory: Inventory):
if is_success:
print("Myket: اطلاعات محصولات دریافت شد.")
for purchase in inventory.purchases:
print("خرید: ", purchase.sku, " - وضعیت: ", purchase.purchase_state)
for detail in inventory.sku_details:
print("جزئیات محصول: ", detail.sku, " - قیمت: ", detail.price)
else:
printerr("Myket: خطا در دریافت اطلاعات محصولات - ", message)
func _on_inventory_failed(message: String):
printerr("Myket: خطا در دریافت اطلاعات محصولات - ", message)
func _ready():
fetch_inventory(["sku_item_1", "sku_item_2"])
شروع فرآیند خرید
برای شروع فرآیند خرید یک محصول، از متد launch_purchase_flow
استفاده کنید.
func purchase_item(sku: String, developer_payload: String = ""):
var myket_node = get_node("Myket")
myket_node.iab_purchase_finished.connect(_on_purchase_success)
myket_node.iab_purchase_failed.connect(_on_purchase_failed)
myket_node.launch_purchase_flow(sku, developer_payload)
func _on_purchase_success(is_success: bool, message: String, purchase: Purchase):
if is_success:
print("Myket: خرید موفقیتآمیز بود - ", purchase.order_id)
# اعطای محصول به کاربر
else:
printerr("Myket: خطا در خرید - ", message)
func _on_purchase_failed(message: String):
printerr("Myket: خطا در خرید - ", message)
func on_buy_button_pressed(product_sku):
purchase_item(product_sku)
مصرف محصول
برای مصرف یک محصول خریداری شده (محصولات یکبار مصرف)، از متد consume_async
استفاده کنید.
func consume_item(purchase_data: Purchase):
var myket_node = get_node("Myket")
myket_node.consume_finished.connect(_on_consume_success)
myket_node.consume_failed.connect(_on_consume_failed)
myket_node.consume_async(purchase_data)
func _on_consume_success(is_success: bool, message: String, purchase: Purchase):
if is_success:
print("Myket: مصرف محصول موفقیتآمیز بود.")
else:
printerr("Myket: خطا در مصرف محصول - ", message)
func _on_consume_failed(message: String):
printerr("Myket: خطا در مصرف محصول - ", message)
func process_purchase_for_consumption(purchase: Purchase):
consume_item(purchase)
قطع اتصال از مایکت
برای قطع اتصال از سرویس مایکت و آزادسازی منابع، از متد disconnect_from_myket
استفاده کنید.
func disconnect_myket_service():
var myket_node = get_node("Myket")
myket_node.disconnect_from_myket()
print("Myket: اتصال قطع شد.")
سیگنال ها
- سیگنال
connection_succeed
: بدون پارامتر. هنگامی که اتصال به مایکت با موفقیت برقرار شود، این سیگنال منتشر میشود. - سیگنال
connection_failed
: پارامترmessage
از نوعString
. در صورت بروز خطا در اتصال به مایکت، این سیگنال به همراه پیام خطا منتشر میشود. - سیگنال
query_inventory_finished
: پارامترinventory
از نوعInventory
. پس از دریافت اطلاعات محصولات و خریدهای کاربر، این سیگنال منتشر میشود. - سیگنال
query_inventory_failed
: پارامترmessage
از نوعString
. در صورت بروز خطا در دریافت اطلاعات محصولات، این سیگنال به همراه پیام خطا منتشر میشود. - سیگنال
iab_purchase_finished
: پارامترpurchase
از نوعPurchase
. پس از تکمیل موفقیتآمیز فرآیند خرید، این سیگنال منتشر میشود. - سیگنال
iab_purchase_failed
: پارامترmessage
از نوعString
. در صورت بروز خطا در فرآیند خرید، این سیگنال به همراه پیام خطا منتشر میشود. - سیگنال
consume_finished
: پارامترpurchase
از نوعPurchase
. پس از مصرف موفقیتآمیز یک محصول، این سیگنال منتشر میشود. - سیگنال
consume_failed
: پارامترmessage
از نوعString
. در صورت بروز خطا در فرآیند مصرف محصول، این سیگنال به همراه پیام خطا منتشر میشود.
کلاس Intent
کلاس Intent
شامل متدهای استاتیک برای باز کردن صفحات مختلف اپلیکیشن مایکت از طریق Intent است:
- متد
show_comment
: پارامترpackage_name
از نوعString
. باز کردن صفحه نظرات برنامه با نام بسته مشخص. - متد
show_details
: پارامترpackage_name
از نوعString
. باز کردن صفحه جزئیات برنامه با نام بسته مشخص. - متد
show_download
: پارامترpackage_name
از نوعString
. باز کردن صفحه دانلود برنامه با نام بسته مشخص. - متد
show_developer
: پارامترpackage_name
از نوعString
. باز کردن صفحه توسعهدهنده با نام بسته مشخص.
func _on_rate_button_pressed():
Myket.Intent.show_comment() # استفاده از نام بسته فعلی
func _on_view_details_button_pressed():
Myket.Intent.show_details()
func _on_other_app_button_pressed(developer_package: String):
Myket.Intent.show_developer(developer_package)