نسخه چاپی
معرفی پرداخت
پرداخت درون برنامه ای (IAB) بازار چیست؟
پرداخت درون برنامه ای که به اختصار به آن IAB (واژهٔ مختصر شدهٔ In-App Billing) نیز میگوییم، یکی از خدمات ارائه شده توسط بازار است که به شما امکان میدهد یک فروشگاه در برنامه خود راهاندازی کنید و در آن محتویات دیجیتال مورد نظرتان را بفروشید. برای مثال، میتوانید از پرداخت درونبرنامهای برای فروش محتویات قابل دانلود مانند فایلهای موسیقی، محتویات مجازی مانند سکهٔ داخل بازیها یا بهروزرسانی برخی از بخشهای برنامه که باعث ایجاد تجربهٔ بهتری برای کاربر میشود استفاده کنید.
از آنجایی که بازار همان روشی که برای خرید برنامههای غیررایگان استفاده میکند را برای پرداختهای درونبرنامهای نیز به کار میبرد، کاربران شما روند پرداخت مشابهی را تجربه میکنند و میتوانند به راحتی خرید خود را انجام دهند.زمانی که از سرویس پرداخت درونبرنامهای بازار برای فروش یک محصول استفاده میکنید، بازار تمام مراحل پرداخت را مدیریت میکند.
بنابراین برنامهٔ شما نیازی به پردازش تراکنشهای مالی به صورت مستقیم ندارد. فرآیند پرداخت با فرستادن درخواست خرید یک محصول درونبرنامهای آغاز میشود. سپس بازار دیالوگی را برای انتخاب روش پرداخت باز میکند. در ادامه بازار تمامی جزئیات مربوط به تراکنش پرداخت را مدیریت خواهد کرد. پس از اتمام فرآیند پرداخت، بازار جزئیات پرداخت (از قبیل شمارهٔ سفارش، تاریخ سفارش، زمان سفارش و مبلغ پرداخت شده) را به برنامهٔ شما باز میگرداند. پرداخت درونبرنامهای فقط در برنامههایی که در بازار منتشر میکنید قابل پیادهسازی است. به غیر از داشتن حساب توسعهدهنده که برای انتشار برنامهها ساختهاید، نیازی به ساخت هیچ حساب دیگری نیست. برای کمک به پیادهسازی پرداخت درونبرنامهای از مستندات مربوط به پرداخت درونبرنامهای که برایتان آماده کردهایم، استفاده نمایید.پرداخت درونبرنامهای بازار با طیف گستردهای از دستگاههای اندرویدی سازگار است و روی دستگاههای دارای سیستم عامل اندروید (نسخهٔ ۲.۳ یا بالاتر که بیش از ۹۰٪ از دستگاههای فعال را شامل میشود) و آخرین نسخهٔ برنامهٔ بازار، قابل اجرا است.
تعاریف و مفاهیم پایه
در این بخش مفاهیم پایهای شرح داده میشوند که برای اضافه کردن پرداخت درونبرنامهای بایستی با آنها آشنا باشید.
API پرداخت درون برنامه ای
API پرداخت درون برنامه ای بازار ارائهٔ پرداخت درونبرنامهای در برنامهتان را ساده میکند. با استفاده از API پرداخت درونبرنامهای بازار میتوانید جزئیات محصول را از بازار بپرسید، سفارش خرید محصول درونبرنامهای را بدهید، و فهرست محصولاتی که کاربر صاحب آنها است را از بازار بپرسید.برنامهٔ بازار درخواستها و پاسخهای پرداخت، بین برنامهٔ شما و سِرور بازار را مدیریت میکند. در عمل برنامهٔ شما هیچگاه با سِروِر بازار به طور مستقیم در ارتباط نیست و هیچ ارتباط شبکهای بین خودش و سِروِر بازار را مدیریت نمیکند. در عوض برنامهٔ شما درخواستهای پرداخت را (توسط ارتباطات بین پردازشی) به برنامه بازار میفرستد و پاسخها را از آن دریافت میکند. برنامهٔ بازار برای تکمیل درخواستهای پرداخت درونبرنامهای باید بتواند از طریق اینترنت به سِروِر بازار دسترسی پیدا کند.
محصولات درونبرنامهای
محصولات درونبرنامهای، کالاها یا خدمات دیجیتالی هستند که از درون برنامهٔ خود برای فروش به کاربر عرضه میکنید. مثالهایی از کالاهای دیجیتال عبارتند از: سکهٔ درون بازی، بهروزرسانی برخی از بخشهای برنامه که باعث ایجاد تجربهٔ بهتری برای کاربر میشود، محتوای جدید برای برنامه. پرداخت درونبرنامهای فقط برای فروش محتوای دیجیتالی است. در حال حاضر نمیتوانید از پرداخت درونبرنامهای برای فروش خدمات شخصی، محصولات فیزیکی یا هر چیزی که نیاز به تحویل فیزیکی داشته باشد، استفاده کنید.شما مسئول تحویل محتوای دیجیتالی هستید که در برنامهٔ خود به فروش میرسانید. بازار هیچ مسئولیتی در قبال تحویل محتوا به کاربر برنامهٔ شما ندارد. محصولات درونبرنامهای همیشه تنها در یک برنامه قابل فروش هستند؛ یعنی، یک برنامه نمیتواند محصول درونبرنامهای برنامهٔ دیگری را بفروشد، حتی اگر آن محصول متعلق به توسعهدهندهای واحد باشد.
انواع محصولات درونبرنامهای
بازار از انواع مختلف محصولات درونبرنامهای پشتیبانی میکند تا شما دستِ بازی در طرحریزی مالی برنامهٔ خود داشته باشید. تمام این محصولات را در پنل پرداخت بازار (بخش محصولات/خدمات) تعریف میکنید. برای هر یک از محصولات میتوانید اطلاعاتی مانند شناسهٔ منحصر به فرد (SKU)، قیمت، عنوان و توضیح و ... را تعریف کنید. محصولات درونبرنامهای در حالت کلی در دستههای «فروشی» و «اشتراک» قابل تعریف هستند.
محصولات فروشی
محصولات فروشی، محصولاتی هستند که هنگام خرید یک مرتبه پرداخت برای آنها صورت میگیرد و به صورت مفهومی به دو دستهٔ محصولات «مصرفی» و «غیرمصرفی» تقسیم میشوند. این تصمیم شماست که محصولات درونبرنامهای خود را به صورت مصرفی یا غیرمصرفی به کاربر عرضه کنید.
- محصولات مصرفیمحصولات مصرفی، محصولاتی از دستهٔ محصولات فروشی هستند و کاربر میتواند چندین مرتبه این محصولات را خریداری کند (مانند سکهٔ داخل بازی، سوخت یا طلسم جادویی). لازم است پس از اتمام فرآیند خرید این نوع محصول توسط کاربر، خرید را اصطلاحاً مصرف کنید. در صورتی که پس از اتمام خرید این نوع محصول، خرید انجام شده را در برنامهٔ خود مصرف نکنید، بازار اجازه نمیدهد کاربر مجدداً محصول مورد نظر را خریداری کند. برای یادگیری بیشتر دربارهٔ مصرف کردن خرید محصولات درون برنامهای، مصرف کردن خرید را مشاهده کنید.
- محصولات غیرمصرفی محصولات غیرمصرفی محصولاتی از دستهٔ محصولات فروشی هستند؛ این دسته از محصولات، محصولاتی هستند که کاربر یک مرتبه آنها را خریداری میکند اما تأثیر این خرید همیشگی است. مثالهایی از این نوع محصولات حذف تبلیغات از برنامه یا ارتقاء برنامه از نسخهٔ آزمایشی به نسخهٔ کامل است.همانگونه که از نام این نوع محصول نیز پیداست، پس از اتمام فرآیند خرید توسط کاربر این محصولات را نباید مصرف کنید تا برای همیشه در بازار در حساب کاربر ثبت بمانند. بدین صورت اثر خرید این نوع محصولات دائمی خواهد بود و با حذف و نصب مجدد برنامهٔ شما از بین نخواهد رفت.
اشتراک (ماهانه|سالانه)
اشتراک محصولی است که در پرداخت درون برنامه ای ارائه میشود و به شما امکان میدهد محتوا، خدمات، یا ویژگیهایی را به کاربران برنامهتان با صورتحسابهای دورهای ماهانه یا سالانه بفروشید. میتوانید اشتراکها را تقریباً برای تمام انواع محتوای دیجیتال در بازی یا برنامهٔ خود تعریف کنید و بفروشید. برای اطلاع از روش انجام کار، بخش راهنمای اشتراکها را ببینید. شما میتوانید از جریان پرداخت مشابهی که برای محصولات درونبرنامهای فروشی استفاده میشود برای خرید اشتراکها و بازیابی اطلاعات اشتراک استفاده کنید. مثالی از کد پیادهسازی اشتراک را در اینجا ببینید.
مهم: برخلاف محصولات درونبرنامهای مصرفی، اشتراکها قابل مصرف نیستند.
برای کسب اطلاعات بیشتر در مورد انواع محصولات، شکل ۱ را ببینید.

مهم: برخلاف محصولات درونبرنامهای مصرفی، اشتراکها قابل مصرف نیستند.
مصرف کردن خرید
زمانی که یک محصول درون برنامه ای خریداری میشود، بازار متوجه میشود که کاربر صاحب آن است و تا زمانی که خرید مورد نظر مصرف نشده باشد، مانع خرید مجدد همان محصول میشود. شما میتوانید نحوهٔ مصرف خرید را در برنامهی خود کنترل کنید و پس از مصرف به بازار اطلاع دهید تا دیگر مانع خرید مجدد محصول توسط کاربر نشود. مسلماً کاربر نمیخواهد محصولات درونبرنامهای غیرمصرفی که یک مرتبه آنها را خریداری کرده اما تأثیرشان همیشگی است را دوباره خریداری کند (برای مثال ارتقاء برنامه به نسخهٔ پولی)؛ لذا درخواست مصرف را فقط برای محصولات مصرفی برنامهتان بفرستید.
برای کسب اطلاعات بیشتر در مورد انواع محصولات، شکل ۱ را ببینید.
پنل پرداخت بازار
پنل پرداخت درون برنامه ای بازار محلیست که از طریق آن میتوانید محصولات درونبرنامهای که برای فروش در نظر دارید را مدیریت کنید.برای کسب اطلاعات بیشتر مستندات مربوط به تعریف محصولات درونبرنامهای در بازار را مشاهده کنید.
شناسهٔ محصول (SKU)
شناسهٔ یکتایی است که در زمان تعریف محصولات درونبرنامهای خود در پنل پرداخت، به آنها اختصاص میدهید. شناسهٔ محصول در تشخیص یکتای یک محصول هنگام ایجاد درخواست و ارسال پاسخهای مربوط به پرداخت درونبرنامهای کاربرد دارد. این شناسه متفاوت از نام محصول است و کاربر برنامه هنگام فرآیند پرداخت آن را نخواهد دید. دقت داشته باشید که شناسهها پس از تعریف قابل تغییر نیستند.
توکن خرید (purchaseToken)
رشتهای است که توسط بازار برای شناسایی یکتای یک تراکنش پرداخت ساخته میشود.
اطلاعات اضافی توسعهدهنده (Developer Payload)
رشتهٔ دلخواهی است که حاوی اطلاعات تکمیلی مربوط به سفارش خرید است. به طور معمول این رشته به عنوان یک نشانه است که منحصراً این درخواست خرید را شناسایی میکند. توسعهدهنده هنگام ارسال درخواست خرید میتواند علاوه بر پارامترهای دیگر این رشته را نیز به بازار بفرستد. در صورتی که این رشته مقداردهی شده باشد، بازار به همراه پاسخ پرداخت این رشته را نیز برمیگرداند.
کلید عمومی پرداخت
زمانی که برای اولین بار پیشنویس برنامهٔ خود را در بازار قرار میدهید، بازار به صورت خودکار یک کلید گواهی عمومی (Public license key) برای آن تولید میکند. برای برقراری یک ارتباط امن بین برنامهٔ خود و سِروِرهای بازار به این کلید نیاز دارید. این کلید برای هر برنامه یک مرتبه تولید میشود و زمانی که فایل APK برنامه را بهروز میکنید این کلید تغییر نخواهد کرد.
خرید محصولات
در این بخش به ترتیب: روند خرید، روند مصرف کردن خرید، و مراحل مدیریت خریدهای محصولات مصرفی شرح داده میشوند.

- در اولین گام روند خرید پرداخت درون برنامه ای برنامهٔ شما بایستی به گونهای بفهمد که آیا نسخهٔ API پرداخت درونبرنامهای که استفاده میکند توسط بازار پشتیبانی میشود یا خیر. برای این منظور یک درخواست
isBillingSupported
به بازار میفرستد. - وقتی برنامهٔ شما شروع میشود یا کاربر وارد برنامه میشود (لاگین میکند)، فرصت مناسبی است که فهرست محصولاتی که کاربر صاحب آنها است را از بازار بپرسید. برای این منظور یک درخواست
getPurchases
بفرستید. در صورتی که درخواست موفقیتآمیز باشد، بازار یکBundle
حاوی فهرستی از شناسهٔ محصولات خریداری شده، فهرستی از جزئیات یک خرید و فهرستی از امضاهای خریدها را به برنامهٔ شما برمیگرداند. - معمولاً میخواهید کاربر را از محصولاتی که میتواند بخرد مطلع سازید. برنامهٔ شما میتواند یک درخواست
getSkuDetails
برای گرفتن جزئیات محصولات درونبرنامهای که در بازار تعریف کردهاید بفرستد. برای این منظور بایستی فهرستی از شناسهٔ کالاهایی که میخواهید جزئیاتشان را بدانید را در درخواست خود مشخص کنید. در صورتی که درخواست موفقیتآمیز باشد، بازار یکBundle
شامل جزئیات محصول (از قبیل قیمت، عنوان، توضیحات و نوع محصول) را برمیگرداند. - در صورتی که کاربر صاحب یک محصول درونبرنامهای نباشد (یعنی قبلاً آن را خریداری نکرده یا در صورت خرید محصولی از نوع مصرفی، خرید مورد نظر در برنامه مصرف شده باشد)، میتواند آن را خریداری کند. برای این منظور برنامهٔ شما یک درخواست
getBuyIntent
که در آن شناسهٔ محصول و سایر پارمترها مشخص شده است را به بازار میفرستد. - بازار
Bundle
ای که حاوی یکPendingIntent
است را برمیگرداند. برنامهٔ شما برای آغاز عملیات پرداخت از این Bundle استفاده میکند. - برنامهٔ شما با فراخوانی متد
startIntentSenderForResult
، اینتنت ارسال شده از بازار (PendingIntent
) را اجرا میکند. - وقتی روند پرداخت پایان یافت (یعنی زمانی که کاربر محصول را خرید یا از خرید آن صرفنظر کرد) بازار پاسخ را در قالب یک
Intent
به متدonActivityResult
برنامهٔ شما میفرستد. کد نتیجهٔonActivityResult
کدی است که بیانگر خرید موفق محصول یا لغو عملیات است. پاسخIntent
شامل اطلاعاتی دربارهٔ محصول خریداری شده، از جمله رشتهٔpurchaseToken
است که توسط بازار برای شناسایی یکتای این تراکنش خرید ساخته شده است. اینIntent
همچنین شامل امضای خرید است که توسط کلید خصوصی توسعهدهنده امضا شده است.
برای یادگیری بیشتر در مورد فراخوانیهای API و پاسخهای سرور، بخش API Reference را مشاهده کنید.
روند مصرف کردن خرید
میتوانید از مکانیزم مصرف ارائه شده در API پرداخت درون برنامهای بازار برای پیگیری مالکیت کاربر بر محصولات درونبرنامهای استفاده کنید. پس از اتمام یک خرید موفق توسط کاربر، خرید مورد نظر در بازار ذخیره میشود. زمانی که کاربرِ برنامهٔ شما یک محصول درونبرنامهای را میخرد از دید بازار «صاحب آن» خواهد بود. کاربر نمیتواند محصولاتی که هماکنون صاحب آنها میباشد را مجدداً خریداری کند. برای این که امکان خرید مجدد این محصول توسط کاربری که هماکنون صاحب آن است فراهم شود، باید در برنامهتان یک درخواست مصرف برای آن محصول درونبرنامهای بدهید.
نکته: مصرف کردن محصول درونبرنامهای سبب میشود که بازار دیگر کاربر را مالک آن محسوب نکند و اطلاعات خرید آن را دور بریزد.
یادآوری: از بین انواع محصولات درونبرنامهای، فقط محصولات درون برنامهای مصرفی را مصرف کنید. اشتراک و محصولات درونبرنامهای غیرمصرفی را نباید مصرف کنید.
برای واضحتر شدن این مفهوم دیدن اینفوگرافیک تهیه شده در شکل ۱ میتواند مفید باشد.
برنامهٔ شما برای گرفتن فهرست محصولاتی که کاربر صاحب آنها است، یک درخواست getPurchases
به بازار میفرستد. همچنین برنامهٔ شما میتواند برای مصرف محصولاتی که کاربر صاحب آنها است، یک درخواست مصرف توسط فراخوانی consumePurchase
به بازار بفرستد. در آرگومان درخواست مصرف، بایستی توکن خرید (purchaseToken
) آن (رشتهٔ یکتایی که هنگام خرید آن محصول از بازار دریافت کردهاید) را مشخص کنید. در نهایت، بازار کد وضعیتی که مشخص میکند آیا مصرف با موفقیت ذخیره شده است یا خیر را بازمیگرداند.

