Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

[Solved] IAP Subscription empty on IOS

Discussion in 'Unity IAP' started by ibps13, Jun 8, 2018.

Thread Status:
Not open for further replies.
  1. ibps13

    ibps13

    Joined:
    Oct 6, 2012
    Posts:
    113
    Hi,

    I trying to get receipt of subscription purshase but value are allways empty, purshase are correct and validateon sandbox.



    Code (CSharp):
    1.  
    2. // Check if user have subscription and renew in wp if nescessary
    3.     IEnumerator CheckOwnedProducts()
    4.     {
    5.         //yield return new WaitForEndOfFrame();
    6.         // Wait until the module is initialized
    7.         if (!InAppPurchasing.IsInitialized())
    8.         {
    9.             yield return new WaitForSeconds(1f);
    10.         }
    11.        
    12.         //*****************************************************************
    13.         //
    14.         // GET INFO SUBSCRIPTION MOBILE VIA RECEIPT IF EXIST
    15.         //
    16.         //*****************************************************************
    17.         Dictionary<string, string> dict = InAppPurchasing.StoreExtensionProvider.GetExtension<IAppleExtensions>().GetIntroductoryPriceDictionary();
    18.  
    19.         foreach (Product item in InAppPurchasing.StoreController.products.all)
    20.         {
    21.             if(Constants.DEBUG)Debug.Log("item.receipt = "+item.receipt);
    22.            
    23.            // this is the usage of SubscriptionManager class
    24.             if (item.receipt != null)
    25.             {
    26.                 if(Constants.DEBUG)Debug.Log("ProductType = "+item.definition.type);
    27.                
    28.                if (item.definition.type == ProductType.Subscription)
    29.                {
    30.                    string intro_json = (dict == null || !dict.ContainsKey(item.definition.storeSpecificId)) ? null :  dict[item.definition.storeSpecificId];
    31.                    
    32.                    SubscriptionManager p = new SubscriptionManager(item, intro_json);
    33.                    SubscriptionInfo info = p.getSubscriptionInfo();
    34.                    
    35.                    productId = info.getProductId();
    36.                    purchaseDate = info.getPurchaseDate().ToDdMmYySlash().ToString();
    37.                    expireDate = info.getExpireDate().ToDdMmYySlash().ToString();
    38.                    isSubscribed = info.isSubscribed().ToString();
    39.                    isExpired = info.isExpired().ToString();
    40.                    isCancelled = info.isCancelled().ToString();
    41.                    isFreeTrial = info.isFreeTrial().ToString();
    42.                    isAutoRenewing = info.isAutoRenewing().ToString();
    43.                    getRemainingTime = info.getRemainingTime().TotalDays.ToString();
    44.                    isIntroductoryPricePeriod = info.isIntroductoryPricePeriod().ToString();
    45.                    getIntroductoryPrice = info.getIntroductoryPrice();
    46.                    getIntroductoryPricePeriod= info.getIntroductoryPricePeriod().TotalDays.ToString();
    47.                    getIntroductoryPricePeriodCycles = info.getIntroductoryPricePeriodCycles().ToString();
    48.                    getSubscriptionPeriod = info.getSubscriptionPeriod().TotalDays.ToString();
    49.                    
    50.                    if(Constants.DEBUG)Debug.Log("getProductId ="+info.getProductId());
    51.                    if(Constants.DEBUG)Debug.Log("getPurchaseDate ="+info.getPurchaseDate());
    52.                    if(Constants.DEBUG)Debug.Log("getExpireDate ="+info.getExpireDate());
    53.                    if(Constants.DEBUG)Debug.Log("isSubscribed ="+info.isSubscribed());
    54.                    if(Constants.DEBUG)Debug.Log("isExpired ="+info.isExpired());
    55.                    if(Constants.DEBUG)Debug.Log("isCancelled ="+info.isCancelled());
    56.                    if(Constants.DEBUG)Debug.Log("isFreeTrial ="+info.isFreeTrial());
    57.                    if(Constants.DEBUG)Debug.Log("isAutoRenewing ="+info.isAutoRenewing());
    58.                    if(Constants.DEBUG)Debug.Log("getRemainingTime ="+info.getRemainingTime());
    59.                    if(Constants.DEBUG)Debug.Log("isIntroductoryPricePeriod ="+info.isIntroductoryPricePeriod());
    60.                    if(Constants.DEBUG)Debug.Log("getIntroductoryPrice ="+info.getIntroductoryPrice());
    61.                    if(Constants.DEBUG)Debug.Log("getIntroductoryPricePeriod ="+info.getIntroductoryPricePeriod());
    62.                    if(Constants.DEBUG)Debug.Log("getIntroductoryPricePeriodCycles ="+info.getIntroductoryPricePeriodCycles());
    63.                    if(Constants.DEBUG)Debug.Log("getSubscriptionPeriod ="+info.getSubscriptionPeriod());
    64.                    
    65.                    //*****************************************************************
    66.                    //
    67.                    // RENEWAL SUBSCRIPTION TO WP
    68.                    //
    69.                    //*****************************************************************
    70.                    //If user have a valid renewal mobile subscription
    71.                    //and suscription on site expired, renew it
    72.                    if(has_subsciptiondebug == "expired")
    73.                    {
    74.                        if(isSubscribed == "" && isExpired == "")
    75.                        {
    76.                            if(Constants.DEBUG)Debug.Log("isSubscribed && isExpired values are empty");
    77.                        }
    78.                        else
    79.                        {
    80.                               if(isSubscribed == "Result.True" && isExpired == "Result.False")
    81.                               {
    82.                                   RenewalSubscriptionMetaUser( ParseRenewalResponse, ( cmlData result ) => Debug.LogWarning( result.String( "message" )));
    83.                               }
    84.                        }
    85.                        
    86.                    }
    87.                }
    88.                else
    89.                {
    90.                    if(Constants.DEBUG)Debug.Log("the product is not a subscription product");
    91.                }
    92.             }
    93.             else
    94.             {
    95.                if(Constants.DEBUG)Debug.Log("the product should have a valid receipt");
    96.             }
    97.         }
    98.         //*****************************************************************
    99.         //
    100.         // END
    101.         //
    102.         //*****************************************************************
    103.  
    Any idea why all values are empty ?

    Some log:

    Code (CSharp):
    1. 2018-06-08 08:25:12.846497+0200 pronos[1497:1060342] UnityIAP: Requesting 3 products
    2. 2018-06-08 08:25:12.848135+0200 pronos[1497:1060342] UnityIAP: Requesting product data...
    3. NullReferenceException: Object reference not set to an instance of an object.
    4.   at FormulesController+<CheckOwnedProducts>c__Iterator0.MoveNext () [0x00000] in <00000000000000000000000000000000>:0
    5.   at UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) [0x00000] in <00000000000000000000000000000000>:0
    6. (Filename: currently not available on il2cpp Line: -1)
    7.  
    8. 2018-06-08 08:25:13.818686+0200 pronos[1497:1060342] UnityIAP: Received 3 products
    9. In-App Purchasing OnInitialized: PASS
    10. EasyMobile.StoreListener:OnInitialized(IStoreController, IExtensionProvider)
    11. UnityEngine.Purchasing.PurchasingManager:CheckForInitialization()
    12. UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
    13. UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
    14. UnityEngine.Purchasing.Extension.UnityUtil:Update()
    15. (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
    16.  
    17. Processing purchase of product: 1000000405741094
    18. EasyMobile.StoreListener:ProcessPurchase(PurchaseEventArgs)
    19. UnityEngine.Purchasing.PurchasingManager:ProcessPurchaseIfNew(Product)
    20. UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
    21. UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
    22. UnityEngine.Purchasing.Extension.UnityUtil:Update()
    23. (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
    24.  
    25. Product purchase completed.
    26. EasyMobile.StoreListener:ProcessPurchase(PurchaseEventArgs)
    27. UnityEngine.Purchasing.PurchasingManager:ProcessPurchaseIfNew(Product)
    28. UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
    29. UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
    30. UnityEngine.Purchasing.Extension.UnityUtil:Update()
    31. (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
    32.  
    33. Product_1_mois, achat réussi
    34. EasyMobile.StoreListener:ProcessPurchase(PurchaseEventArgs)
    35. UnityEngine.Purchasing.PurchasingManager:ProcessPurchaseIfNew(Product)
    36. UnityEngine.Purchasing.PurchasingManager:OnProductsRetrieved(List`1)
    37. UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
    38. UnityEngine.Purchasing.Extension.UnityUtil:Update()
    39. (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
    40.  
    41. 2018-06-08 08:25:13.892885+0200 pronos[1497:1060342] UnityIAP: Transaction 1000000405741094 not pending, nothing to finish here
    42. UnityIAP: Promo interface is available for 2 items
    43. UnityEngine.Purchasing.Promo:ProvideProductsToAds(HashSet`1)
    44. UnityEngine.Purchasing.AppleStoreImpl:OnProductsRetrieved(String)
    45. UnityEngine.Purchasing.Extension.UnityUtil:Update()
    46.  
    thanks
     
  2. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    You have an exception at the top of your logs, can you identify which object it may be referring to? This code looks suspect on line 1, item.receipt may be null (which you check on line 4)

    1. if(Constants.DEBUG)Debug.Log("item.receipt = "+item.receipt);
    2. // this is the usage of SubscriptionManager class
    3. if (item.receipt != null)
     
  3. ibps13

    ibps13

    Joined:
    Oct 6, 2012
    Posts:
    113
    Thanks JeffDUnity3D,

    Corrected this but is not this causing empty receipt, I used EasyMobile assets, I'v ccreated product on inapp panel setting but apparently I need to create products in Unity InApp panel too... Just finished tested and works fine.

    I'm not sure if it's normal ? but it's working... Unity 2017.4.2f1 InApp 1.19, last EasyMobile version.
     
  4. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446
    Not sure what EasyMobile is as we don't test it, glad IAP is working for you now.
     
Thread Status:
Not open for further replies.