Apple iPhone app update notification for specific users - ios

As far as I understand it, every time I release an update to my iPhone app, Apple somehow notifies all users of my app update.
Is there a way to selectively target certain users, as dictated by my server for example, to receive update notifications? So only users with the property 'X' would get a notification when a new version of the app was available.

Apple doesn't notify anyone about your app update other than through the App Store app. There is nothing you can do to prevent this. All users will be able to access your update.
However, if you wanted, you could add a feature in your app that check your server to see if there is an update, and for some desired users you could show an alert letting the user know there is an update.

No, there is no such way. You can't manipulate the behavior of the App Store app.

Related

Apple rejected app because I am forcing users to update their app version

I have developed a game, in order for the game to work all users need to be on the same version of the game.
Apple have complained about this and said:
Your app includes an update button or alerts the user to update the app. To avoid user confusion, app version updates must utilize the iOS built-in update mechanism.
The problem with relying on this is that it makes updating purely optional, and I am worried that if I remove this a lot of users will end up complaining that the app doesn't work and leave bad reviews.
I have seen many games where they forcefully update.
Is there a work around for this?
You can force a user to have a certain minimum version. I do it in my apps, and many other apps do it, including Clash of Clans.
Just remove the update button. You should redirect them to your app in the app store when you alert them that there is an update.
For example, your app makes a call to your server, which includes the current version. Your server responds with a message that the user must update. Your app shows the message, and when they dismiss the alert, the app redirects them to your app in the app store.
Maybe these get approved because Apple never gets to see it work like that, but certainly, they must know that Clash of Clans does it.

What's the best way to manage SKProductsRequests in iOS?

I'm working on an app that offers in-app purchases of non-consumable items.
The non-consumables are built into the app, as opposed to being downloaded from a server, so actually we're just granting access to the content.
Our app:
shows a Netflix style library of content - some is free and some is purchasable.
must work without an internet connection (although one is required for purchases, obvs.)
should show the purchasable content within the library, even when there is no Internet connection
Questions:
When is the best time to call start on the SKProductsRequest to fetch the product into etc. from iTunes Connect? In application:didFinishLaunchingWithOptions:? Or in my controller when it's loaded?
We want to show the product price on screen, but also avoid a situation where the product prices have changed, and the User's app has not updated the price on screen.
How frequently should I update the product info? Whenever the screen loads? Whenever it appears? When the app is started?
A good solution would be to implement Push Notifications and whenever you change the prices, broadcast a push notification to the app, Which would fetch new prices!
Update:
If internet is not available at that time, then you can invalidate current prices so that when app is launched again it updates the prices! You can store a BOOL in NSUserDefaults which tells if the prices are up to date or not.
I came up with my own solution to this problem using NSNotificationCenter.
Basically, my process is this:
When the app starts, tell my custom ProductList class to update the list of products.
When the app's internet connection state changes (to has connection), tell the ProductList class to update the list of products.
The ProductList method update_all will only perform the iTunesConnect request if:
The array of SKProducts I'm storing is empty (we don't already have the product info)
OR The list of products hasn't been updated in a day or longer (the info may be stale)
Since I wanted to handle a situation where a user started the device without internet connection, and loaded the purchasable content before connecting, I set up an observer.
Once the Products have been retrieved from iTunes connect, I send out an NSNotification to any views that may be observing, so they can update the prices etc.
Hope that makes sense and helps somebody?
If you want to show prices for your In App Purchase dynamically then I think you should not call the methods in application didFinishLaunchingWithOptions.
As it is going to get called every time only when your app launches. If your app is running and you change the price tier of the app at that time then the user will not be able to see that change at that time. User will have to launch the app again.
So you should call it from your viewcontroller's ViewWillAppear method. Thats what I did for one of my projects.
So if you change the price tier from itunes whenever, then even if your app is running then whenever user comes to that view, changes will be seen.
Hope it helps you.

Is their any way to identify user updating app and user installing app for the first time in iOS?

I'm giving an update for my existing iOS App and in this update I'm locking few existing functionalities and on In App purchase these functionalities will be unlocked.
But for existing users even if they update it should not lock the functionalities only for new users it has to happen. How can I handle this?
You can do what is called "Receipt Validation." There is a programming guide here
Basically, you can get the purchase data of the app, and it will include the original version that was purchased. That way, if it is below the version that you introduced the new model into then you can disable in app purchasing and just give the full functionality.

Free iOS in app purchase for some users/devices

I would like to build a mechanism to free my in-app purchases for some of my VIP users devices. My idea is I pre-save the UDID of the user devices in my backend server. When the app starts, it will call my server and get the list of udid and check if the device is in VIP list. if yes, directly show full features without any button to ask for in-app purchase.
However, UDID cannot be used anymore. What should I do in this case? I dont want to ask user to enter some codes. because it would disturb my user interface.
new updates of the question:
The purpose is that , I got a list of people that they will review my apps , but i dont want to have any pop up to ask for promo code or any specific UI for these people. So my idea is I ask them to give me their UDID (or whatever number that they can identify themselves for their phone), and I save them in my backend. When they download the app, the app call the backend and compare their identifier number/UDID, see if they are my VIP, and give them full features automatically without asking promo code and any UI specific for these user.
I would like to identify the user only. Do you guys have any solutions?
thanks
You could do something like provide a URL to the users which opens the app and gives the app some parameter(s). When the app receives these details it could show an alert to ask for a name or some other info (like an e-mail address) from the user. Then you can send the details to your server for verification and set some value in the app to enable the features. In this way the UI of the app is not changed.
I think it's not conform with the iOS/App Store TOS (to be clear).
The easy way is to use the UDID but we can't now... You can get another unique "number" for identifying the device like the Mac Address (you can get in in Objective-C, not really simple but you can).
You can add a button which asks for a promo code (maybe the same button to buy the in-app upgrade). Only those who have a promo code can get the upgrade for free.
Also, should it be "VIP users" rather than "VIP user devices"?

iOS Verify previous app purchase/install

Is there a way to verify with the apple servers when a user first installed an app?
Let's say you have a payed app and want to make it free with ads but not send ads to those who previously bought.
Since it's not an IAP i assume Store Kit is out of the question.
Later edit: My problem being the ones that buy, delete and reinstall.
Nope, you can't do that! The best way is to remove your current app from the App Store and relaunch using a different Bundle ID. People who bought it previously can keep it how it is, although they won't get any updates.
A possible workaround
Here's a workaround I just thought of. When you send out your next update, set a flag in NSUserDefaults to mark everyone who has it now as paid user. That would be for your next update only; you would remove that code right after the update. Then, when you send out your version with ads, check that flag to determine if you should display them. The only problem is that if a paid user ever re-installed the app, they would see ads from then on.

Resources