شما تصمیم میگیرید که محصولات درونبرنامهای خریداری شده را به چه شکلی در برنامهتان برای کاربر فراهم کنید (به این امر به اصطلاح «تأمین کردن محصول» میگوییم) و خود مسئول کنترل و پیگیری آن هستید. برای مثال، در صورتی که کاربر سکهی داخل بازی را خریداری کرده، بایستی مقدار دارایی سکهٔ کاربر در بازیتان را به میزان سکهای که خریداری کرده افزایش دهید.
مهم: قبل از تأمین محصولات مصرفی در برنامهتان، شما باید درخواست مصرف را به بازار فرستاده و پاسخی موفق از اینکه مصرف ذخیره شده است، دریافت کرده باشید.
مراحل مدیریت خریدهای محصولات مصرفی
در ادامه، روند پایه برای خرید یک محصول درونبرنامهای از نوع مصرفی را مرور میکنیم:
- روند خرید را با فراخوانی
getBuyIntent
آغاز کنید. - پاسخ
Bundle
را از بازار دریافت کنید. این پاسخ شامل اطلاعاتی مبنی بر موفقیتآمیز بودن یا نبودن فرآیند خرید است. - اگر خرید موفقیتآمیز بود، خرید را با دستور
consumePurchase
مصرف کنید. - کد پاسخی که مشخص میکند مصرف موفقیتآمیز بوده است یا خیر را از بازار دریافت کنید.
- اگر مصرف موفقیتآمیز بود، محصول را در برنامهٔ خود تأمین کنید (عملیاتی که قرار بود با خرید محصول اتفاق بیفتد را انجام دهید).
متعاقباً، هنگامی که کاربر برنامه را اجرا میکند یا به برنامه وارد میشود (لاگین میکند)، باید وضعیت داراییهای کاربر را بررسی نمایید، اینکه چه محصولات مصرفی و یا غیرمصرفی دارد و آنها را چگونه باید تأمین کنید. روند پیشنهادی شروع برنامه برای زمانی که محصول مصرفی در برنامهتان دارید را در زیر مشاهده میکنید:
- برای دریافت محصولاتی که کاربر صاحب آنها است، درخواست
getPurchases
را به بازار ارسال کنید. - اگر محصول قابل مصرفی وجود داشت، محصول را با دستور
consumePurchase
مصرف کنید. به این دلیل لازم است این کار را بکنید که ممکن است خرید محصول کامل شده باشد، اما قبل از ارسال درخواست مصرف آن، ارتباط قطع شده باشد. - کد پاسخی که مشخص میکند مصرف محصول موفقیت آمیز بود یا خیر را از بازار دریافت کنید.
- اگر مصرف موفقیت آمیز بود، محصول را در برنامهٔ خود تأمین کنید.
پنل مدیریت پرداخت
ایجاد لیست محصولات
پنل بازار به شما این امکان را میدهد که به ازای هر یک از برنامههایتان یک لیست جدا از محصولات داشته باشید. شما تنها وقتی میتوانید یک محصول را در برنامهتان به فروش برسانید که آن را در پنل ثبت کرده باشید. توجه داشته باشید که هر برنامه لیست محصولات مربوط به خود را دارد و امکان فروش محصولات دیگر برنامهها در برنامهٔ شما وجود ندارد.
لیست محصولات مربوط به برنامهٔ خود را میتوانید با ورود به پنل توسعهدهندگیتان و سپس انتخاب برنامهٔ مورد نظر، در سربرگ پرداخت درون برنامه ای مشاهده فرمائید.
در لیست محصولات برای هر محصول اطلاعاتی از قبیل شناسه کالا، عنوان، قیمت، توضیحات محصول، نوع (فروشی یا اشتراکی) و وضعیت (فعال یا غیرفعال) وجود دارد. این لیست فقط شامل اطلاعات کلی دربارهٔ محصول شماست و به هیچ وجه محتوای محصول شما را شامل نمیشود. یعنی اینکه شما خودتان باید محصولی (محتوا) را که در برنامهتان میفروشید، به دست کاربر برسانید.
اضافه کردن محصولات
برای اضافه کردن محصولات از طریق سربرگ «پرداخت درونبرنامهای» باید مراحل زیر را طی کنید:
- وارد پنل توسعهدهندگی خود شوید.
- برنامه مدنظرتان را انتخاب کنید و وارد سربرگ «پرداخت درونبرنامهای» شوید.
- روی دکمه محصول جدید کلیک کنید و اطلاعات مورد نیاز برای هر محصول را وارد کنید.
برای هر محصول موارد زیر را باید وارد کنید:
- شناسهٔ کالا: شناسهٔ کالای هر محصول در هر برنامه باید منحصر به فرد باشد. این شناسه باید با حروف کوچک لاتین یا یک عدد شروع شود و همگی کاراکترهای استفاده شده در آن باید فقط از حروف کوچک لاتین، اعداد لاتین، _ و نقطه باشند.شما به هیچ عنوان مجاز به ویرایش شناسهٔ یک محصول بعد از ایجاد آن نیستید و امکان استفادهٔ مجدد از این شناسهها نیز وجود ندارد.
- عنوان: یک توضیح بسیار کوچک از محصول است که به ازای هر برنامهٔ شما باید منحصر به فرد باشد. ارائهٔ عنوان برای هر محصول ضروری است و پیشنهاد میشود برای نمایش بهتر طول عنوان بیش از ۲۵ کاراکتر نباشد.
- توضیحات: یک توضیح مفصل برای محصولی که میخواهید بفروشید باید ارائه کنید. این توضیح در صفحهٔ پرداخت بازار به کاربر نشان داده میشود. البته امکان استفاده از این توضیح در برنامهٔ خودتان نیز وجود دارد.
- قیمت: برای هر محصول باید یک قیمت به ریال وارد کنید. حداقل و حداکثر این قیمت در قرارداد شما با بازار مشخص شده است. قیمت محصول نمیتواند از مقداری که در قرارداد شما مشخص شده است، کمتر یا بیشتر باشد.
از طریق مقدار orderId
در فیلد PURCHASE_STATE_CHANGED
که در intent بازگشتی وجود دارد، میتوانید به شمارهٔ سفارش دسترسی داشته باشید. از این کد میتوانید در برنامه خود برای پیگیری خرید کاربر و یا برای ایجاد گزارشها استفاده کنید. شماره سفارش یک رشته اَسکی است که با یک فرمت مشخص از طریق بازار در اختیار شما قرار داده میشود.
"orderId" : "keXQZxQmY74kNU_J" برای دریافت کلید پرداخت بازار یک کلید عمومی در اختیار شما قرار میدهد که باید در برنامهٔ خود از آن استفاده کنید. این کلید برای هر برنامه منحصر به فرد است. برای دریافت این کلید در پنل توسعهدهندگیتان پس از انتخاب برنامه، از طریق سربرگ «پرداخت درونبرنامهای»، روی کلید RSA برنامهٔ خود کلیک کرده و آن را دریافت کنید.
بیشتر بخوانید:
به مطالب ارائه شده چه امتیازی میدهید؟
محل نوشتن دیدگاه ...
اگر در مورد محتوا نظر یا پیشنهادی دارید لطفا برای ما بنویسید.
زمان انتشار: ۱۴۰۰-۰۲-۱۶ ۱۸:۱۴
آخرین بهروزرسانی: ۱۴۰۰-۰۸-۰۵ ۰۸:۱۱