C# 购买不适用于XBox和Microsoft应用商店
Unity3D。Xbox。 实现了为游戏购买许可证。在Microsoft Store for desctop Windows中,它可以正常工作(从应用商店和Visual Studio下安装时,包括在调试程序集中),在开发和零售模式下,它在XBox上不工作。许可证(购买)已在商店里存放了一周。为了进行实验,我将程序集发布在openaccess中(这一天还没有过去)。我再说一遍:购买在桌面上没有问题,在XBox上没有问题。此代码不起作用(两种情况下,检查都起作用): БаааC# 购买不适用于XBox和Microsoft应用商店,c#,unity3d,C#,Unity3d,Unity3D。Xbox。 实现了为游戏购买许可证。在Microsoft Store for desctop Windows中,它可以正常工作(从应用商店和Visual Studio下安装时,包括在调试程序集中),在开发和零售模式下,它在XBox上不工作。许可证(购买)已在商店里存放了一周。为了进行实验,我将程序集发布在openaccess中(这一天还没有过去)。我再说一遍:购买在桌面上没有问题,在XBox上没有问题。此代码不起作用(两种情况下,检查都起作用): Бааа public
public static async void PurchaseFullLicense(Action<XBoxIAPStatus, Exception> purchaseCallback, Action<XBoxIAPStatus> licChanged)
{
#if ENABLE_IL2CPP && UNITY_WSA_10_0
licenseChanged = licChanged;
if (context == null)
{
context = StoreContext.GetDefault();
// Подписываемся на событие изменения лицензии
context.OfflineLicensesChanged += context_OfflineLicensesChanged;
}
if (context == null)
{
purchaseCallback?.Invoke(XBoxIAPStatus.NoInitContext, null);
return;
}
// Получить информацию о продукте в магазине приложений
StoreProductResult productResult = await context.GetStoreProductForCurrentAppAsync();
if (productResult == null || productResult.Product == null)
//if (productResult.ExtendedError != null)
{
// Пользователь может быть отключен или может быть какой-то другой сбой сервера
purchaseCallback?.Invoke(XBoxIAPStatus.NotGetStoreProduct, productResult.ExtendedError);
return;
}
// Покупка полной лицензии ...
StoreAppLicense license = await context.GetAppLicenseAsync();
if (license != null && appLicense.IsActive && license.IsTrial)
{
// Пока демо версия
StorePurchaseResult result = await productResult.Product.RequestPurchaseAsync();
if (result.ExtendedError != null)
{
// Ошибка: print result.ExtendedError.Message
purchaseCallback?.Invoke(XBoxIAPStatus.NotRequestPurchase, null);
return;
}
// Покупка прошла. Результат:
switch (result.Status)
{
case StorePurchaseStatus.AlreadyPurchased:
// Вы уже купили это приложение и имеете полностью лицензированную версию
purchaseCallback?.Invoke(XBoxIAPStatus.AlreadyPurchased, null);
return;
case StorePurchaseStatus.Succeeded:
// Лицензия будет обновлена автоматически с помощью события StoreContext.OfflineLicensesChanged
purchaseCallback?.Invoke(XBoxIAPStatus.Succeeded, null);
return;
case StorePurchaseStatus.NotPurchased:
// Товар не был куплен, возможно, он был отменен
purchaseCallback?.Invoke(XBoxIAPStatus.NotPurchased, null);
return;
case StorePurchaseStatus.NetworkError:
// Сетевая ошибка
purchaseCallback?.Invoke(XBoxIAPStatus.NetworkError, null);
return;
case StorePurchaseStatus.ServerError:
// Ошибка сервера
purchaseCallback?.Invoke(XBoxIAPStatus.ServerError, null);
return;
default:
// Не определённая ошибка
purchaseCallback?.Invoke(XBoxIAPStatus.UnDefined, null);
return;
}
}
else
// Вы уже купили это приложение и имеете полностью лицензированную версию
purchaseCallback?.Invoke(XBoxIAPStatus.LicenseFull, null);
#else
purchaseCallback?.Invoke(XBoxIAPStatus.NotXBoxPlatform, null);
#endif
#pragma warning restore 1998
}
public静态异步void PurchaseFullLicense(操作purchaseCallback,操作licChanged)
{
#如果启用\u IL2CPP&&UNITY\u WSA\u 10\u 0
licenseChanged=licChanged;
if(上下文==null)
{
context=StoreContext.GetDefault();
// Подписываемся на событие изменения лицензии
context.offlinelicensechanged+=context\u offlinelicensechanged;
}
if(上下文==null)
{
purchaseCallback?.Invoke(XBoxIAPStatus.NoInitContext,null);
返回;
}
// Получить информацию о продукте в магазине приложений
StoreProductResult=等待上下文。GetStoreProductForCurrentAppAsync();
if(productResult==null | | productResult.Product==null)
//if(productResult.ExtendedError!=null)
{
// Пользователь может быть отключен или может быть какой-то другой сбой сервера
purchaseCallback?.Invoke(XBoxIAPStatus.NotGetStoreProduct、productResult.ExtendedError);
返回;
}
// Покупка полной лицензии ...
StoreAppLicense许可证=等待上下文。GetApplicenseAync();
if(license!=null&&appLicense.IsActive&&license.IsTrial)
{
// Пока демо версия
StorePurchaseResult=等待productResult.Product.RequestPurchaseAsync();
if(result.ExtendedError!=null)
{
//CharStyleбббб:打印结果.ExtendedError.Message
purchaseCallback?.Invoke(XBoxIAPStatus.NotRequestPurchase,null);
返回;
}
// Покупка прошла. Результат:
开关(结果状态)
{
case StorePurchaseStatus.AlreadyPurchased:
// Вы уже купили это приложение и имеете полностью лицензированную версию
purchaseCallback?.Invoke(XBoxIAPStatus.AlreadyPurchased,null);
返回;
案例StorePurchaseStatus。成功:
//商店环境。离线许可证转让
purchaseCallback?.Invoke(XBoxIAPStatus.successed,null);
返回;
case StorePurchaseStatus.NotPurchased:
// Товар не был куплен, возможно, он был отменен
purchaseCallback?.Invoke(XBoxIAPStatus.NotPurchased,null);
返回;
case StorePurchaseStatus.NetworkError:
// Сетевая ошибка
purchaseCallback?.Invoke(XBoxIAPStatus.NetworkError,null);
返回;
case StorePurchaseStatus.ServerError:
// Ошибка сервера
purchaseCallback?.Invoke(XBoxIAPStatus.ServerError,null);
返回;
违约:
// Не определённая ошибка
purchaseCallback?.Invoke(XBoxIAPStatus.UnDefined,null);
返回;
}
}
其他的
// Вы уже купили это приложение и имеете полностью лицензированную версию
purchaseCallback?.Invoke(XBoxIAPStatus.LicenseFull,null);
#否则
purchaseCallback?.Invoke(XBoxIAPStatus.NotXBoxPlatform,空);
#恩迪夫
#布拉格警告恢复1998
}
public static async void PurchaseFullLicense(Action<XBoxIAPStatus, Exception> purchaseCallback, Action<XBoxIAPStatus> licChanged)
{
#if ENABLE_IL2CPP && UNITY_WSA_10_0
licenseChanged = licChanged;
if (context == null)
{
context = StoreContext.GetDefault();
// Подписываемся на событие изменения лицензии
context.OfflineLicensesChanged += context_OfflineLicensesChanged;
}
if (context == null)
{
purchaseCallback?.Invoke(XBoxIAPStatus.NoInitContext, null);
return;
}
// Получить информацию о продукте в магазине приложений
StoreProductResult productResult = await context.GetStoreProductForCurrentAppAsync();
if (productResult == null || productResult.Product == null)
//if (productResult.ExtendedError != null)
{
// Пользователь может быть отключен или может быть какой-то другой сбой сервера
purchaseCallback?.Invoke(XBoxIAPStatus.NotGetStoreProduct, productResult.ExtendedError);
return;
}
// Покупка полной лицензии ...
StoreAppLicense license = await context.GetAppLicenseAsync();
if (license != null && appLicense.IsActive && license.IsTrial)
{
// Пока демо версия
StorePurchaseResult result = await productResult.Product.RequestPurchaseAsync();
if (result.ExtendedError != null)
{
// Ошибка: print result.ExtendedError.Message
purchaseCallback?.Invoke(XBoxIAPStatus.NotRequestPurchase, null);
return;
}
// Покупка прошла. Результат:
switch (result.Status)
{
case StorePurchaseStatus.AlreadyPurchased:
// Вы уже купили это приложение и имеете полностью лицензированную версию
purchaseCallback?.Invoke(XBoxIAPStatus.AlreadyPurchased, null);
return;
case StorePurchaseStatus.Succeeded:
// Лицензия будет обновлена автоматически с помощью события StoreContext.OfflineLicensesChanged
purchaseCallback?.Invoke(XBoxIAPStatus.Succeeded, null);
return;
case StorePurchaseStatus.NotPurchased:
// Товар не был куплен, возможно, он был отменен
purchaseCallback?.Invoke(XBoxIAPStatus.NotPurchased, null);
return;
case StorePurchaseStatus.NetworkError:
// Сетевая ошибка
purchaseCallback?.Invoke(XBoxIAPStatus.NetworkError, null);
return;
case StorePurchaseStatus.ServerError:
// Ошибка сервера
purchaseCallback?.Invoke(XBoxIAPStatus.ServerError, null);
return;
default:
// Не определённая ошибка
purchaseCallback?.Invoke(XBoxIAPStatus.UnDefined, null);
return;
}
}
else
// Вы уже купили это приложение и имеете полностью лицензированную версию
purchaseCallback?.Invoke(XBoxIAPStatus.LicenseFull, null);
#else
purchaseCallback?.Invoke(XBoxIAPStatus.NotXBoxPlatform, null);
#endif
#pragma warning restore 1998
}