У меня есть игра Unity3D для Android, в этой игре я использую систему Unity IAP, все работает нормально, но я не могу получить, если у игрока нет какой-либо из трех подписок, которые у меня есть имеется в наличии. Мой текущий код такой:
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
// Purchasing has succeeded initializing. Collect our Purchasing references.
Debug.Log("OnInitialized: PASS");
m_GooglePlayExtensions = extensions.GetExtension<IGooglePlayStoreExtensions>();
// Overall Purchasing system, configured with products for this application.
m_StoreController = controller;
// Store specific subsystem, for accessing device-specific store features.
m_StoreExtensionProvider = extensions;
Dictionary<string, string> Dict = m_GooglePlayExtensions.GetProductJSONDictionary();
foreach ( Product item in controller.products.all)
{
if (item.receipt != null)
{
if (item.definition.type == ProductType.Subscription)
{
print("Subscription");
string json = (Dict == null || !Dict.ContainsKey(item.definition.storeSpecificId)) ? null : Dict[item.definition.storeSpecificId];
SubscriptionManager s = new SubscriptionManager(item, json);
SubscriptionInfo info = s.getSubscriptionInfo();
if (PlayerPrefs.GetInt("VIP") == 1)
{
if (info.getProductId() == ProductVIP)
{
if (info.isSubscribed() == Result.False)
{
PlayerPrefs.SetInt("VIP", 0);
}
}
}
else if (PlayerPrefs.GetInt("VIP") == 2)
{
if (info.getProductId() == ProductGVIP)
{
if (info.isSubscribed() == Result.False)
{
PlayerPrefs.SetInt("VIP", 0);
}
}
}
else if (PlayerPrefs.GetInt("VIP") == 3)
{
if (info.getProductId() == ProductDVIP)
{
if (info.isSubscribed() == Result.False)
{
PlayerPrefs.SetInt("VIP", 0);
}
}
}
}
}
Когда игрок покупает какую-либо подписку, я меняю значение Int "VIP", которое сохраняется в PlayerPrefs, чтобы игра могла знать, есть ли подписка и какая. Код, который он должен получить, если не подписан, если да, изменит значение VIP на 0, указывая, что у него нет активной подписки