نسخه چاپی
فهرست مطالب

پولکی ری‌اکت‌ نیتیو چیست؟

“پولکی ری‌اکت نیتیو” کتابخانه‌ای برای پیاده‌سازی پرداخت درون برنامه‌ بازار برای ری‌اکت نیتیو هست، این پروژه با استفاده از زیرساخت کتابخانه‌ی پولکی که با زبان kotlin نوشته شده پیاده‌سازی شده است. هدف از پیاده‌سازی این کتابخانه، بهبود فرآیند پیاده‌سازی پرداخت درون برنامه‌ای بازار برای توسعه‌دهنده است و به ما اجازه می‌دهد در طولانی مدت، قابلیت‌های تازه‌ای به این کتابخانه اضافه کنیم.

استفاده از “پولکی ری‌اکت نیتیو”

۱- افزودن کتابخانه به پروژه:

برای شروع نیاز هست که کتابخانه را به پروژه‌ خود اضافه کنید. برای اضافه کردن پروژه می‌توانید به یکی از دو روش زیر این کار را انجام دهید.

-  yarn add @cafebazaar/react-native-poolakey
- npm install @cafebazaar/react-native-poolakey

۲- ساخت و ساز

ساختار پرداخت درون برنامه‌ای به شکلی هست که برنامه شما باید مستقیما با برنامه بازار صحبت کند تا بتواند عملیات خرید و... را انجام دهد. برای صحبت کردن با بازار، ابتدا باید به بازار متصل شوید. برای انجام این کار ابتدا باید کتابخانه را در کامپوننت خود import کنید:

import { useBazaar } from '@cafebazaar/react-native-poolakey';

۳. اتصال به بازار

برای اتصال به بازار، به ۲ طریق می‌توانید این کار را انجام دهید:

۱- استفاده از متد useBazaar:

import { useBazaar } from '@cafebazaar/react-native-poolakey';
// ...
function MyComponent() {
  const bazaar = useBazaar(RSA_PUBLIC_KEY);
}

۲- وصل شدن و قطع اتصال در componentDidMount:

import bazaar from '@cafebazaar/react-native-poolakey';
// ...
class MyComponent {
  componentDidMount() {
    bazaar
      .connect(RSA_PUBLIC_KEY)
      .catch(handleError); // bazaar is not installed or what?!
  }
}

همان‌طور که می‌بینید، در catch به یک نمونه از throwable دسترسی دارید که به کمک آن می‌توانید متوجه مشکلی که باعث عدم اتصال برنامه شما به بازار شده است شوید.

  • به جای مقدار RSA_PUBLIC_KEY باید از کلید برنامه خود استفاده کنید، برای دریافت کلید برنامه به پنل پیشخان مراجعه کنید و در صفحه اطلاعات برنامه، وارد تب «پرداخت درون برنامه‌ای» شوید و کلید را از آنجا کپی کنید و به جای مقدار RSA_PUBLIC_KEY در نمونه کد بالا قرار دهید.

آبجکت bazaar پل ارتباطی بین برنامه شما و بازار است و از این آبجکت برای اتصال به بازار، خرید یک محصول و... می‌توانید استفاده کنید.

۴: قطع اتصال با بازار

برای جلوگیری از مشکلاتی همچون Memory Leak در صورتی که از متد connect استفاده کرده‌اید باید در متد componentWillUnmount اقدام به قطع اتصال با بازار کنید:

componentWillUnmount() {
    bazaar.disconnect();
  }

به ازای هر فراخوانی connect در کامپوننت‌های مختلف در نهایت باید دقیقا یک فراخوانی disconnect اتفاق بیافتد. در صورتی که تعداد فراخوانی‌های disconnect معادل connectها شود، اتصال با بازار کاملا قطع می‌شود.

در صورت استفاده از useBazaar نیاز به فراخوانی disconnect ندارید.

۵. شروع روند خرید یک محصول

برای شروع روند خرید یک محصول، باید از متد purchaseProduct استفاده کنید:

const purchaseResult = await bazaar.purchaseProduct(“PRODUCT_ID”);

