Guideline 3.1.1 - Business - Payments - In-App Purchase - in-app-purchase

We have an app that was rejected due to Guideline 3.1.1 from Apple.
The app is a free alumni app for a school. Once users install the build, the app requires entering a password to access the contents of the app.
We have the password requirement as a way to verify only alumni users to access the app.
This is not an in-purchase app as we are not selling contents of the app.
Can anyone suggest a solution so that our app doesn't get rejected?

Replace single password with login-password pair, where only correct pair will open access to data. App should have possibility for register new account, but users registered this way could get just common information.

Related

How to offer a paid update to existing users in an iOS app?

I have an iOS app, where users can unlock full functionality with an in-app purchase (IAP). I plan to release a major paid update to this app and want to offer a discount for existing users.
Since my app relies on iCloud for user authentication, I wonder how to approach this. If I implement a second IAP solely for existing users, how can the App Store reviewer validate it? As far as I know, the reviewer always uses a fresh account and will therefore only see the IAP for new users.
I see the same problem if I release the update as a separate app. I can set a value in the app group from the old app to decide if the user is eligible for the discount. But the App Store reviewer won't have my old app installed and is, therefore, unable to see and validate the discounted IAP.

Apple Test-Flight test in a payment application

I am developing a payment application for apple users, where users will have an account and will be able to recharge using apple pay.
Its fine while my application is in production. Below Figure 8-1 Production.
But while my application is in testflight of apple. A listed users(allowed by me) can download/update his/her testflight application from store, Also can recharge his account balance using sandbox of apple pay.
According to guideline of Apple store.
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/AppReview.html#//apple_ref/doc/uid/TP40008267-CH10-SW1
As the Figure 8-1(App review) of the above link though the users pay from his/her sandbox apple pay account user will receive money in his production account!!!
My question is
What is the better way to handle those transactions of apple sandbox transactions?
and
How typical payment applications handle those types of situations?
You have to understand the difference between Testflight users and sandbox users for testing in-app purchases.
You are sending your test users to test the app via Testflight and you invite them with their real email address.
They can never do a sandbox purchase with their real (production) account that they currently use in the App Store for example.
Here is what you have to do:
Go to iTunes Connect - https://itunesconnect.apple.com
Go to Users and Roles
In the top right select Sandbox Testers
Add a test user (first & last name, email address (not the email that someone uses for the App Store - I like to use a fake email like test#testApp.com or whatever)
Now you can share this email address with your tester(s), then they have to go to App Store or Settings - iTunes & App Store and log out of their account and log in with your sandbox account (they will be switched to the App Store that you specified for the sand box user so you can see how it would work for someone in USA vs. someone in Italy or China).
As you can see in the image below all Sandbox payments will have [Environment: Sandbox] written on them. And no money will be exchanged since you are only testing to see if your in-app purchases or subscriptions work...hope it helps
I think Apple has given recommended approach in your mentioned article.
When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code “Sandbox receipt used in production”, validate against the test environment instead.

5. 1.1 Legal: Privacy - Data Collection and Storage- InAppPurchase

My app is a social networking app and it cannot be functional without a user account. I gave the user the options to login with Facebook or Custom SignUp, and my app contains InAppPurchase. Apple rejected the app and here is what they said:
5. 1.1 Legal: Privacy - Data Collection and Storage
We noticed that your app requires users to register with personal information to purchase non account-based in-app purchase products,
which does not comply with the App Store Review Guidelines.
Apps cannot require user registration prior to allowing access to app
content and features that are not associated specifically to the
user.
To resolve this issue, please make it clear to the user that
registering will enable them to access the content from any of their
iOS devices and provide them a way to register at any time, if they
wish to later extend access to additional iOS devices.
Please note that although guideline 3.1.2 of the App Store Review
Guidelines requires an app to make subscription content available to
all the iOS devices owned by a single user, it is not appropriate to
force user registration to meet this requirement; such user
registration must be made optional.
Please help me with the issue,
Thanks in advance.

Merge paid app and free app with in app purchase

I have 2 application on appstore
Free app with in app purchase.
Paid app.
Now, I want to keep only one app on appstore from above options 1.Free app with in app purchase and remove the paid app. But here I want to give the app with full functionality to those user who used the paid app (Purchased the paid app).
Here my question is how can I merge these 2 app into single app which will be free and contains in app purchase by keeping the paid app user as it is ?
If anyone have any idea regarding this then please share.
Thanks in advance.
I solved my problem by using the icloud. First I provided the update to both the application by doing following changes.
I used "key value store" icloud option and stored some setting on icloud just need to make sure here "iCloud Key-Value Store" value in .entitlements file (which was automatically created by XCode) in both the application is same for both the application. The setting stored here is accessible to both application and depending on the setting I identified the user and gave access to specific functionality.
Under iOS7, you can use Receipt Validation. Receipt Validation offers you to see information about purchasing the app and in app purchases. If it returns date before you made the app free, that means that the user paid for the app.
This will work only under iOS7.
See Receipt Validation Programming Guide
I too am facing this issue with a couple of my apps. I'm still looking for a good solution, but I came up a less-than-ideal solution in the meantime. You can issue an update to your paid app that will connect to a database (on your web server) and insert a row with information about the purchase (AppleID, maybe some kind of digital receipt). Then in the free version with IAPs, the same database connection can be used to see if the owner of the free app already purchased the other app. Based off of that, you can unlock the IAPs. The only problem is that this is dependent on all previous customers updating to the latest version.
As mentioned, Receipt Validation would probably be more efficient, however this isn't backwards compatible. Good luck!
I'm assuming you're looking to merge the purchase history on Apple's servers; you can't merge the purchase data for two bundle IDs, you'll have to devise some way of having users persist their data on a server that you control. Update your app with a login and tie that login with the purchases as user has made.
The workflow would be something like this:
1) User logs in on paid app
2) User restores purchase history
3) Paid app saves restored purchase history to your server
4) User logs in on free app
5) Free app downloads all purchase data for the logged in user

Getting user details who downloaded my ios app from apple app store

There is requirement in my iOS application to display the list of users who are using my app. can i get this details from apple app store. if it is possible then how can i get user details (mail id, username etc) who have downloaded my app from app store.
Any help would be appreciated.
Before fight for search anything, read this point in the Apple Review Guideline.
12.1 Applications that scrape any information from Apple sites (for example from apple.com, iTunes Store, App Store, iTunes Connect, Apple Developer Programs, etc) or create rankings using content from Apple sites and services will be rejected
2.25 Apps that display Apps other than your own for purchase or promotion in a manner similar to or confusing with the App Store will be rejected
This is not possible using iTunes Connect exposed data and is against AppStore policy.
If you wish to track your users, implement an authentication API in your app, such as Facebook, Twitter, Google or your own, and require users to login before they can use the app.

Resources