0

Androidのアプリ内購入を行うシステムを開発しようとしています。1 つのデバイスを使用すると、システムをうまく統合できます。ユーザーが noConsumible アイテムを購入してアプリを再インストールすると、このアイテムが提供されました。

同じアカウントで他のデバイスを使用すると問題が発生します。一部のデバイスで購入すると、アプリの再起動または再インストール時に購入を検出できず、次のメッセージ「アイテムは既に所有されていました」が表示されますが、このエラーをキャッチしてアイテムを渡すことができません。

  • 手順:
    1. デバイス A にアプリをインストールする
    2. デバイスAで消耗品を購入する
    3. デバイスBにアプリをインストール
    4. 確認項目 デバイス B に消耗品がありませんでした
    5. デバイスBで消耗品を購入する
    6. デバイス A でアプリを再起動します
    7. 確認項目 No 消耗品がデバイス 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