खोज…


उपभोज्य में app खरीद

उपभोज्य प्रबंधित उत्पाद ऐसे उत्पाद हैं जिन्हें कई बार खरीदा जा सकता है जैसे कि इन-गेम मुद्रा, खेल जीवन, बिजली-अप, आदि।

इस उदाहरण में, हम 4 अलग उपभोज्य प्रबंधित उत्पादों "item1", "item2", "item3", "item4" को लागू करने जा रहे हैं।

सारांश में कदम:

  1. अपने प्रोजेक्ट (AIDL फ़ाइल) में इन-ऐप बिलिंग लाइब्रेरी जोड़ें।
  2. AndroidManifest.xml फ़ाइल में आवश्यक अनुमति जोड़ें।
  3. Google डेवलपर्स कंसोल पर एक हस्ताक्षरित एपीके तैनात करें।
  4. अपने उत्पादों को परिभाषित करें।
  5. कोड लागू करें।
  6. टेस्ट इन-ऐप बिलिंग (वैकल्पिक)।

चरण 1:

सबसे पहले, हमें आपकी परियोजना में AIDL फ़ाइल को जोड़ने की आवश्यकता होगी, जैसा कि यहां Google प्रलेखन में स्पष्ट रूप से बताया गया है

IInAppBillingService.aidl एक Android इंटरफ़ेस परिभाषा भाषा (AIDL) फ़ाइल है, जो इन-ऐप बिलिंग संस्करण 3 सेवा के इंटरफ़ेस को परिभाषित करती है। आप इस इंटरफ़ेस का उपयोग IPC विधि कॉल द्वारा बिलिंग अनुरोध करने के लिए करेंगे।

चरण 2:

AIDL फ़ाइल जोड़ने के बाद, AndroidManifest.xml में बिलिंग अनुमति जोड़ें:

<!-- Required permission for implementing In-app Billing -->
<uses-permission android:name="com.android.vending.BILLING" />

चरण 3:

एक हस्ताक्षरित APK जेनरेट करें, और इसे Google डेवलपर्स कंसोल पर अपलोड करें। यह आवश्यक है ताकि हम अपने इन-ऐप उत्पादों को वहां परिभाषित करना शुरू कर सकें।

चरण 4:

अपने सभी उत्पादों को अलग-अलग productID के साथ परिभाषित करें, और उनमें से प्रत्येक के लिए एक मूल्य निर्धारित करें। 2 प्रकार के उत्पाद (प्रबंधित उत्पाद और सदस्यता) हैं। जैसा कि हमने पहले ही कहा था, हम 4 अलग उपभोज्य प्रबंधित उत्पादों "item1", "item2", "item3", "item4" को लागू करने जा रहे हैं।

चरण 5:

उपरोक्त सभी चरणों को करने के बाद, अब आप स्वयं अपनी गतिविधि में कोड को लागू करना शुरू करने के लिए तैयार हैं।

मुख्य गतिविधि:

public class MainActivity extends Activity {

    IInAppBillingService inAppBillingService;
    ServiceConnection serviceConnection;

    // productID for each item. You should define them in the Google Developers Console.
    final String item1 = "item1";
    final String item2 = "item2";
    final String item3 = "item3";
    final String item4 = "item4";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Instantiate the views according to your layout file.
        final Button buy1 = (Button) findViewById(R.id.buy1);
        final Button buy2 = (Button) findViewById(R.id.buy2);
        final Button buy3 = (Button) findViewById(R.id.buy3);
        final Button buy4 = (Button) findViewById(R.id.buy4);

        // setOnClickListener() for each button.
        // buyItem() here is the method that we will implement to launch the PurchaseFlow.
        buy1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buyItem(item1);
            }
        });

        buy2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buyItem(item2);
            }
        });

        buy3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buyItem(item3);
            }
        });

        buy4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buyItem(item4);
            }
        });

        // Attach the service connection.
        serviceConnection = new ServiceConnection() {
            @Override
            public void onServiceDisconnected(ComponentName name) {
                inAppBillingService = null;
            }

            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                inAppBillingService = IInAppBillingService.Stub.asInterface(service);
            }
        };

        // Bind the service.
        Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
        serviceIntent.setPackage("com.android.vending");
        bindService(serviceIntent, serviceConnection, BIND_AUTO_CREATE);

        // Get the price of each product, and set the price as text to
        // each button so that the user knows the price of each item.
        if (inAppBillingService != null) {
            // Attention: You need to create a new thread here because
            // getSkuDetails() triggers a network request, which can
            // cause lag to your app if it was called from the main thread.
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    ArrayList<String> skuList = new ArrayList<>();
                    skuList.add(item1);
                    skuList.add(item2);
                    skuList.add(item3);
                    skuList.add(item4);
                    Bundle querySkus = new Bundle();
                    querySkus.putStringArrayList("ITEM_ID_LIST", skuList);

                    try {
                        Bundle skuDetails = inAppBillingService.getSkuDetails(3, getPackageName(), "inapp", querySkus);
                        int response = skuDetails.getInt("RESPONSE_CODE");

                        if (response == 0) {
                            ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");

                            for (String thisResponse : responseList) {
                                JSONObject object = new JSONObject(thisResponse);
                                String sku = object.getString("productId");
                                String price = object.getString("price");

                                switch (sku) {
                                    case item1:
                                        buy1.setText(price);
                                        break;
                                    case item2:
                                        buy2.setText(price);
                                        break;
                                    case item3:
                                        buy3.setText(price);
                                        break;
                                    case item4:
                                        buy4.setText(price);
                                        break;
                                }
                            }
                        }
                    } catch (RemoteException | JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
            thread.start();
        }
    }

    // Launch the PurchaseFlow passing the productID of the item the user wants to buy as a parameter.
    private void buyItem(String productID) {
        if (inAppBillingService != null) {
            try {
                Bundle buyIntentBundle = inAppBillingService.getBuyIntent(3, getPackageName(), productID, "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
                PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
                startIntentSenderForResult(pendingIntent.getIntentSender(), 1003, new Intent(), 0, 0, 0);
            } catch (RemoteException | IntentSender.SendIntentException e) {
                e.printStackTrace();
            }
        }
    }

    // Unbind the service in onDestroy(). If you don’t unbind, the open
    // service connection could cause your device’s performance to degrade.
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (inAppBillingService != null) {
            unbindService(serviceConnection);
        }
    }

    // Check here if the in-app purchase was successful or not. If it was successful,
    // then consume the product, and let the app make the required changes.
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1003 && resultCode == RESULT_OK) {

            final String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");

            // Attention: You need to create a new thread here because
            // consumePurchase() triggers a network request, which can
            // cause lag to your app if it was called from the main thread.
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        JSONObject jo = new JSONObject(purchaseData);
                        // Get the productID of the purchased item.
                        String sku = jo.getString("productId");
                        String productName = null;

                        // increaseCoins() here is a method used as an example in a game to
                        // increase the in-game currency if the purchase was successful.
                        // You should implement your own code here, and let the app apply
                        // the required changes after the purchase was successful.
                        switch (sku) {
                            case item1:
                                productName = "Item 1";
                                increaseCoins(2000);
                                break;
                            case item2:
                                productName = "Item 2";
                                increaseCoins(8000);
                                break;
                            case item3:
                                productName = "Item 3";
                                increaseCoins(18000);
                                break;
                            case item4:
                                productName = "Item 4";
                                increaseCoins(30000);
                                break;
                        }

                        // Consume the purchase so that the user is able to purchase the same product again.
                        inAppBillingService.consumePurchase(3, getPackageName(), jo.getString("purchaseToken"));
                        Toast.makeText(MainActivity.this, productName + " is successfully purchased. Excellent choice, master!", Toast.LENGTH_LONG).show();
                    } catch (JSONException | RemoteException e) {
                        Toast.makeText(MainActivity.this, "Failed to parse purchase data.", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }
                }
            });
            thread.start();
        }
    }
}

चरण 6:

कोड लागू करने के बाद, आप बीटा / अल्फ़ा चैनल पर अपने एपीके को तैनात करके इसका परीक्षण कर सकते हैं, और अन्य उपयोगकर्ताओं को आपके लिए कोड का परीक्षण करने दें। हालाँकि, परीक्षण मोड में वास्तविक इन-ऐप खरीदारी नहीं की जा सकती है। आपको अपना ऐप / गेम पहले प्ले स्टोर पर प्रकाशित करना होगा ताकि सभी उत्पाद पूरी तरह से सक्रिय हो जाएं।

इन-ऐप बिलिंग के परीक्षण के बारे में अधिक जानकारी यहां पाई जा सकती है

(थर्ड पार्टी) इन-ऐप v3 लाइब्रेरी

चरण 1: सबसे पहले ऐप कार्यक्षमता में जोड़ने के लिए इन दो चरणों का पालन करें:

1. पुस्तकालय का उपयोग कर जोड़ें:

 repositories {
            mavenCentral()
        }
        dependencies {
           compile 'com.anjlab.android.iab.v3:library:1.0.+'
        }

2. मैनिफ़ेस्ट फ़ाइल में अनुमति जोड़ें।

<uses-permission android:name="com.android.vending.BILLING" />

चरण 2: अपने बिलिंग प्रोसेसर को प्रारंभ करें:

BillingProcessor bp = new BillingProcessor(this, "YOUR LICENSE KEY FROM GOOGLE PLAY CONSOLE HERE", this);

और बिलिंग हैंडलर लागू करें: BillingProcessor.IBillingHandler जिसमें 4 विधियाँ हैं: a। onBillingInitialized (); ख। onProductPurchased (स्ट्रिंग productId, TransactionDetails विवरण): यह वह जगह है जहां आपको सफल खरीद के बाद किए जाने वाले कार्यों को संभालने की आवश्यकता है। onBillingError (int errorCode, Throwable error): खरीद प्रक्रिया के दौरान हुई किसी भी त्रुटि को हैंडल करें d। onPurchaseHistoryRestored (): ऐप खरीदारी में पुनर्स्थापित करने के लिए

चरण 3: किसी उत्पाद की खरीद कैसे करें।

प्रबंधित उत्पाद खरीदने के लिए:

bp.purchase(YOUR_ACTIVITY, "YOUR PRODUCT ID FROM GOOGLE PLAY CONSOLE HERE");

और सदस्यता खरीदने के लिए:

bp.subscribe(YOUR_ACTIVITY, "YOUR SUBSCRIPTION ID FROM GOOGLE PLAY CONSOLE HERE");

चरण 4: किसी उत्पाद का उपभोग करना।

एक उत्पाद का उपभोग करने के लिए बस उपभोगपार्क विधि को बुलाओ।

bp.consumePurchase ("GOOGLE PLAY CONSOLE HERE से आपकी उत्पाद आईडी");

ऐप विजिट से संबंधित अन्य तरीकों के लिए जीथब



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow