Open App Store to write review from app

I found this here on Apple Developer:
https://developer.apple.com/documentation/storekit/skstorereviewcontroller/requesting_app_store_reviews

Is the process of taking a user to your product’s page on the App Store as simple as calling this URL? The XXXXX is replaced with your app’s ID.
https://apps.apple.com/app/idXXXXXXXXXX?action=write-review

Second question. In one of my older apps, I click a button, and it opens Safari to the URL specified. Though, this had to use declares, such as the below. I think this came from an example project in Xojo but possibly on the forum. Is this still the way to go, or do we now have a ShowURL as in desktop?
// NSString* launchUrl = @“http://www.xojo.com/”;
// [[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];

Declare Function NSClassFromString Lib "Foundation" (name As CFStringRef) As Ptr
Declare Function sharedApplication Lib "UIKit" Selector "sharedApplication" (obj As Ptr) As Ptr
Dim sharedApp As Ptr = sharedApplication(NSClassFromString("UIApplication"))

// https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/#//apple_ref/occ/clm/NSURL/URLWithString:
Declare Function URLWithString Lib "Foundation" Selector "URLWithString:" ( id As Ptr, URLString As CFStringRef ) As Ptr
Dim nsURL As Ptr = URLWithString(NSClassFromString("NSURL"), url)

// https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/instm/UIApplication/openURL:
Declare Function openURL Lib "UIKit" Selector "openURL:" (id As Ptr, nsurl As Ptr) As Boolean
Return openURL(sharedApp, nsURL)
2 Likes

Correct and correct, you still need a declare to open an URL

Perfect! Thank you for confirming!

Just a little side note:
I watched a video a while ago, not sure if it was a Xojo video. One thing is rather important: timing.
Make sure you ask the user to leave a review after the user completed a task. Not randomly before the user wants to do something with your app. That would result in a lower rating. After the user completed a task, the user is often a bit more satisfied, thus higher ratings.

But, I’m sure you already knew that :wink:

That’s a great tip, and thanks for sharing! Yes, I’ve heard that too and will be certainly considering

You can also use the irate class available on my github

With the new system, you can ask up to 3 times per year per user for a rating.
As irate class logs when the rating box is displayed, I send users to the specific app store review page if the rating box was displayed at least once.

1 Like

I thought I had seen that before. I just downloaded it and have been playing around with. Seems very straightforward, and a perfect fit!

Question. I was planning on asking for a rating after a certain task had been completed. It looks like in the App.Open is where you set up a lot of info about the rating. If I am understanding this part correctly, this will ask the user to rate the first time after 5 days and after the 20th event (not sure what counts as an event), and then he will be asked again to rate after 50 days. Is that accurate?

iRate = jly_iRate.sharedInstance iRate.init iRate.previewMode = False //Set to True to preview the message iRate.daysUntilPrompt = 5.0 //Don't prompt on first day iRate.eventsUntilPrompt = 20 iRate.appStoreID = 1208312901 //Very important to set this value XXXXX iRate.promptAtLaunch = False iRate.remindPeriod = 50.0 //User will be reminded every 50 days

So if I wanted to not check after 5 days/20 actions, but instead check after so many attempts of a task, do I need to remove or change any this in App.Open other than the AppID (I assume this is where the AppID is set and then checked in the methods)?

For example, my “task” is completing a game. When the user finishes 10 games, the rating will show. This could happen on day one, and I might change the number to a higher one to prevent that. If I leave this as completes 10 games, which the user sees on day 3, will he then see the rating box again after day 5 and 20 actions? Or will the system see that it was already seen on day 3 after 10 games and then not ask again until the next threshold (500 games completed per se)?

Side question for forum posting. How do you make the code in a post look like code? I tried adding, selecting, and clicking the </> button. Sometimes it works, and sometimes not. I came back in and edited this post to make the code stand out using the [ code ] and [ / code ]. But how do you make it all pretty like it used to be?

if I wanted to not check after 5 days/20 actions, but instead check after so many attempts of a task, do I need to remove or change any this in App.Open

Was just about to ask this same question, but I found

incrementEventCount()

which I think is the answer