Androidのアプリ内購入を行うシステムを開発しようとしています。1 つのデバイスを使用すると、システムをうまく統合できます。ユーザーが noConsumible アイテムを購入してアプリを再インストールすると、このアイテムが提供されました。
同じアカウントで他のデバイスを使用すると問題が発生します。一部のデバイスで購入すると、アプリの再起動または再インストール時に購入を検出できず、次のメッセージ「アイテムは既に所有されていました」が表示されますが、このエラーをキャッチしてアイテムを渡すことができません。
- 手順:
- デバイス A にアプリをインストールする
- デバイスAで消耗品を購入する
- デバイスBにアプリをインストール
- 確認項目 デバイス B に消耗品がありませんでした
- デバイスBで消耗品を購入する
- デバイス A でアプリを再起動します
- 確認項目 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;
}
}
}
誰でも私を助けることができますか?