Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Solved
  • Unsolved
  • Users
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Darkly)
  • No Skin
Collapse
brainCloud Forums
  1. Home
  2. APIs
  3. Are there plans to support Storekit 2 receipt verification?

Are there plans to support Storekit 2 receipt verification?

Scheduled Pinned Locked Moved Unsolved APIs
36 Posts 8 Posters 9.7k Views 8 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    LEE JONG GUN
    wrote on last edited by
    #5

    https://discussions.unity.com/t/unity-iap-5-0-2-ios-sandbox-same-receipt-returned-for-all-purchases-after-the-first-one/1692048/5

    Due to the issue described in the Unity discussion above, we need StoreKit 2 support on iOS as soon as possible. Please prioritize StoreKit 2 integration

    1 Reply Last reply
    3
    • N Offline
      N Offline
      noah
      wrote on last edited by
      #6

      StoreKit2 needs immediate support.

      1 Reply Last reply
      0
      • P Offline
        P Offline
        peter
        wrote on last edited by
        #7

        This is also a major blocker for us. We recently upgraded our laptops, which only support XCode 26. This meant we had to upgrade all of our dependencies, which forced us to migrate to Unity IAP v5 - so it's currently not possible for us to roll back to Unity IAP 4 (and therefore storekit 1).

        1 Reply Last reply
        0
        • J Offline
          J Offline
          JasonL
          bitHeads
          wrote on last edited by
          #8

          Confirmed, StoreKit2 support is included in the upcoming v5.9 release, scheduled for next week.

          1 Reply Last reply
          0
          • P Offline
            P Offline
            peter
            wrote on last edited by
            #9

            Thanks for the update!

            1 Reply Last reply
            0
            • Paul WinterhalderP Offline
              Paul WinterhalderP Offline
              Paul Winterhalder
              brainCloudAdmin
              wrote on last edited by
              #10

              Hi folks,

              brainCloud 5.9 is now live - with StoreKit2 support. Go to it!

              Paul.

              L 1 Reply Last reply
              0
              • Paul WinterhalderP Paul Winterhalder

                Hi folks,

                brainCloud 5.9 is now live - with StoreKit2 support. Go to it!

                Paul.

                L Offline
                L Offline
                LEE JONG GUN
                wrote on last edited by
                #11

                @Paul-Winterhalder Hello, is there guide for this menu?
                스크린샷 2026-01-13 오전 9.02.21.png

                and what is "Use App Store Server API for legacy receipts (optional)"?

                Michael CostaM 1 Reply Last reply
                0
                • L LEE JONG GUN

                  @Paul-Winterhalder Hello, is there guide for this menu?
                  스크린샷 2026-01-13 오전 9.02.21.png

                  and what is "Use App Store Server API for legacy receipts (optional)"?

                  Michael CostaM Offline
                  Michael CostaM Offline
                  Michael Costa
                  wrote on last edited by Michael Costa
                  #12

                  Hello @LEE-JONG-GUN!

                  In order to fill out these values, you will first need to go your app on App Store Connect, then go to App Information. Under General Information you will see the app's Apple ID (this number should also appear in the URL for your app, FYI).

                  Next you will need to go to the Users and Access > Integrations > In-App Purchases page in App Store Connect.

                  From there you can find the Issuer ID. Next you'll want to click on the + button to Generate In-App Purchase Key. Give it whatever name you think suitable and it should add it to the page. You will then need to download this IAP subscription key; this should reveal the Key ID for that subscription.

                  The downloaded IAP subscription key file should be in a .p8 file format. You can open it with a text editor in order to view the Encoded Key. Ctrl + A then Ctrl + C to copy the entire file to the Encoded Key field. Also keep this file somewhere safe, you can only download it once!

                  That should be all that's required in order to make use of brainCloud's StoreKit 2 integration 😁 .

                  Finally the option for Use App Store Server API for legacy receipts (optional) is there to have apps with older integrations of the brainCloud client to make use of the new implementation with the old StoreKit 1 receipt system.

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    peter
                    wrote on last edited by peter
                    #13

                    I have tried following the instruction (triple checked I have found and copied the correct fields) but I keep getting a "Itunes Inapp Integration fields incomplete" error when I try to save the page.

                    I am supplying:
                    App id > id shown in general information
                    Issuer id > Copied from in-app purchasing integrations page
                    Key ID > Copied form in-app purchasing integrations page (for the specific key)
                    Encoded key: Contents of the p8 file

                    The copied error message

                    ---- CONTEXT ----
                    
                    {
                      "email": "redacted@redacted.com",
                      "teamId": "redacted",
                      "accountNumber": "redacted",
                      "appId": "xxxx",
                      "appName": "Redacted",
                      "profileId": null,
                      "page_path": "/",
                      "page_search": "",
                      "page_hash": "#/app/design/core-app-info/application-ids",
                      "page_location": "https://portalx.braincloudservers.com/#/app/design/core-app-info/application-ids"
                    }
                    
                    ---- DETAILS ----
                    
                    {
                      "errorCode": 2020000,
                      "errorMessage": "Itunes Inapp Integration fields incomplete",
                      "reasonCode": 40660
                    }
                    
                    Michael CostaM 1 Reply Last reply
                    0
                    • P peter

                      I have tried following the instruction (triple checked I have found and copied the correct fields) but I keep getting a "Itunes Inapp Integration fields incomplete" error when I try to save the page.

                      I am supplying:
                      App id > id shown in general information
                      Issuer id > Copied from in-app purchasing integrations page
                      Key ID > Copied form in-app purchasing integrations page (for the specific key)
                      Encoded key: Contents of the p8 file

                      The copied error message

                      ---- CONTEXT ----
                      
                      {
                        "email": "redacted@redacted.com",
                        "teamId": "redacted",
                        "accountNumber": "redacted",
                        "appId": "xxxx",
                        "appName": "Redacted",
                        "profileId": null,
                        "page_path": "/",
                        "page_search": "",
                        "page_hash": "#/app/design/core-app-info/application-ids",
                        "page_location": "https://portalx.braincloudservers.com/#/app/design/core-app-info/application-ids"
                      }
                      
                      ---- DETAILS ----
                      
                      {
                        "errorCode": 2020000,
                        "errorMessage": "Itunes Inapp Integration fields incomplete",
                        "reasonCode": 40660
                      }
                      
                      Michael CostaM Offline
                      Michael CostaM Offline
                      Michael Costa
                      wrote on last edited by
                      #14

                      Hello @peter. Thank you for letting us know, we are currently looking into it.

                      As a work around, if you ENABLE "Use App Store Server API for legacy receipts (optional)", and the other fields are filled, you should be able to save. Afterwards you can DISABLE the optional value and it will still be able to save.

                      1 Reply Last reply
                      0
                      • P Offline
                        P Offline
                        peter
                        wrote on last edited by
                        #15

                        Thank you for the advice, we have now managed update our Application IDs.

                        However:

                        • We always get a 101 Transaction id not found failure from Brain Cloud when attempting to verify an in-app purchase.
                        • When Use App Store Server API for legacy receipts is checked, we also get a 101 failure when testing with older builds that use Brain Cloud 5.8 client and StoreKit1.
                          • However, if we uncheck this, older builds transactions succeed as expected.

                        Given the fact we see the same behaviour on legacy transactions, I suspect this may be a fault on your side? If not, is there anything further I can do to investigate?

                        Notes on retrieving a transaction id with Unity.

                        We are using Unity IAP 5.1.2, it can be a bit confusing to find out where to retrieve the TransactionID, and not the OriginalTransactionID - as requested by the BrainCloud docs. (Though in my initial testing shows these ids are often the the same).

                        Initially I parsed transactionID from the jws returned from the app store (a convoluted process), I then realised PendingOrder.Info.Receipt returns a json string which has TransactionID as one of it's fields.

                        The data we submit to VerifyPurchase() looks something like this:

                        {"excludeOldTransactions":false,"transactionId":"2000001103879447"}
                        
                        Michael CostaM 1 Reply Last reply
                        0
                        • P peter

                          Thank you for the advice, we have now managed update our Application IDs.

                          However:

                          • We always get a 101 Transaction id not found failure from Brain Cloud when attempting to verify an in-app purchase.
                          • When Use App Store Server API for legacy receipts is checked, we also get a 101 failure when testing with older builds that use Brain Cloud 5.8 client and StoreKit1.
                            • However, if we uncheck this, older builds transactions succeed as expected.

                          Given the fact we see the same behaviour on legacy transactions, I suspect this may be a fault on your side? If not, is there anything further I can do to investigate?

                          Notes on retrieving a transaction id with Unity.

                          We are using Unity IAP 5.1.2, it can be a bit confusing to find out where to retrieve the TransactionID, and not the OriginalTransactionID - as requested by the BrainCloud docs. (Though in my initial testing shows these ids are often the the same).

                          Initially I parsed transactionID from the jws returned from the app store (a convoluted process), I then realised PendingOrder.Info.Receipt returns a json string which has TransactionID as one of it's fields.

                          The data we submit to VerifyPurchase() looks something like this:

                          {"excludeOldTransactions":false,"transactionId":"2000001103879447"}
                          
                          Michael CostaM Offline
                          Michael CostaM Offline
                          Michael Costa
                          wrote on last edited by
                          #16

                          Hello @peter.

                          That's correct, you get the TransactionID from deserializing PendingOrder.Info.Receipt (at least that is the method I'm using 😅). The reason why you want the TransactionID and NOT the OriginalTransactionID is because renewed subscription purchases will have two different values for this.

                          Just a couple questions so we have more context:

                          1. Do you have the Bundle Id field filled on the Apple Platforms page on brainCloud? This is still a requirement for validating purchases. You'll need to make sure to have one set up for your app on Certificates, Identifiers & Profiles and that it matches the Bundle Identifier in your Unity Player Settings.

                          2. Are you running CachePurchasePayloadContext() (docs) before VerifyPurchase()? This is also a requirement for purchases of itunes type.

                          Please let me know so we can look deeper into this! Thanks 😄

                          L 1 Reply Last reply
                          0
                          • P Offline
                            P Offline
                            peter
                            wrote on last edited by
                            #17
                            1. Yes, we still have the Bundle Id configured in the Application ID > Apple page on brainCloud.
                            2. Yes, we are still calling CachePurchasePayloadContext() with itunes and the payload. This code path hasn't changed as we've upgraded from 5.8 to 5.9
                            1 Reply Last reply
                            0
                            • L Offline
                              L Offline
                              LEE JONG GUN
                              wrote on last edited by
                              #18
                              This post is deleted!
                              1 Reply Last reply
                              0
                              • Michael CostaM Michael Costa

                                Hello @peter.

                                That's correct, you get the TransactionID from deserializing PendingOrder.Info.Receipt (at least that is the method I'm using 😅). The reason why you want the TransactionID and NOT the OriginalTransactionID is because renewed subscription purchases will have two different values for this.

                                Just a couple questions so we have more context:

                                1. Do you have the Bundle Id field filled on the Apple Platforms page on brainCloud? This is still a requirement for validating purchases. You'll need to make sure to have one set up for your app on Certificates, Identifiers & Profiles and that it matches the Bundle Identifier in your Unity Player Settings.

                                2. Are you running CachePurchasePayloadContext() (docs) before VerifyPurchase()? This is also a requirement for purchases of itunes type.

                                Please let me know so we can look deeper into this! Thanks 😄

                                L Offline
                                L Offline
                                LEE JONG GUN
                                wrote on last edited by
                                #19

                                @Michael-Costa

                                "packetId": 13,
                                "responses": [
                                {
                                "data": {
                                "resultCode": 101,
                                "errorMessage": "Transaction id not found.",
                                "store": "itunes"
                                },
                                "status": 200
                                }
                                ]
                                }

                                After configuring the App Store Server API, enabling “Use App Store Server API for legacy receipts (optional)” appears to cause legacy receipt validation to stop working. Instead, the system starts requiring a transaction ID.

                                In other words, checking it has the opposite effect.

                                We are currently running a live service using the existing receipt-based flow, so we have this option turned off—meaning we are effectively using it in practice (because enabling it breaks legacy). We are very concerned that if this behavior gets “fixed” later, it could cause issues in our live service. Please take this into account and ensure any patch/change does not introduce regressions for live operations.

                                1 Reply Last reply
                                0
                                • Paul WinterhalderP Offline
                                  Paul WinterhalderP Offline
                                  Paul Winterhalder
                                  brainCloudAdmin
                                  wrote on last edited by
                                  #20

                                  HI Lee,

                                  Can you message into our support system with the appId involved - and the profileId of a user who had the issue?

                                  Thanks,

                                  Paul.

                                  L 1 Reply Last reply
                                  0
                                  • Paul WinterhalderP Paul Winterhalder

                                    HI Lee,

                                    Can you message into our support system with the appId involved - and the profileId of a user who had the issue?

                                    Thanks,

                                    Paul.

                                    L Offline
                                    L Offline
                                    LEE JONG GUN
                                    wrote on last edited by LEE JONG GUN
                                    #21

                                    @Paul-Winterhalder

                                    Hello

                                    Project 14594
                                    Tester ID 1b5c9fce-a890-4d86-86aa-dd71263d0fc1

                                    App Store \Server API has been fully configured in the current BrainCloud settings, and “Use App Store Server API for legacy receipts (optional)” is turned OFF.
                                    This option must be disabled for the legacy receipt flow to function, so it is intentionally kept turned off in order to use the current setup.

                                    When checking Verify Purchase in the user ID logs, the client has not yet been updated, so it is not sending a transactionId and is instead sending the receipt, following the legacy receipt-based flow.

                                    1 Reply Last reply
                                    0
                                    • Paul WinterhalderP Offline
                                      Paul WinterhalderP Offline
                                      Paul Winterhalder
                                      brainCloudAdmin
                                      wrote on last edited by
                                      #22

                                      Hi @LEE-JONG-GUN ,

                                      Is that a sandbox receipt for that user? We seem to have found a second flow for sandbox purchases - not sure why there are two - maybe for older vs. newer receipts?

                                      Anyway - we've created a patch and will be deploying it soon.

                                      Paul.

                                      L 1 Reply Last reply
                                      0
                                      • Paul WinterhalderP Paul Winterhalder

                                        Hi @LEE-JONG-GUN ,

                                        Is that a sandbox receipt for that user? We seem to have found a second flow for sandbox purchases - not sure why there are two - maybe for older vs. newer receipts?

                                        Anyway - we've created a patch and will be deploying it soon.

                                        Paul.

                                        L Offline
                                        L Offline
                                        LEE JONG GUN
                                        wrote on last edited by
                                        #23

                                        @Paul-Winterhalder Yes, that’s correct. It is a sandbox account.

                                        After the patch, it would be good if existing receipts continue to work by default.

                                        1 Reply Last reply
                                        0
                                        • Paul WinterhalderP Offline
                                          Paul WinterhalderP Offline
                                          Paul Winterhalder
                                          brainCloudAdmin
                                          wrote on last edited by
                                          #24

                                          Hi @LEE-JONG-GUN - the patch has been deployed. Let us know if it works better for you.

                                          L 1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Solved
                                          • Unsolved
                                          • Users