Can't fetch products from App Store Connect

95 views Asked by At

I had everything working with Revenue Cat. Then my app got rejected for not loading subscriptions, which was odd because a previous built was rejected for wording on that same paywall.

I checked, and realised I suddenly can't fetch products in testFlight either. I can only see products in Xcode using the store kit configuration file.

I've found many issues like this online and everybody point to the same solutions (that seem to work for most), but here's what I tried so far:

  1. Checked that all my agreements in App Store Connect are active
  2. Checked that ids match between Xcode / revenue cat / App Store connect
  3. Store kit config file is syncing with App Store Connect correctly
  4. I removed revenue cat and used the store kit api directly to fetch products. The array of products is empty in all environments that don't have access to store kit config file.
  5. Checked status of all subscriptions (all waiting for review -- as they were when the paywall worked)

Nothing seems to work...

Any suggestions? Many thanks

Update:

I found the problem, but I’m unsure what to do with it, so still need some help.

It turns out that because the app is iPhone-only and not a universal app, Store Kit won't fetch products when the app runs in compatibility mode. We identified that the App Store reviewer tested our iPhone app on an iPad. When we run the app on an iPhone, everything is fine.

We temporarily replaced Revenue Cat with calls directly from Store Kit, and when we try to fetch products on an iPad, we get an error:

Received error that does not have a corresponding StoreKit Error: Error Domain=ASDErrorDomain Code=500 "(null)" UserInfo={NSUnderlyingError=0x3032769d0 {Error Domain=AMSErrorDomain Code=301 "Invalid Status Code" UserInfo={NSLocalizedDescription=Invalid Status Code, AMSURL=https://amp-api.sandbox.apple.com/v1/catalog/gb/in-apps?additionalPlatforms=iphone&extend=kind&filter%5BappBundleId%5D=io.houseofmars.Pearla&filter%5BsubscriptionFamilyId%5D=21448567&l=en-GB&omit%5Bresource%5D=autos&platform=ipad&with=adHocOffers, AMSStatusCode=400, AMSServerPayload={
errors =     (
            {
        code = 40004;
        detail = "Parameter 'additionalPlatforms' is not allowed";
        id = 25T7JY2SONEPRPL5BY55CRBAGE;
        source =             {
            parameter = additionalPlatforms;
        };
        status = 400;
        title = "Invalid Parameter";
    }
);

}, NSLocalizedFailureReason=Response status code is: 400}}}

If we temporarily allow iPad as a supported platform, the error disappears, and the products load correctly.

  1. Our app is not designed to scale to iPad-size screens, so we can't enable iPad support.
  2. There doesn’t seem to be a way to prevent apps from running in iPhone compatibility mode on iPads.
  3. Our app is getting rejected due to reviewers being unable to get past the paywall.

Is there a way to enable in-app purchases to work for iPhone apps running on iPads?

** Update 2 ** So far, there doesn't seem to be a way around this issue. However, Apple's review team eventually approved our app after some explaining.

Note that if you have an iPhone only app, iPad users will be able to download it, but they will not be able to fetch products / subscriptions from the App Store and get past the paywall.

As of March 2024 there's no reliable way to detect if a user is in iPhone simulation mode on an iPad.

1

There are 1 answers

1
guycas On

So far, there doesn't seem to be a way around this issue. However, Apple's review team eventually approved our app after some explaining.

Note that if you have an iPhone only app, iPad users will be able to download it, but they will not be able to fetch products / subscriptions from the App Store and get past the paywall.

As of March 2024 there's no reliable way to detect if a user is in iPhone simulation mode on an iPad.