مقدمه
شرکت Anywhere software پلتفرمی با نام Basic4Android جهت تولید و توسعه سادهتر برنامههای قابل اجرا بر روی سیستم عامل اندروید ارائه کرده است. در این پلتفرم از زبان برنامهسازی Basic استفاده میشود. Anywhere software برای اتصال به سرویس پرداخت درونبرنامهای گوگلپلی، ماژولی را در اختیار کاربران خود قرار داده است. با توجه به اینکه API پرداخت درونبرنامهای مایکت دقیقا مانند گوگلپلی است، با تغییراتی اندک این ماژول را برای اتصال به مایکت آماده کردهایم. در ادامه با فرایند اضافه کردن این ماژول به برنامه خود آشنا میشوید.
تعاریف پرداخت درونبرنامهای در B4A
ماژول پرداخت درونبرنامهای B4A در مایکت از محصولات مصرفشدنی، مصرفنشدنی و اشتراکی پشتیبانی میکند. جهت آشنایی با مفاهیم پرداخت درونبرنامهای میتوانید به اینجا مراجعه کنید. تعاریف پرداخت درونبرنامهای در B4A هیچ تفاوتی با تعاریف گوگلپلی ندارد.
مراحل اضافه کردن ماژول مایکت
برای اضافه کردن کتابخانه سرویس خرید درونبرنامه مایکت در B4A کافی است، مراحل زیر را انجام دهید:
۱. کتابخانه خرید درون برنامه مایکت در B4A را از اینجا دریافت نمایید.
۲. دو فایل MyketIAP.jar و MyketIAP.xml را در پوشه کتابخانههای Basic4Android کپی نمایید.
۳. در پنل سمت راست B4A، تب libs را انتخاب و Refresh نمایید تا کتابخانه MyketIAP نمایان شود.
۴. با استفاده از Manifest Editor (واقع در منوی Project) کد زیر را به Manifest برنامه خود اضافه کنید:
AddPermission(ir.mservices.market.BILLING)
معرفی API در B4A
کلاس BillingManager3
BillingManager3 رابط B4A با سرویس خرید درون برنامه مایکت است. برای استفاده از این کلاس کافی است در Process_Globals برنامه خود، این کلاس را تعریف نمایید:
Dim oBillingManager As BillingManager3
از BillingManager3 برای دریافت اطلاعات محصولات خریدهشده، خرید یک محصول (فروشی یا اشتراکی) و مصرف کردن آن استفاده میشود. در ادامه با نحوه استفاده از متدهای BillingManager3 آشنا میشوید:
متد Initialize
برای استفاده از BillingManager3 ابتدا حتما باید این کلاس را Initialize نمود:
oBillingManager.Initialize("BillingManager", publicKey)
پارامتر دوم PublicKey محصولات شماست. توجه کنید که PublicKey را پس از قرار دادن محصول و یا محصولات خود در پنل برنامهنویسان، دریافت مینمایید.پارامتر اول EventName است و ابتدای نام CallBackهای BillingManager3 را مشخص می کند. که در این مستند فرض بر این است که پارامتر EventName را “BillingManager” مقداردهی نمودهایم.
چک کردن پشتیبانی از سرویس درونخرید مایکت
این Callback، پس از اتمام عملیات متد Initialize صدا زده می شود مشخص میکند که آیا دستگاه کاربر از سرویس درون خرید مایکت پشتیبانی میکند یا خیر. در صورتی که مقدار Supported برابر True باشد، دستگاه کاربر از خرید درونبرنامهای مایکت پشتیبانی میکند.
Sub BillingManager_BillingSupported(Supported As Boolean, Message As String)
متد RequestPayment
از RequestPayment برای خریدن یک محصول (فروشی یا اشتراکی) استفاده میگردد:
oBillingManager.RequestPayment("gas", "inapp", "DeveloperPayload")
پارامتر اول نام محصول است که در پنل برنامهنویسان مایکت وارد نموده اید. پارامتر دوم نوع محصول را مشخص میکند. که برای محصولات فروشی مقدار “inapp” و برای محصولات اشتراکی مقدار “subs” را میپذیرد. پارامتر سوم اطلاعات اضافی یا Developer Payload میباشد. این فیلد شامل رشتهای است که مقداردهی آن اختیاری است و در پردازش مایکت تاثیری ندارد. مقداری که به این پارامتر تخصیص داده میشود عینا در CallBack اتمام خرید (که در ادامه توضیح داده میشود)، بازمیگردد. برای آشنایی بیشتر با مفهوم Developer Payload به اینجا مراجعه نمایید.
اتمام فرایند خرید
این Callback، پس از اتمام عملیات متد RequestPayment صدا زده میشود و وضعیت خرید Product را مشخص میکند. درصورتی که Success برابر True باشد خرید با موفقیت انجام شده است. اگر محصول خریداری شده از نوع فروشی و مصرفشدنی بود، باید این محصول را با استفاده از متد ConsumeProduct در سرور مایکت مصرف نمود. در صورتی که محصول از نوع فروشی و مصرفنشدنی و یا از نوع اشتراکی بود، نباید متد ConsumeProduct صدا زده شود.
Sub BillingManager_PurchaseCompleted(Success As Boolean, Product As Purchase)
متد ConsumeProduct
برای محصولات مصرفشدنی باید حتما پس از خرید، متد ConsumeProduct فراخوانی شود تا این محصول در سرور مایکت مصرف شود. برای این کار کافی است:
oBillingManager.ConsumeProduct(Product)
این متد Object محصولی که باید مصرف شود را در تنها پارامتر ورودی خود میگیرد. (این object در callback اتمام خرید ارسال شده است.)
اتمام عملیات مصرف شدن محصول
این Callback، پس از اتمام عملیات متد ConsumeProduct صدا زده میشود و در صورتی که پارامتر Success برابر True باشد، باید محصول را به کاربر تحویل داد.
Sub BillingManager_ProductConsumed(Success As Boolean, Product As Purchase)
متد GetOwnedProducts
این متد در اول برنامه پس از Initialize شدن BillingManager صدا زده میشود. هدف از این کار دریافت محصولات فروشی که در سرور مایکت مصرف نشدهاند و محصولات اشتراکی میباشد. بعد از اتمام کار، این متد در Callback دریافت محصولات کاربر لیستی از محصولات برمیگرداند.
به عنوان مثال زمانی که کاربر در برنامه شما اکانت ویژه (Premium Account) خریداری میکند همیشه این محصول در Callback برگردانده میشود.
برای صدا زدن این متد کافی است:
oBillingManager.GetOwnedProducts()
دریافت محصولات کاربر
این Callback، پس از فراخوانی متد GetOwnedProducts صدا زده می شود و لیست purchases شامل محصولات مصرفنشدنی کاربر و محصولات مصرفشدنی که در سرور مایکت مصرف نشدهاند میباشد.
Sub BillingManager_OwnedProducts(Success As Boolean, purchases As Map)
فعال و غیرفعال کردن Log
برای فعال یا غیرفعال کردن Log کتابخانه سرویس خرید درونبرنامهای مایکت، کافیست مقدار True/False را به متد DebugLogging بدهید:
oBillingManager.DebugLogging = True
پروژه تستی
این پروژه همان پروژه Trivial Drive گوگل تغییر یافته است. میتوانید این پروژه را از اینجا دانلود کنید.
در این پروژه سه نوع محصول وجود دارد:
محصول مصرف شدنی(gas)
محصول مصرف نشدنی(premium)
محصول اشتراکی(infinity)
این پروژه شامل چهار دکمه خرید بنزین، استفاده بنزین، خرید اکانت ویژه و خرید اکانت اشتراکی است. که در زیر به اختصار توضیح داده شده است:
خرید بنزین یا Buy Gas
بنزین در این مثال در دستهی محصولات فروشی و مصرفشدنی است. با فشردن این دکمه در صورتی که مخزن بنزین پر نباشد برنامه به خرید درونبرنامهای مایکت وصل شده و بعد از پرداخت هزینه مورد نظر تعداد ۱۰ واحد به مخزن بنزین اضافه میشود.
استفاده بنزین یا Use Gas
در صورتی که تعداد بنزین ذخیره بیشتر از ۱۰ واحد باشد، ۱۰ واحد بنزین مصرف میشود.
خرید اکانت ویژه یا Buy Premium
اکانت ویژه در این مثال در دستهی محصولات فروشی و مصرفنشدنی است. با انتخاب این گزینه برنامه به خرید درونبرنامهای مایکت وصل شده و با پرداخت هزینه اکانت ویژه خریداری میشود این نوع پرداخت مصرفنشدنی است.
خرید اکانت اشتراکی یا Buy Subscription
این اکانت به صورت زماندار است که کاربر با پرداخت هزینه میتواند اکانت (ماهانه، هفتگی و یا سالانه) را خریداری کند. توجه داشته باشید که کاربر با خریدن اکانت ویژه میتواند به صورت نامحدود بنزین مصرف کند بدیهی است که در این مدت زمان کاربر نباید بنزین خریداری کند و همچنین نمیتواند اکانت زماندار دیگری نیز بخرد به همین دلیل دکمه اکانت نامحدود و خرید بنزین نیز غیرفعال میشود.
ویدئو آموزشی
در این ویدئو نحوه اضافه کردن ماژول مایکت در B4A و فرایند استفاده از سرویس خرید درونبرنامهای آموزش داده شده است. این ویدئو را میتوانید در آپارات مشاهده نمایید.