0

我正在尝试开发一个系统来进行 android 应用内购买。如果我使用一台设备,我可以很好地集成系统,当用户购买 noConsumible 项目并重新安装应用程序时,会给出这个项目。

使用具有相同帐户的其他设备时会出现问题。在某些设备上进行购买时,另一个在重新启动或重新安装应用程序时无法检测到购买,并显示下一条消息“物品已拥有”,但我无法捕捉到此错误并提供该物品。

  • 要遵循的步骤:
    1. 在设备 A 上安装应用程序
    2. 在设备 A 上购买无消耗品
    3. 在 deice B 上安装应用程序
    4. 检查设备 B 上没有提供耗材项目
    5. 在设备 B 上购买无消耗品
    6. 在设备 A 上重新启动应用程序
    7. 检查项目 No Consumible 未在设备 A 上提供

代码:

   private void initializeUnityIAP()
{
    if (IStoreListener != null && IStoreListener.IsUnityIAPInicialized())
    {
        return;
    }

    // Create a builder, first passing in a suite of Unity provided stores.
    var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
    //Configure google play
    builder.Configure<IGooglePlayConfiguration>().SetPublicKey(GOOGLE_PLAY_KEY);

    // Adding currency pack
    foreach (VirtualCurrencyPack currencyPack in storeAssets.packs)
    {
        builder.AddProduct(currencyPack.id, ProductType.Consumable, new IDs() {
            { currencyPack.id, AppleAppStore.Name },
            { currencyPack.id, GooglePlay.Name },
        });
    }

    // Adding offers
    foreach (VirtualOffer virtualOffer in storeAssets.offers)
    {
        builder.AddProduct(virtualOffer.id, ProductType.NonConsumable, new IDs() {
            { virtualOffer.id, AppleAppStore.Name },
            { virtualOffer.id, GooglePlay.Name },
        });
    }

    IStoreListener = new AxesBillingStoreListener();
    UnityPurchasing.Initialize(IStoreListener, builder);
}



public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
    m_StoreController = controller;
    m_StoreExtensionProvider = extensions;


    foreach (var item in controller.products.all)
    {
        //Product is available
        if (item.availableToPurchase)
        {
            // Update definition data product
            AxesBillingManager.instance.GetElementById(item.definition.id).purchaseType.amount = (double)(item.metadata.localizedPrice);
            AxesBillingManager.instance.GetElementById(item.definition.id).purchaseType.currencyCode = item.metadata.isoCurrencyCode;

            // Product was purchase
            if (item.hasReceipt)
            {
                VirtualObject element = AxesBillingManager.instance.GetElementById(item.definition.id);
                element.Give(element.amountToGive);
            }
        }
        else
        {
            //Product is not available in store
            AxesBillingManager.instance.GetElementById(item.definition.id).isAvailableInGoogleStore = false;
        }
    }
}

谁能帮我?

4

0 回答 0