简体   繁体   English

Titanium Android:未找到应用内结算产品

[英]Titanium Android : in-app billing Product not found

I developing an Android application using Titanium Appcelerator. 我使用Titanium Appcelerator开发了一个Android应用程序。 I have a product in non-managed product ( non consumable product ) in the developer console. 我在开发人员控制台中的非受管产品( 非消耗性产品中有一个产品。 and when i try to access and purchase.. 当我尝试访问和购买时。

"The item you were attempting to purchase could not be found." “找不到您要购买的商品。”

MYCODE mycode的

InAppBilling.queryInventory(); InAppBilling.queryInventory();

var InAppBilling = require('ti.inappbilling');
    var PUBLIC_KEY = 'xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx';
    var DEVELOPER_PAYLOAD = 'gk@g.com';
    var toConsume = null;

    ////////////////////////////////////////////////////////
    // Utils
    ////////////////////////////////////////////////////////

    try
    {
        function runSetup() {
            log('Running startSetup...');
            InAppBilling.startSetup({
                publicKey : PUBLIC_KEY
            });
            log('Wait for setup to complete successfully');
        }

        function responseString(responseCode) {
            switch (responseCode) {
            case InAppBilling.RESULT_OK:
                return 'OK';
            case InAppBilling.RESULT_USER_CANCELED:
                return 'USER CANCELED';
            case InAppBilling.RESULT_BILLING_UNAVAILABLE:
                return 'BILLING UNAVAILABLE';
            case InAppBilling.RESULT_ITEM_UNAVAILABLE:
                return 'ITEM UNAVAILABLE';
            case InAppBilling.RESULT_DEVELOPER_ERROR:
                return 'DEVELOPER ERROR';
            case InAppBilling.RESULT_ERROR:
                return 'RESULT ERROR';
            case InAppBilling.RESULT_ITEM_ALREADY_OWNED:
                return 'RESULT ITEM ALREADY OWNED';
            case InAppBilling.RESULT_ITEM_NOT_OWNED:
                return 'RESULT ITEM NOT OWNED';

            case InAppBilling.IAB_RESULT_REMOTE_EXCEPTION:
                return 'IAB RESULT REMOTE EXCEPTION';
            case InAppBilling.IAB_RESULT_BAD_RESPONSE:
                return 'IAB RESULT BAD RESPONSE';
            case InAppBilling.IAB_RESULT_VERIFICATION_FAILED:
                return 'IAB RESULT VERIFICATION FAILED';
            case InAppBilling.IAB_RESULT_SEND_INTENT_FAILED:
                return 'IAB RESULT SEND INTENT FAILED';
            case InAppBilling.IAB_RESULT_UNKNOWN_PURCHASE_RESPONSE:
                return 'IAB RESULT UNKNOWN PURCHASE RESPONSE';
            case InAppBilling.IAB_RESULT_MISSING_TOKEN:
                return 'IAB RESULT MISSING TOKEN';
            case InAppBilling.IAB_RESULT_UNKNOWN_ERROR:
                return 'IAB RESULT UNKNOWN ERROR';
            case InAppBilling.IAB_RESULT_SUBSCRIPTIONS_NOT_AVAILABLE:
                return 'IAB RESULT SUBSCRIPTIONS NOT AVAILABLE';
            case InAppBilling.IAB_RESULT_INVALID_CONSUMPTION:
                return 'IAB RESULT INVALID CONSUMPTION';
            }
            return '';
        }

        function purchaseStateString(state) {
            switch (state) {
            case InAppBilling.PURCHASE_STATE_PURCHASED:
                return 'PURCHASE STATE PURCHASED';
            case InAppBilling.PURCHASE_STATE_CANCELED:
                return 'PURCHASE STATE CANCELED';
            case InAppBilling.PURCHASE_STATE_REFUNDED:
                return 'PURCHASE STATE REFUNDED';
            }
            return '';
        }

        function purchaseTypeString(state) {
            switch (state) {
            case InAppBilling.ITEM_TYPE_INAPP:
                return 'ITEM TYPE INAPP';
            case InAppBilling.ITEM_TYPE_SUBSCRIPTION:
                return 'ITEM TYPE SUBSCRIPTION';
            }
            return '';
        }

        function purchaseProperties(p) {
            var str = 'type: ' + purchaseTypeString(p.type) + '\norderId: ' + p.orderId + '\npackageName: ' + p.packageName + '\nproductId: ' + p.productId + '\npurchaseTime: ' + new Date(p.purchaseTime) + '\npurchaseState: ' + purchaseStateString(p.purchaseState) + '\ndeveloperPayload: ' + p.developerPayload + '\ntoken: ' + p.token;
            p_txid = p.token;
            return str;
        }

        ////////////////////////////////////////////////////////
        // setup                                              //
        ////////////////////////////////////////////////////////

        InAppBilling.addEventListener('setupcomplete', function(e) {
            log('Setup response: ' + responseString(e.responseCode));
            if (e.success) {
                log('Setup completed successfully!');
            } else {
                alert('InAppBilling Setup FAILED.');
            }
        });

        InAppBilling.addEventListener('queryinventorycomplete', function(e) {
            alert('Query Inventory response: ' + responseString(e.responseCode) + '\n -- ' + 'queryinventorycomplete-- ' + e.success);

            var inventory = e.inventory;
            var purchaseIds = ['com.app.et'];
            var purchase, details;
            if (e.success) {
                for (var i = 0, j = purchaseIds.length; i < j; i++) {
                    // Check for details
                    if (inventory.hasDetails(purchaseIds[i])) {
                        log('Check log for Purchase ' + i + ' details');
                        Ti.API.info('Details: ' + JSON.stringify(inventory.getDetails(purchaseIds[i])));
                    }
                    // Check for purchase
                    alert(purchaseIds[i] + '--hasPurchase--' + inventory.hasPurchase(purchaseIds[i]));
                    if (inventory.hasPurchase(purchaseIds[i])) {
                        purchase = inventory.getPurchase(purchaseIds[i]);
                        // Print details for each purchase
                        log('Check log for Purchase ' + i + ' properties');
                        Ti.API.info(purchaseProperties(purchase));

                    }
                }
            }

        });

        InAppBilling.addEventListener('purchasecomplete', function(e) {
            alert('Purchase response: ' + responseString(e.responseCode));
            if (e.success && e.purchase) {
                log(purchaseProperties(e.purchase));
                // Prepare the purchase to be consumed
                if (e.purchase.productId === 'gas') {
                    toConsume = e.purchase;
                    log('gas is queued to be consumed');
                }
                alert('Purchase completed successfully');

            }
        });

        InAppBilling.addEventListener('consumecomplete', function(e) {
            log('Consume response: ' + responseString(e.responseCode));
            if (e.success) {
                alert('Consume completed successfully');
            }
        });

        function make_purchase() {
            InAppBilling.queryInventory();
            //  alert('purchase android com.app.et ');
            InAppBilling.purchase({
                productId : 'com.app.et',
                type : InAppBilling.ITEM_TYPE_INAPP,
                developerPayload : DEVELOPER_PAYLOAD
            });

        }

ERROR : 错误

错误 :

应发布该应用程序(alpha或beta),以使这些商品可供购买。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM