I want ask my users to rate my Unity iOS app using the following code
Device.RequestStoreReview()
But this function returns true when the library is present and false otherwise. I want to know whether the user
Allready rated
Clicked "cancel" or clicked "not now"
So that I don't have to ask that to the user every single session
You can make a custom UI with buttons to check if the user wants to review the app or not. If the user decides to give the review you can open the app store with Application.OpenURL. You can then save user action (reviewed, ask later, don't ask again) as a flag in PlayerPrefs. Use this flag in your app to decide when and how often ask the user for a review.
As far as I know there is no way to check if the user left the review or not but if they decide to go to app store, most will leave the review and even if they don't the app just won't ask them again. It is good enough for me.
This approach is also platform independent (as long as you can use Application.OpenURL you can forward your user to any app store/website for a review).
Related
I have implimented SKStoreReviewController in My app. I just want to know how the functionality works. I need to satisfy below requirements.
I need to disply popup in all the 3 cases
For first 10 successful logins
After every 90 days
I don't want to disply rating popup never if he provide the rating.
How do I know if a user gave the rating and also I need to send
response to server if user gave the rating.
SKStoreReviewController submit button is active after your app is live in appStore. The submit button is automatically disable when you're running in debug mode. It's only active when you're launching your app in appStore. That is not mistake from apple or Xcode.
Thank you.
Apple provides some suggested best practices and sample code for requesting reviews.
In answer to your requirements:
This is definitely not best practice; after 10 successful logins might be a reasonable time to ask for a review, but asking each time the user logs in will probably just be annoying.
Again, asking after 90 days is probably a reasonable interval.
By design there is no indication to your app as to whether the review request was shown, nor whether a review was left.
You can link directly to the App Store page where the user can provide a review, however you still have no indication of whether the user actually left a review or simply cancelled out of the web page.
The sample code I linked to shows how to track whether you have requested a review for the current version of your app. You cannot know whether the user has actually reviewed the current version.
I am using the SKStoreKitReviewController in 10.3 and above to request a rating of the app. The alert is displayed. However, I need to implement a logic, wherein, if the user has already rated the app for one major release then I should not ask the user again for rating. Hence, is there a way to know that the user has successfully submitted the rating? Also, I would want to know if the user clicked on "Not now", so that I can prompt them again for rating after a few days. Is there a way to know this?
According to this Apple Developer page, you cannot prompt a user more than three times in a year.
Give users an easy way to provide feedback on the App Store without leaving your app using the SKStoreReviewController API. You can prompt for ratings up to three times in a 365-day period.
At first SKStoreReviewController looks great: An easy and standardized way to ask users for a review. However SKStoreReviewController only allows the user to rate the app by giving it 1 to 5 stars. But am I supposed to engage the user to leave a written review in the store? Is this possible using SKStoreReviewController as well?
Or do I have to do this manually, e.g. by prompting something like "Thanks for rating the App, would you like to write a review as well"? I doubt that many users would be happy to perform another action after they just rated the app...
Wouldn't prompting for a written review would conflict with Apples guidelines not to prompt the user without using SKStoreReviewController?
Users cannot add a review though SKStoreReviewController.
It is also not possible for you to know if your requestReview() call actually resulted in a rate alert being presented. If the user has already rated the app recently, requestReview() will silently fail. Because of this, it is not advised to perform UI changes relying on the existence of an SKStoreReviewController.
I believe the suggested method for letting users review your app is to add a dedicated "Review App" button that deep links to your app in the App Store. This should be prompted by the user, and not the product of an alert.
To automatically open a page on which users can write a review in the App Store, append the query parameter action=write-review to your product URL.
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"?
I am aware apple won't support exiting an application programmatically, But I want to exit my application if the user not agreed to the license agreement? Is it possible to restrict the application loading if declined? or What can I do in this case?
Do not crash or force close or find ways to close your application. If user's doesn't accept the agreement then they might not be interested in using your application eventually they will delete it. BUT, do as the protocols say, Display an agreement alert (if you already have an EULA) then point towards the same and ask user that they will have to accept the agreement in order to use the application.
Other ways could be, give a preview of some of the screens (for those who doesn't accept the EULA), if they like your screens then ask for agreement acceptance.
Hope it helps.
I would suggest you just keep re-showing the license agreement. If they pick "No", have a popup saying "You must accept the agreement to use this application", and when they tap "OK" re-direct them to the agreement confirmation again.
You can show a separate view apologizing that without the user giving consent, they will not be able to use your app. That's another opportunity to have them change their mind, by the way.
In one of my app what i did was i have shown the agreement to the user and have asked him to accept or decline it.
If the user declines the agreement then i have shown a pop up informing the user that he cannot proceed further in the app if he declines the agreement and i have kept him on the agreement screen only.
Manually if you exit the application then your app will be rejected by apple because apple does not want an app to function in that manner.
Hope this helps...
I suppose NSAssert(NO, #"The user failed to accept the EULA"); would work, perhaps within a delegate callback after presenting an alert view indicating that the application will now exit due to their declining to accept the terms. Then you could easily track the assertion failure in crash reports to determine how many people were rejecting the EULA.
I couldn't say if this will make it past app store review though.
Apple does not recommend using exit(0), but I believe it should be OK in your case, since the app should not work if the user did not accept the license agreement
But using it to exit a regular app operation is discouraged.
[[UIApplication sharedApplication]performSelector:#selector(suspend)];
But exiting app like this is not a good practice.
You can display a notice to the user, and then launch them to your website or facebook page. This will provide a break in flow as opposed to a dialog that will just appear and disappear until the user feels coerced into clicking "I Agree".
You can also set UIApplicationExitsOnSuspend to YES in your plist which will terminate the app one it goes into the background. Then you will get a full relaunch when the user comes back into the app from your website. Information on how to do this is here: UIApplicationExitsOnSuspend anything else I'm missing?