User Tag List

Page 1 of 2 1 2 LastLast
Results 1 to 10 of 13

Thread: This In-App Purchase has already been bought. It will be restored for free.

  1. #1
    Clicker Fusion 2.5 (Steam)Fusion 2.5 Developer (Steam)Android Export Module (Steam)iOS Export Module (Steam)

    Join Date
    May 2014
    Posts
    223
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    This In-App Purchase has already been bought. It will be restored for free.

    So, after putting my game on the Apple Store with the code from the newest Steam version of Clickteam Fusion 2.5, I started receiving complaints from people that tried to buy an in app purchase, but did not receive it in the game, and instead, when they try to buy again, they receive the message: This In-App Purchase has already been bought. It will be restored for free.

    If they try to restore the purchase, the application will hang indefinitely.

    My code regarding the in app purchases is very simple, and has not changed since I first uploaded the app back in April. I have never received such a complaint before, but now I already received 2 complaints in two days, and I've only updated the app around 4 days ago.

    I looked into the CRunIOSStore class, to see what was changed from the previous version (I think 289.3 was the previous version I had on steam), and from what I can tell, there are 3 major changes. First, there's the

    if(requestResponses.count > 0 || invalidProductIdentifiers > 0)

    line that was changed to !=0 to avoid the 'Ordered comparison between pointer and zero' error.

    Then there's the modification regarding the transactionReceipt, which was done to avoid getting the 'transactionReceipt has been deprecated since iOS 7.0' message.

    And finally, there's been a change in the way that SKPaymentQueue is being called. In the code from before, it was only getting called once at the end, but from what I'm seeing, it's being called multiple times in the new version, and the method of calling it has also been changed.

    I am suspecting that the source of the problem is either somehow related to this final change, or it's related to some new library that has a transactionObserver that I don't know about which might be messing up the SKPaymentQueue. Here's a link where they talk about how SKPaymentQueue can call the transactionObserver from the wrong library sometimes: http://greensopinion.com/2017/03/22/...en-Bought.html

    I would love to modify the code in my app myself, but unfortunately I am not knowledgeable enough in iOS programming to be able to change the code without fear of messing something up. Would it be possible to have a look at the code and see if there isn't something you've missed, that might be causing the transactionObserver to no longer be called correctly in the case where a purchase gets corrupted?

    Thanks.

  2. #2
    Clicker Fusion 2.5
    Fusion 2.5 (Steam)Fusion 2.5 Developer (Steam)Fusion 2.5+ DLC (Steam)Android Export Module (Steam)HTML5 Export Module (Steam)iOS Export Module (Steam)Universal Windows Platform Export Module (Steam)
    tk22's Avatar
    Join Date
    Dec 2014
    Posts
    74
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    I am having the same issue with some of my users (not all of them). They purchase an IAP and it will not activate for them if they use restore purchases feature it would not find any purchases also if they attempt to buy the same IAP they will get a message saying they already have it and they will restore it for free but it would not work.
    I tried giving them a promo code generated from "App Store Connect" and it would not work for them it will show them an error that they already own this IAP. I have checked their purchase history and they have the purchase states as completed

    I am using clickteam build 292.22
    used xcode 10 to build the app
    people that had the issue were using OS version 13.1 to 13.3
    @Fernando if you have any edits I am willing to try them and see if they solve the problem

  3. #3
    Clickteam Clickteam
    Fernando's Avatar
    Join Date
    Dec 2006
    Posts
    6,561
    Mentioned
    257 Post(s)
    Tagged
    4 Thread(s)
    can you share your logic from mfa as image? delete what is propetiary data in these events.
    Regards,


    Fernando Vivolo

    ... new things are coming ...

  4. #4
    Clicker Fusion 2.5
    Fusion 2.5 (Steam)Fusion 2.5 Developer (Steam)Fusion 2.5+ DLC (Steam)Android Export Module (Steam)HTML5 Export Module (Steam)iOS Export Module (Steam)Universal Windows Platform Export Module (Steam)
    tk22's Avatar
    Join Date
    Dec 2014
    Posts
    74
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    Question

    Quote Originally Posted by Fernando View Post
    can you share your logic from mfa as image? delete what is propetiary data in these events.
    IAP issue iOS2.png
    on line 159 I am using it for debugging
    -For people that have the problem: no IAP is found when restoring and nothing is added to the debug list
    -For people that do not have the problem: all IAP are found when restoring and are added to the debug list

    so I am not sure what is happening

  5. #5
    Clickteam Clickteam
    Fernando's Avatar
    Join Date
    Dec 2006
    Posts
    6,561
    Mentioned
    257 Post(s)
    Tagged
    4 Thread(s)
    mm when you restoring you don't check what is being returned using ProductIdentifier$( "iOS Store" ) and with that compare to your different products.

    can you show also the full flow when you start to asking request response.
    Regards,


    Fernando Vivolo

    ... new things are coming ...

  6. #6
    Clicker Fusion 2.5
    Fusion 2.5 (Steam)Fusion 2.5 Developer (Steam)Fusion 2.5+ DLC (Steam)Android Export Module (Steam)HTML5 Export Module (Steam)iOS Export Module (Steam)Universal Windows Platform Export Module (Steam)
    tk22's Avatar
    Join Date
    Dec 2014
    Posts
    74
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Fernando View Post
    mm when you restoring you don't check what is being returned using ProductIdentifier$( "iOS Store" ) and with that compare to your different products.

    can you show also the full flow when you start to asking request response.
    I actually check the productIdentifier but did not show everything to make the code easier to read
    this is the full code of requesting and restoring
    1.png
    2.png

    I have the log for bugged user and working 100% user please see below:

    log from user with the problem when restoring (iOS 13.3.1):
    Code:
    default	23:35:09.586224+0300	runningboardd	Acquiring assertion targeting application<com.tableknightgames.barraalsalfah> from originator [daemon<com.apple.SpringBoard>:20920] with description <RBSAssertionDescriptor; com.apple.UIKit.KeyboardManagement.message; ID: 12583-20920-193817; target: 23544> attributes = {
        <RBSLegacyAttribute: 0x127092530; requestedReason: FinishTask; reason: FinishTask; flags: AllowIdleSleep | PreventTaskSuspend | PreventTaskThrottleDown | PreventThrottleDownUI>;
        <RBSAcquisitionCompletionAttribute: 0x127080760; policy: 0>;
    }
    default	23:35:09.586463+0300	runningboardd	Assertion 12583-20920-193817 (target:application<com.tableknightgames.barraalsalfah>) will be created as inactive as start-time-defining assertions exist
    default	23:35:09.588846+0300	runningboardd	Finished acquiring assertion 12583-20920-193817 (target:application<com.tableknightgames.barraalsalfah>)
    default	23:35:09.589229+0300	runningboardd	Invalidating assertion 12583-20920-193817 (target:application<com.tableknightgames.barraalsalfah>) from originator 20920
    default	23:35:09.604852+0300	BarraAlsalfah_20_03_2020	Resetting scope = 1, element = 0
    default	23:35:09.717740+0300	BarraAlsalfah_20_03_2020	Resetting scope = 1, element = 1
    default	23:35:10.156804+0300	SpringBoard	Got a device orientation change, forwarding portrait (1) to sceneID:com.tableknightgames.barraalsalfah-default
    default	23:35:10.164338+0300	SpringBoard	[sceneID:com.tableknightgames.barraalsalfah-default] Sending scene action [SceneLifecycleEventOnly][0x8c0b] through WorkspaceServer: 0x280e62ac0
    default	23:35:10.166229+0300	SpringBoard	[sceneID:com.tableknightgames.barraalsalfah-default] Scene action [SceneLifecycleEventOnly][0x8c0b] completed with success: 1
    default	23:35:11.483814+0300	runningboardd	Acquiring assertion targeting application<com.tableknightgames.barraalsalfah> from originator [daemon<com.apple.SpringBoard>:20920] with description <RBSAssertionDescriptor; com.apple.UIKit.KeyboardManagement.message; ID: 12583-20920-193818; target: 23544> attributes = {
        <RBSLegacyAttribute: 0x125f682e0; requestedReason: FinishTask; reason: FinishTask; flags: AllowIdleSleep | PreventTaskSuspend | PreventTaskThrottleDown | PreventThrottleDownUI>;
        <RBSAcquisitionCompletionAttribute: 0x125f18e70; policy: 0>;
    }
    default	23:35:11.483889+0300	runningboardd	Assertion 12583-20920-193818 (target:application<com.tableknightgames.barraalsalfah>) will be created as inactive as start-time-defining assertions exist
    default	23:35:11.484453+0300	runningboardd	Finished acquiring assertion 12583-20920-193818 (target:application<com.tableknightgames.barraalsalfah>)
    default	23:35:11.484595+0300	runningboardd	Invalidating assertion 12583-20920-193818 (target:application<com.tableknightgames.barraalsalfah>) from originator 20920
    default	23:35:11.503988+0300	BarraAlsalfah_20_03_2020	Resetting scope = 1, element = 0
    default	23:35:13.135482+0300	BarraAlsalfah_20_03_2020	Payment Queue Restore Completed Transactions Finished
    default	23:35:15.921180+0300	SpringBoard	Got a device orientation change, forwarding faceUp (5) to sceneID:com.tableknightgames.barraalsalfah-default
    default	23:35:15.928781+0300	SpringBoard	[sceneID:com.tableknightgames.barraalsalfah-default] Sending scene action [SceneLifecycleEventOnly][0x17] through WorkspaceServer: 0x280e62ac0
    default	23:35:15.930061+0300	SpringBoard	[sceneID:com.tableknightgames.barraalsalfah-default] Scene action [SceneLifecycleEventOnly][0x17] completed with success: 1
    log from user that is working 100% when restoring (iOS 10.3.4):
    Code:
    default	23:05:34.710052+0300	BarraAlsalfah_20_03_2020	TIC TCP Conn Start [3:0x176d21c0]
    default	23:05:34.768726+0300	locationd	message 'kCLConnectionMessageWatchdog' received from client '/System/Library/LocationBundles/NavdLocationBundleiOS.bundle'
    default	23:05:34.850581+0300	BarraAlsalfah_20_03_2020	TIC TCP Conn Event [3:0x176d21c0]: 1 Err(0)
    default	23:05:34.851138+0300	BarraAlsalfah_20_03_2020	TIC TCP Conn Connected [3:0x176d21c0]: Err(0)
    default	23:05:34.851542+0300	BarraAlsalfah_20_03_2020	TIC Enabling TLS [3:0x176d21c0]
    default	23:05:34.951097+0300	BarraAlsalfah_20_03_2020	TIC TLS Event [3:0x176d21c0]: 2, Pending(0)
    default	23:05:34.951663+0300	BarraAlsalfah_20_03_2020	TIC TLS Event [3:0x176d21c0]: 11, Pending(0)
    default	23:05:34.957999+0300	BarraAlsalfah_20_03_2020	TIC TLS Event [3:0x176d21c0]: 12, Pending(0)
    default	23:05:34.961519+0300	BarraAlsalfah_20_03_2020	TIC TLS Event [3:0x176d21c0]: 14, Pending(0)
    default	23:05:34.985430+0300	BarraAlsalfah_20_03_2020	TIC TLS Trust Result [3:0x176d21c0]: 0
    default	23:05:35.108552+0300	BarraAlsalfah_20_03_2020	TIC TLS Event [3:0x176d21c0]: 20, Pending(0)
    default	23:05:35.118309+0300	BarraAlsalfah_20_03_2020	TIC TCP Conn Event [3:0x176d21c0]: 8 Err(0)
    default	23:05:35.118607+0300	BarraAlsalfah_20_03_2020	TIC TLS Handshake Complete [3:0x176d21c0]
    default	23:05:35.245009+0300	BarraAlsalfah_20_03_2020	TIC TCP Conn Cancel [3:0x176d21c0]
    default	23:05:35.249907+0300	BarraAlsalfah_20_03_2020	TIC TCP Conn Destroyed [3:0x176d21c0]
    default	23:05:36.052050+0300	itunesstored	<private>:AppReceipt:0:Success:Wrote app receipt
    default	23:05:36.065435+0300	BarraAlsalfah_20_03_2020	Payment Queue Updated Transactions
    default	23:05:36.066642+0300	BarraAlsalfah_20_03_2020	Sending events from store ...
    default	23:05:36.107845+0300	BarraAlsalfah_20_03_2020	Restored purchase for identifier: 350000652395322
    default	23:05:36.117446+0300	BarraAlsalfah_20_03_2020	Payment Queue Restore Completed Transactions Finished
    default	23:05:36.122013+0300	BarraAlsalfah_20_03_2020	Removed transactions from queue

  7. #7
    Clickteam Clickteam
    Fernando's Avatar
    Join Date
    Dec 2006
    Posts
    6,561
    Mentioned
    257 Post(s)
    Tagged
    4 Thread(s)
    mm make a small mfa for me to test here this week.

    this object have been tested here with 12.4.5 and 13.4.1 so far iphone and ipad.
    Regards,


    Fernando Vivolo

    ... new things are coming ...

  8. #8
    Clicker Fusion 2.5
    Fusion 2.5 (Steam)Fusion 2.5 Developer (Steam)Fusion 2.5+ DLC (Steam)Android Export Module (Steam)HTML5 Export Module (Steam)iOS Export Module (Steam)Universal Windows Platform Export Module (Steam)
    tk22's Avatar
    Join Date
    Dec 2014
    Posts
    74
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Fernando View Post
    mm make a small mfa for me to test here this week.

    this object have been tested here with 12.4.5 and 13.4.1 so far iphone and ipad.
    I have made a small mfa iOS Restore Issue.mfa

    I also got additional info from a user when they used their ipad iOS 9.3.5 and they did a restore it worked for them they got the purchases but it still does not work on their iphone

    If you need any more information please let me know 

  9. #9
    Clicker Fusion 2.5
    Fusion 2.5 (Steam)Fusion 2.5 Developer (Steam)Fusion 2.5+ DLC (Steam)Android Export Module (Steam)HTML5 Export Module (Steam)iOS Export Module (Steam)Universal Windows Platform Export Module (Steam)
    tk22's Avatar
    Join Date
    Dec 2014
    Posts
    74
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    @Fernando Any updates on the matter?

    new case I got a user that bought 2 IAP the first IAP did not activate the second IAP activated and when attempting to restore it only finds the second IAP but not the first

  10. #10
    Clickteam Clickteam
    Fernando's Avatar
    Join Date
    Dec 2006
    Posts
    6,561
    Mentioned
    257 Post(s)
    Tagged
    4 Thread(s)
    Yes i check your code and doesn't seems correct, simple question why don't you track for each item restored or payment, you are also using and fast loop for get information

    without waiting for a previous one, this is not how teh object should work.

    explaining

    using fast loop will make all request for information without waiting for a previous response.

    basically should be done by step, one request get one verification (fill your data item information, show prices, etc.)

    then payment or restore should be done using product ID this will grant that all information is correctly points to the benefit user is paying for.

    Even the code concept is nice trying to narrow the amount of code, in this case will bring errors, purchase is an asynchronous process, could answer in 10 msecs but in some case can take secs.
    Regards,


    Fernando Vivolo

    ... new things are coming ...

Page 1 of 2 1 2 LastLast

Similar Threads

  1. I just bought Firefly
    By dascribe in forum Firefly
    Replies: 2
    Last Post: 9th December 2016, 12:06 AM
  2. ShowGun is Out! (Free, and working in-app purchase!)
    By Sephirenn in forum iOS Export Module Version 2.0
    Replies: 2
    Last Post: 19th April 2012, 01:19 PM
  3. How can I make a free version that upgrads after a purchase?
    By BrashMonkey in forum iOS Export Module Version 2.0
    Replies: 7
    Last Post: 13th April 2012, 07:38 PM
  4. just bought mmf 2 w/ios export
    By malospam in forum iOS Export Module Version 2.0
    Replies: 2
    Last Post: 24th September 2011, 11:18 PM
  5. If I purchase now do I get a free upgrade?
    By Dud in forum Multimedia Fusion 2 - Technical Support
    Replies: 4
    Last Post: 9th September 2008, 07:02 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •