Programmatically identify if an app is paid or free - ios

I would like to identify whether an app is paid or free; programmatically, at runtime.
To brief on the context I'm working on, I'm developing an SDK which can be used by various third-party apps. I would like to identify if the app that is using my SDK is paid or free.
Any suggestions to find this?

You should make them configure your SDK writing their app id somewhere, and then your SDK have to check the app store webservices like this
https://itunes.apple.com/lookup?id=theAppID
There you can check the price

One thing you can do is this
https://itunes.apple.com/lookup?id=YOUR_APP_ID
and then fetch price & currency values from the returned JSON

There is a way tick into my mind,
Add a logic to get application name which using your SDKalso add some logic to send that name to you via API or any other way you preferred.
Once you get a new name in your server database, you can, open AppStore in iTunes, and search for the application there, and yes you'll get to know whether they are paid or free!
I know its tough if your SDKwill be going to fly with many apps, but not hard.
An alternate way, if there's some way that you get to know whether app is paid or free, then, you can do the same thing, send app name, and its price details.

Related

Xamarin IOS identifying device

I'm writing an application which will be used in an enterprise, no outsiders.
This application should fetch data from API response and display it.
Each user has his own device, Ipad and should see only the data he is the owner of.
Problem i'm facing is identifying the device/user, so that API responds with only the information the user is supposed to see.
brief example of how it should work:
App is opened -> get unique id -> attach ID to API call -> receive appropiate response -> display data
As i imagine this ID should be static and not made upon installation of the app or generated.
I've tried getting UDID, Serial, MAC,- no luck, they're deprecated. Only managed to get .IdentifierForVendor, which is unique not in the way that i need.
So here is my question, are there any other options left?
Like fetching appleID name,email or should i make unique deployments for everyone separately?
Or a Log-in screen?
You could create a GUID for every App instance. However, apart from that you will have a hard time doing what you want.
These ways of identifying a device have been deprecated to ensure Advertisers and other malicious Apps cannot fingerprint a device easily.
If you don't want too much hassle authenticating everyone, you could apply a simpler scheme such as using a pin code, QR code, NFC tag or whatever you prefer.
However, if someone were to steal one of these enterprise devices and it would contain any secret information I would rather rely on something more secure as username and password, or even better something multi-factor.
Unique id's will have to be set by deploying the app from MDM. For example:
https://docs.jamf.com/9.9/casper-suite/administrator-guide/In-House_Apps.html
How should the application accept those variables, i dont know. Maybe it modifies .plist when deploying.
Solution i did was enforcing device name from MDM, so that users are unable to change it - and using that as the unique identifier.

Other iOS application version numbers

I have been looking around and I think the answer is 'not possible', however, I need a way for my app to check and display the version numbers of other apps on the same device. I know the names of the other apps (my apps) and I don't need to do anything to them, I just need to display the version number. This needs to be done without jailbreaking
You can only share data between apps of the same developer account , so if the other apps are yours also , you can create an app group between them then easily read the version number from the suite defaults , or you can make server-side and read them with an api request

Restrict features of iPhone app work for different app stores

I have an app that is on appStore.However this app gets some of the data from server side from an xml
My app is on different apple stores. However I want to restrict some features to only specific app stores. How can I make the application to work for different app stores , lets say make the app read different xml for different app stores or something like that? Is that possible? Or maybe Any place inside app where my app can read the store Type e.g find out if its USA Store or Japanese store or Etc.
An easy way of doing this would be to have a input parameter in your API call which the application can request which country it's from, and then deliver your refined results based on that. Then, launch multiple apps in iTunes connect where each one specifies which country it is in the API request, and only allow it to be downloaded from that country.
For example, if you had two applications:
MY APP (UK) - API call: http://example.org/api/uk/request.xml
MY APP (USA) - API call: http://example.org/api/usa/request.xml
Note: The country you set in iTunes connect is the app store registered to the users account and not based on what country they are actually in!
Alternatively, you could use a online service to determine the location based on their IP. I haven't done this but a quick search finds:
http://www.makebetterthings.com/iphone/how-to-find-ip-address-of-iphone/
http://www.geobytes.com/iplocator.htm?getlocation
i think in you developer account in the app setting you can choose to which stores to upload, or do you mean like having different content for some stores?
Actually you can do it in two ways:
1- build a different binary for each country
or
2 - find an API that let's you know what is the reference store for an user
About this second option, a quick search in the Apple documentation didn't return me a specific API to do this.
Sure, basing on the Locale is not good (what if the user changes the language settings?)
The only way I found is to use SKProduct class. It has a priceLocale property that returns an NSLocale instance. So if you do:
mySKProduct.priceLocale.localeIdentifier
you'll have a NSString with the locale associated to the reference AppStore. (in my tests: it_IT#currency=EUR ).
I tried it in a project with in app purchase enabled, I think that you must setup a real SKProduct to make it work properly
Regards
Fabio

Is there a way to track my app's search ranking on Apple App Store?

I want to programmatically track my app's search ranking on Apple's app store. Is there any API or website to do this, outside of the 'App Store' app on my iPhone?
the following websites allow searching the iOS app store.
https://theappstore.org
http://fnd.io
I'm not sure how the exact ranking is reflected, but Apple now provides an JSON API call that you can make.
https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/
This includes the ability to add in a callback parameter so you can even incorporate it into a web app without having to parse the results on your server.
The end API call would looks something like this:
http://itunes.apple.com/search?term=props&entity=software&country=US&callback=lkasdfj
In case users are still looking for this. Apple finally made it possible to just use the apple.com website:
https://www.apple.com/ios/app-store/ Use the magnifying glass in the top right to search the apps.
Once you find the app you want, there is a unique URL that you could use to grab information for tracking or other purposes as well.
You can't do anything other than look at the app information at this time (no way to initiate a remote install to your phone or leave a review, that has to be done on the device)
You can use the google advance search option like
site:itunes.apple.com/us/ "requires iOS 9 or later"
and then scrape the response.
You can use data.ai formerly App Annie. The free version will give you daily and overall search ranking for your app, and will help you immensely in ASO (App store optimization)

How to Update an Application After Users Pay For Upgrade

I need to update my application after the user pays for an update. I want to alter the current application instead of downloading a new version. After the user pays, I will enable certain functions of the app.
How would I implement this?
You can't update the code or app bundle in any way. You can download resources or modify configuration files, however. So all features need to exist, but may be disabled. For something like a game you could download some more levels upon purchase.
Apple will not allow an app that has visible but unusable features. You can't show a grayed out feature and say, "pay us to get this feature." Neither will they let you significantly alter an app without changing its name. Instead they force you to issue a lite version with the option to upgrade to a full and/or pro versions. They do this both to protect the user and to protect their revenues from the app store.
A really good way to determine if Apple will let you do something is to ask, "Does Apple stand to lose money if I do this?" If the answer is yes, then chances are very good your idea won't fly.
Also, remember that the app store has a rule that once a user pays for an app, they automatically receive all future versions of the app free of charge. You can't force users to pay for upgrades the way you can on conventional platforms.
Having said that, since you can't run another process to upgrade your app on the iPhone, I think the only way to upgrade an existing app without replacing it would be to use some kind of modular plug-in architecture in which you download plug-ins that add more features. Objective-C makes it ridiculously easy to implement plug-ings.
You can't update on the go your application.
You need to put some kind of boolean switch value in a config file. (or with a server handshake)

Resources