-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature/in app review system #148
Feature/in app review system #148
Conversation
Thanks for the pull request, @IvanStepanok! Please note that it may take us up to several weeks or months to complete a review and merge your PR. Feel free to add as much of the following information to the ticket as you can:
All technical communication about the code itself will be done via the GitHub pull request interface. As a reminder, our process documentation is here. Please let us know once your PR is ready for our review and all tests are green. |
[header] the system bar disappears if a user used the rate us pop-up [rate_us] the user isn't able to submit a feedback in the landscape mode [email_feedback] the email template formatting must have a user/device info [email_agent] iOS agent displays bit a user cannot use it (the icon isn't clickable)
This looks great to me! It would be ideal to collect feedback directly in-app, but that requires some backend communication and is probably not in-scope for now. Two questions about the interface:
|
@rnr one feedback i have to to make a separate directory and place 3rd party libraries we are using in project to that directory. in that way, we will be able to see what external dependencies we are using, it will have better organization of of code base. what are your thoughts? |
@mumer92 do you mean something else except Pods and Swift Packages (I believe these two Sources are organised well already)? Thank you |
My understanding is |
Yes, it's based on timing here, it appears at 99.9% of the video. After chatting with @marcotuts, we thought it's a good idea to give users a choice. We can make changes if needed. |
That's not the library we're going to update in the future. |
} | ||
|
||
func requestReview() { | ||
SKStoreReviewController.requestReview() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @IvanStepanok
As I know SKStoreReviewController can be showed three times per year only
https://developer.apple.com/documentation/storekit/requesting_app_store_reviews
All other times 'Rate Us' button won't work, right?
Thank you
@volodymyr-chekyrta My main feedback is to separate out the external or third party code we are using in our code base, e.g in a separate folder called There are other instances of third party code that we are relying in our code base, e.g.
|
A new notes - can we trigger the rating once the video ends instead of at 99.99% - this way the interrupt isn't near the end of an activity but right as it ends. Similarly on the note about rating visibility, I can review the code next but ensuring this doesnt appear more than a certain number of times is important. the requirements only specified that the modal should appear at most ever 3 months, but if you chose to rate the app we should actually have a timer that is less frequent / perhaps yearly? Thoughts on this change in logic / addition to the logic @IvanStepanok ? I wasn't familiar with the 3 limit max @rnr thanks for f lagging that. |
@mumer92, |
99.99% of the time, this serves as a workaround for the YouTube player, which does not consistently report full 100% progress. |
@marcotuts, we didn't see major releases coming more than three times a year, but that's a good point you've raised with @rnr. |
That makes sense, I think it's reasonable to include the choice. In that case, the UI looks good to me! |
@volodymyr-chekyrta I guess what Umer is saying is that there should be clarity in what code we wrote and what code we are using from a third-party or external source. And for that clarity, he was suggesting to create a folder named (ExternalLibraries/3rdPartyLibraries) at root in the framework where we are using a third-party library and place the 3rd party code in that folder instead of having it in the subdirectory. For example, in the rating feature, a folder named ExternalLibraries would be created in the Core framework and |
I understand, but I'm not quite sure why we need to create a new folder and relocate these files into it for this specific feature. |
There are multiple reasons why we are suggesting moving 3rd party libraries to a central location:
|
@saeedbashir Could you please specify how we should attribute the author? |
There are two steps involved, but the first is a must:
We were using the first step. You can find details about all the external libraries that were being used in edX as local libraries here |
Added a check to ensure that the rating window is displayed no more than once every 4 months. Corrected copyright in ThirdPartyMailer
@marcotuts, upgraded logic in the last commit, so now the review popup only shows once every four months. |
} | ||
|
||
func requestReview() { | ||
SKStoreReviewController.requestReview() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
app has minimum target of iOS 15, this api was deprecated in iOS 14, how about using the updated api?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replace to @Environment(\.requestReview) var requestReview
and move logic from AppReviewViewModel to AppReviewView.
func openMailClient(_ with: ThirdPartyMailClient) { | ||
|
||
let osVersion = UIDevice.current.systemVersion | ||
let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bundle.main.infoDictionary?["CFBundleShortVersionString"]
is being used at multiple places, i think we should centralize this somewhere, what are your thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We'll need to think about this as part of the next refactoring.
}) | ||
} else { | ||
VStack(spacing: 20) { | ||
if viewModel.state == .thanksForFeedback || viewModel.state == .thanksForVote { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
how about using switch
here instead of if else?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea, done!
Conflicts: Core/Core/Data/CoreStorage.swift
push SKStoreReviewController logic to extension for iOS 15 compatibility
@IvanStepanok 🎉 Your pull request was merged! Please take a moment to answer a two question survey so we can improve your experience in the future. |
RPReplay_Final1699274174.mp4
Simulator.Screen.Recording.-.iPhone.15.Pro.-.2023-11-03.at.13.24.57.mp4