Rejection by Apple: Guideline 3.1.1 - In-App Purchase ...

@luaykanaan

Thanks for sharing the info.

Do you mean you had a rejected app validated just by changing the build settings ?

If so, it could be a nice workaround waiting for the fix :slight_smile:

@rob

Thanks for the follow up.

I thought too it might not be related to other IAP stores being included

(especially with ā€˜supportedPlatforms = { android=true }ā€™ defined).

HopeĀ Engineering will have some insight on this.

PS: still waiting for a reply from Apple on my sideā€¦

Apple seems to have issues. This is impacting many native developers too:

https://forums.developer.apple.com/thread/78759

And Apple isnā€™t being very responsive about it.

Rob

What theā€¦?

This looks bad!

@GoG,

No. I have a planned ā€œsubmitā€ at the end of this week. To avoid getting a rejection, I split my build.settings. However, it seems i have mis-understood @rob. I thought he said we should have a separate build.settings for each platform but according to 4 posts up it doesnā€™t matter.

@luaykanaan

Thanks for the confirmation.

Unfortunately, it might not make any difference indeed.

@rob

This does look badā€¦ So it was an issue with Apple review process in the end.

According to the forum, it has been around since early June and still no answer.

Itā€™s still weird that previous version of our apps get validated (week ago) and then abruptly denied.

@d.mach

Just out of curiosity, do you use the Appodeal plugin too ?

As it includes a lot of other ad provider SDK, maybe some of the

code is what triggers Apple bot rejection claim.

No, we just use the basic Corona features and the only active plugin is Flurry analytics.

@d.mach

Thanks for your answer.

Might come from something else thenā€¦

Just read another forum post:

https://forums.developer.apple.com/thread/73244

I use collectible coins in my game to unlock harder levels but they canā€™t be bought.

I know a lot of game that do just that without issue (it even was present in my previously validated versions).

Do you have similar mechanics in yours ? Do you think it can be whatā€™s triggering Apple rejection ?

Thanks

The only thing we did change is the following:

we have defined a string for showing the inapp price in case the price can not be loaded from the store. In this case the predefined hardcoded string is shown. For example:

Someone opens the shop to purchase products, but internet is not available and the correct price can not be loaded from the product onlineā€¦ in this case we show ā€œ0.99$ā€ as a hardcoded string.

If the store can be reached the correct string (price) is loaded and then shows: ā€œ$0.99ā€ or the price based on the country the product is purchased in.

Maybe itā€™s the ā€œhardcodedā€ value!?

Iā€™m starting to suspect my ā€˜collect coins to unlock levelsā€™ feature to be the source of the rejection as,

according to Apple guidelines:

3.1.1 In-App Purchase:

  • If you want to unlock features or functionality within your app, (by way of example: subscriptions, in-game currencies, game levels, access to premium content, or unlocking a full version), you must use in-app purchase. Apps may use in-app purchase currencies to enable customers to ā€œtipā€ digital content providers in the app. Apps and their metadata may not include buttons, external links, or other calls to action that direct customers to purchasing mechanisms other than in-app purchase.

Ā 

Maybe the last iOS reviewer read that quite strictly (compare to previous ones validation my app).
Ā 

@d.mach, do you have a similar feature that could explain the rejection too ?
Itā€™s not ā€œanother payment methodā€ but maybe Apple would disagree hereā€¦
Ā 

PS: I sent another message to the reviewer, still waitingā€¦

Just to be clear, there is ZERO reason to have multiple build.settings files 99.9% of the time. The build.settings file has blocks that are OS specific and if youā€™re building for iOS, the Android stuff is ignored.Ā  For plugins, even if you donā€™t use ā€œsupportedPlatformsā€, we canā€™t link Android libraries to an iOS build anyway. Only in a couple of odd cases is ā€œsupportedPlatformsā€ even needed.

In other words, there is no way Apple is seeing any ā€œGoogleā€ code in our builds.Ā  Just keep one, well tabbed, well-organized build.settings and you should be good to go.

Rob

@GoG I could see where a reviewer might get tripped up on in-game currency, in particular, if you donā€™t let them buy coins.Ā  Some of Appleā€™s reviewers are new and they usually feel they have to be the most strict.Ā  But they should be able to explain that to you.

Rob

Thanks for your answerĀ @Rob.

Iā€™m still hoping the reviewer will replyā€¦ someday :expressionless:

You canā€™t buy coins indeed, but the ā€œearn to unlockā€ mechanism is as old as platformers (plus the IAP does unlock all levels).

It will be sad to confirm that Apple just donā€™t allow it (even if it shouldnā€™t be any of their concernā€¦)

Guys look here . Other developers also have this problem. Apple scans the binary for Non Apple Payment stuff. Obviously Stripe and more. But it looks like their bot doesnā€™t work

https://forums.developer.apple.com/message/232579#232579

http://ā€‹https://forum.unity.com/threads/standard-events-may-protentially-cause-rejection-from-apple-app-store.503721/

@festival

Thanks for the additional info.

If it is an issue with Apple bot, this is really bad as there is not much we can doā€¦

Also, I finally received an answer from the review team (same as @d.mach):

  • 3.Ā 1.1 Business: Payments - In-App Purchase

Hello,

Thank you for your reply. Our team has confirmed this app contains non Apple payment methods.

To continue review, it would be appropriate to remove all non Apple payment methods, then resubmit a new binary for review.

Note: Continuing to hide functionality within your app or other dishonest acts may result in the removal of your apps from the App Store and termination of your Apple Developer Program membership and all associated memberships.Ā 

Thank you,

App Store Review

As you can see, this is not helpful at all.

I asked for details and they just confirmed itā€¦

No comment.

@GoG I go the same message like you.

Will sent them a email where I will tell them which 3rd party SDK the binary had and made a Demo Video of the In-App Purchase mechanism in the app.

When you talk with App Review you need to give them all information You have. They donā€™t say which code breaks.Ā 

My concern is even when I remove ALL 3rd party Sdks the review might break. (Note: Itā€™s not a Corona app)

Their Warning to remove all apps in their message scares me off a little bit.

@festival

It is scary indeed.

And I canā€™t just remove my 3rd parties SDK without breaking essential features either.

On forums, some people say it is because the Apple bot pick up keywords such as ā€œpaymentā€

in the app code that donā€™t belong to Apple IAP framework (even if it is not another payment method).

I think itā€™s weird as previous versions of my app got validated (I didnā€™t change my 3rd parties since).

I was thinking more of a rejection from a human reviewer in this case (could explain the sudden change).

Please keep us updated if you manage to get your app approved.

Iā€™ll try to get more info from the review team on my side and post it here.

Note: I sent them a screenshot of my single IAP menu/button with my reply

but they didnā€™t seem to have taken it into account, btwā€¦

Someone at the Apple forum posted , he removed Rewarded Ads in his game, and got approved.Ā 

Hope they donā€™t mean ā€œRewarded Adsā€ is ā€œNon Apple Paymentā€ Ā since every Ad Network has that it in their SDKsĀ 

We also got rejected for this exact same reason last week. We asked for clarification from the reviewer and got the same reply as others in this thread: just stating that we are using a non-Apple payment method. This is puzzling since we do not have any third party non-Apple payment methods implemented. We do have some third party ad networks as well as rewarded ads implemented but these have never been a problem before in the last 3 years that our app has been liveā€¦

Ā 

We are currently trying to decide what to do next. Please keep us updated if you manage to get any clarification for what could be causing this issue and if you find a way to get your app approved.

Our application has also been rejected, and the reason is 3.1.1. One of my applications was completely without third-party payment, but was also 3.1.1. Now Iā€™ve considered whether the engine is a problem. Hopefully the official will come out and discuss it together.

People who have the issue used Ā Cocos2d, Cocos2d-x, Unity3d and now Corona. Ā So itā€™s across frameworks.Ā 

A list what it may be can be (summarize across Forums):

  1. Billing SDKā€™s like Stripe

  2. 3rd party SDKs ad networks, analyticsĀ 

  3. To much ā€œPurchaseā€,ā€œPaymentā€ symbols Ā in code not related to StoreKit API