برنامه نمونه
نمونهی پیادهسازی شدهی پرداخت درونبرنامهای مایکت در React Native را از اینجا میتوانید دانلود کنید.
پیادهسازی
ابتدا در پنل توسعهدهندههای مایکت package name برنامه خود را رزرو نمایید.
اگر پروژه جدیدی را میخواهید شروع کنید ابتدا با دستورات زیر فایلهای اولیه خود را بسازید و اجرا کنید. اگر قصد اضافه کردن پرداخت به برنامه خود را دارید به مرحله بعدی بروید.
react-native init <REACT_APP_NAME>
یا
npx create-new-react-app <REACT_APP_NAME>
Permission خرید درونبرنامهای را در Manifest قرار دهید.
<uses-permission android:name="ir.mservices.market.BILLING" />
در build.gradle و در قسمت dependencies کتابخانه gson را اضافه نمایید.
dependencies { .... implementation 'com.google.code.gson:gson:2.8.6' }
این فایل حاوی یکسری فایلهای جاوا است که درون دو پوشهی myketiab و android قرار دارند. شما باید پوشه android و myketiab را در مسیر زیر قرار بدهید. (دقت کنید که حتی اگر پوشه com رو نداشتید آن را بسازید)
YOUR_PROJECT\android\app\src\main\java\com\
همچنین public key خود را در فایل /myketiab/MyketIap.java و در متغییر base64EncodedPublicKey قرار بدهید.
در انتها باید دو تغییر در فایل های MainApplication.java و MainActivity.java بدهید. که در مسیر /java/com/your-app قرار دارند. پکیج MyketIapPackage را باید در فایل MainApplication.java و در لیست پکیجها قرار بدهید.
@Override protected List<ReactPackage> getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List<ReactPackage> packages = new PackageList(this).getPackages(); // Packages that cannot be autolinked yet can be added manually here, for example: // packages.add(new MyReactNativePackage()) packages.add(new MyketIapPackage()); return packages; }
کار پایانی پیادهسازی یکسری callback های MainActivity.java است. تنها دو متد زیر را در انتهای کلاس MainActivity.java قرار بدهید. این برای برگردان نتیجه پرداخت درون برنامه ای به شما است.
public class MainActivity extends ReactActivity { static final String TAG = "Myket_Iap"; ..... ..... ..... @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); IabHelper helper = MyketIap.getInstance().getHelper(); if (helper == null) return; // Pass on the activity result to the helper for handling if (!helper.handleActivityResult(requestCode, resultCode, data)) { // not handled, so handle it ourselves (here's where you'd // perform any handling of activity results not related to in-app // billing... super.onActivityResult(requestCode, resultCode, data); } else { Log.d(TAG, "onActivityResult handled by IABUtil."); } } @Override protected void onDestroy() { super.onDestroy(); // very important: if (MyketIap.getInstance().getBroadcastReceiver() != null) { unregisterReceiver(MyketIap.getInstance().getBroadcastReceiver()); } // very important: Log.d(TAG, "Destroying helper."); if (MyketIap.getInstance().getHelper() != null) { MyketIap.getInstance().getHelper().dispose(); MyketIap.getInstance().setHelper(null); } } }
حال قادر خواهید بود از پرداخت درون برنامه استفاده کنید. فایلهای js را از اینجا دانلود کنید. فایل MyketIap.js و فولدر IapModels را کنار App.js قرار میدهیم و از آنها استفاده میکنیم. میتوانید محتویات App.js برنامه تستی را در App.js قرار دهید تا نتیجه را مشاهده کنید.
// Myket Iap import MyketIap from './MyketIap'; import Inventory from './IapModels/Inventory'; import IabResult from './IapModels/IabResult'; import Purchase from './IapModels/Purchase';
نمونه فایل app.js و برنامه پرداختدرونبرنامهای را میتوانید از اینجا دانلود کنید.
آشنایی با توابع
• MyketIap.initializeHelper(onGotInventoryListener, onReceivedListener): ◦ onGotInventoryListener: js callback ◦ onReceivedListener: js callback • MyketIap.consumeAsync(JSON.stringify(purchaseObj), onConsumeFinishedListener) ◦ purchaseObj: Purchase Model (IapModels/Purchase.Js) ◦ onConsumeFinishedListener: js callback • MyketIap.launchPurchaseFlow(SKU_NAME, REQUEST_CODE, onPurchaseFinishedListener) ◦ SKU_NAME: string ◦ REQUEST_CODE: int ◦ onPurchaseFinishedListener: js callback
آشنایی با Callbackها
• onPurchaseFinished(purchase, result) ◦ purchase: string (json-format) ◦ result: string (json-format) • onGotInventory(inventory, result) ◦ inventory: string (json-format) ◦ result: string (json-format) • onConsumeFinished(purchase, result) ◦ purchase: string (json-format) ◦ result: string (json-format)