به جای مقدار PRODUCT_ID باید مقدار شناسه محصولی که قصد خرید آن را دارید را جایگزین کنید. برای دریافت مقدار شناسه محصول مورد نظر، به پیشخان توسعه‌دهندگان مراجعه کنید و در صفحه اطلاعات برنامه، در تب «پرداخت درون برنامه‌ای» یک محصول جدید بسازید و شناسه‌ای برای آن در نظر بگیرید یا این که می‌توانید، شناسه محصول‌های پیشین که ساخته‌اید را جایگزین مقدار PRODUCT_ID کنید.

۶: شروع روند اشتراک یک محصول

برای اشتراک یک محصول، دقیقا مثل شروع خرید یک محصول عمل کنید و به جای استفاده از فانکشن purchaseProduct از فانکشن subscribeProduct موجود در آبجکت bazaar استفاده کنید.

۷: دریافت نتیجه خرید اشتراک و محصول

بعد از این‌که از یکی از فانکشن‌های purchaseProduct  یا  subscribeProduct استفاده کردید، باید از نتیجه خرید کاربر خود مطلع شوید. مقدار بازگشتی متدهای فوق <Promise<PurchaseResult می‌باشد. در صورت موفق بودن فرآیند پرداخت می‌توانید اطلاعات پرداخت را در مدل purchaseResult دریافت کنید. در صورتی که هر گونه مشکلی در فرآیند پرداخت بیافتد، promise مربوطه reject خواهد شد و خطا به شما برگردانده خواهد شد. می‌تواند از ساختار try-catch با async/await یا متد catch روی promise برای خواندن خطاها استفاده کنید.

۸: مصرف کردن خرید کاربر

وقتی کاربر یکی از محصولات دیجیتالی برنامه شما را خریداری می‌کند، مالک یک نسخه محصول مورد نظر می‌شود و در صورتی که شما کاربر را مجددا به صفحه پرداخت هدایت کنید، کاربر نمی‌تواند دوباره خرید خود را انجام دهد و با اطلاعات خرید قبلی به برنامه شما باز می‌گردد (purchaseSucceed). اما شما می‌توانید برای محصول مورد نظر خود تاریخ مصرف و یا شرایط خاصی را در نظر بگیرید که خرید مصرف شود که در این صورت کاربر می‌تواند مجددا خرید خود را انجام دهد. برای مصرف کردن یک خرید از فانکشن consumeProduct موجود در آبجکت  bazaar استفاده کنید:

consumeProduct(PURCHASE_TOKEN: string): Promise<void>

توجه کنید که به‌جای مقدار PURCHASE_TOKEN در نمونه کد بالا، باید مقدار واقعی توکن خریدی که می‌خواهید مصرف شود را قرار دهید. دسترسی به توکن خرید، از طریق PurchaseResult امکان‌پذیر است. وقتی کاربر خرید انجام می‌دهد، پولکی به شما یک PurchaseResult می‌دهد. همچنین می‌توانید تمام خریدهای کاربر که در برنامه شما انجام داده است را از طریق فانکشن getPurchasedProducts بدست بیاورید که در این صورت، پولکی به شما لیستی از  PurchaseResult می‌دهد که از این طریق نیز می‌توانید به توکن خرید دسترسی پیدا کنید.

توجه: محصولات اشتراکی را نمی‌توانید مصرف کنید.

توجه: به این نکته توجه داشته باشید که قبل از کار با consumeProduct باید مطمئن شوید که کاربر وارد حساب بازار خود شده است، در غیر این‌صورت این عملیات با خطا مواجه می‌شود.

۹: دریافت خریدهای کاربر در برنامه شما

شما می‌توانید با استفاده از فانکشن getPurchasedProducts موجود در آبجکت bazaar از خریدهای کاربر که در برنامه شما انجام داده است، مطلع شوید:

getPurchasedProducts(): Promise<PurchaseResult[]>

در صورتی که ارتباط با بازار به خوبی برقرار شود و مشکلی در دریافت لیست خریدها وجود نداشته باشد، لیستی از PurchaseResult به شما برمیگردد که می‌توانید به خریدهای کاربر دسترسی پیدا کنید.

توجه: به این نکته توجه داشته باشید قبل از کار با getPurchasedProducts باید مطمئن شوید که کاربر وارد حساب بازار خود شده است، در غیر این‌صورت صدا زدن این متد با خطا مواجه می‌شود.

۱۰: دریافت اشتراک‌های کاربر در برنامه شما

شما می‌توانید با استفاده از فانکشن getSubscribedProducts موجود در آبجکت bazaar از محصولاتی که کاربر اشتراک آنها را در برنامه شما خریداری کرده ، مطلع شوید:

getSubscribedProducts(): Promise<PurchaseResult[]>

در صورتی که ارتباط با بازار به خوبی برقرار شود و مشکلی در دریافت لیست اشتراک‌ها وجود نداشته باشد که در این صورت، لیستی از PurchaseResult به شما برمیگردد که می‌توانید به اشتراک‌های کاربر دسترسی پیدا کنید.

توجه: به این نکته توجه داشته باشید که قبل از کار با getSubscribedProducts باید مطمئن شوید که کاربر وارد حساب بازار خود شده است، در غیر این‌صورت queryFailedصدا زده می‌شود.

۱۱- دریافت جزییات محصولات

شما می‌توانید با استفاده از فانکشن getInAppSkuDetails می‌توانید جزییات محصولات را دریافت کنید.

getInAppSkuDetails(productIds: string[]): Promise<SkuDetails[]>

ورودی این متد لیستی PRODUCT_IDها است، به جای مقدار PRODUCT_ID باید مقدار شناسه محصولی که قصد دریافت جزییات آن را دارید را جایگزین کنید. برای دریافت مقدار شناسه محصول مورد نظر، به پیشخان توسعه‌دهندگان مراجعه کنید و در صفحه اطلاعات برنامه، در تب «پرداخت درون برنامه‌ای» یک محصول جدید بسازید و شناسه‌ای برای آن در نظر بگیرید یا این که می‌توانید، شناسه محصول‌های پیشین که ساخته‌اید را جایگزین مقدار PRODUCT_ID کنید.

در صورتی که ارتباط با بازار به خوبی برقرار شود و مشکلی در دریافت لیست جزییات محصولات وجود نداشته باشد، لیستی از SkuDetails به شما برمیگردد که می‌توانید به جزییات محصولات خود دسترسی پیدا کنید.

۱۲- دریافت جزییات محصولات اشتراکی

شما می‌توانید با استفاده از فانکشن getSubscriptionSkuDetails جزییات محصولات اشتراکی خود را دریافت کنید.

getInAppSkuDetails(productIds: string[]): Promise<SkuDetails[]>

ورودی این متد لیستی PRODUCT_IDها است، به جای مقدار PRODUCT_ID باید مقدار شناسه محصولی که قصد دریافت جزییات آن را دارید را جایگزین کنید. برای دریافت مقدار شناسه محصول مورد نظر، به پیشخان توسعه‌دهندگان مراجعه کنید و در صفحه اطلاعات برنامه، در تب «پرداخت درون برنامه‌ای» یک محصول جدید بسازید و شناسه‌ای برای آن در نظر بگیرید یا این که می‌توانید، شناسه محصول‌های پیشین که ساخته‌اید را جایگزین مقدار PRODUCT_ID کنید.

در صورتی که ارتباط با بازار به خوبی برقرار شود و مشکلی در دریافت لیست جزییات محصولات وجود نداشته باشد، لیستی از SkuDetails به شما برمیگردد که می‌توانید به جزییات محصولات خود دسترسی پیدا کنید.

به مطالب ارائه شده چه امتیازی می‌دهید؟
محل نوشتن دیدگاه ...

اگر در مورد محتوا نظر یا پیشنهادی دارید لطفا برای ما بنویسید.

زمان انتشار: ۱۴۰۰-۰۴-۲۷ ۱۰:۴۹

آخرین به‌روزرسانی: ۱۴۰۰-۰۸-۱۹ ۰۸:۳۲