razeware / emitron-Android

Android version of emitron
Apache License 2.0
55 stars 30 forks source link

In app review #304

Closed filbabic closed 3 years ago

filbabic commented 3 years ago

This is a pretty big PR showing all the work I've done in cleaning up the app, decoupling some parts of it (e.g. styles) and implementing the In App Review feature.

The In App Review feature aims to improve our app rating, by asking users to review the app while feeling accomplished, after through finishing a course.

Hopefully, this will increase the app rating of our users and app, giving our app a nicer appearance on the Play Store.

This is connected to #304.


The main part of the logic is situated in the inappreview module, that now represents a separate module for all the In App Review logic.

The remainder is located in the collection package and is tied to the CollectionFragment and the CollectionViewModel.

The In App Review implementation works like so:

  1. Once the user finishes a course & goes back to its Collection, or opens a Collection screen, we check their eligibility for an in app review.

  2. If the user hasn't rated the app yet (internal flag), hasn't decided to "never rate" and hasn't chosen "rate later", or they chose rate later & a week has passed, we deem them eligible.

Everything else is either "already rated", "never rate" or "too soon" to ask the user again.

  1. If the user is eligible, we ask them to rate the app through a nice dialog prompt. This dialog is visible here, in both Light & Dark mode: https://drive.google.com/drive/u/1/folders/1zgfNgTOvxyEIhBmXxgwkrXG7Wrb_7bjZ

The dialog design is currently in design review waiting for feedback.

  1. The user chooses an option or goes back to cancel the dialog & we take appropriate actions.

A -> The user chooses to rate the app. We set that the user has rated the app and attempt to show the In App Review flow. B -> The user chooses to rate the app later. We set a timer for a week and if the user triggers step 1., we repeat the process. C -> The user chooses to never rate the app (Don't ask me again). We never* show the prompt again.


There are a few things to note.

  1. We cannot guarantee or read the state of the In App Review. We don't know if the Google dialog was shown or not. So if the user drops out of the review, we won't ask them again, but they might've not rated our app in the end.

  2. We cannot guarantee a positive rating (e.g 4 or 5 stars), but hopefully the users will feel good after finishing a course and give us a good rating.

  3. The in app review prompts are highly inconsistent, as any Google API... Right now, there is not a 100% chance that the dialog will show, that it showed even though we received a successful result, or that the review was published to the Play Store.

We have to hope for the best, but the business logic should be sound and hopefully we'll see some more reviews after the release.

  1. Testing of the feature is again very hard because of 3., but also because it requires internal testing & lots of tinkering to prepare the app for a "review state" from the Google side. I'll do more intense testing with multiple phones and gmail accounts, to try and mitigate this and keep it as consistent as possible.
luke-freeman commented 3 years ago

@filbabic

Putting together a design and some small improvements for that componenet in the next 24 hours!

filbabic commented 3 years ago

@luke-freeman Thanks!

Will update the design accordingly!

filbabic commented 3 years ago

Updated the design to match the spec.

@luke-freeman let me know if this is what you aimed for! :]

https://drive.google.com/drive/folders/1zgfNgTOvxyEIhBmXxgwkrXG7Wrb_7bjZ?usp=sharing

luke-freeman commented 3 years ago

@filbabic

It looks good! But...in the Android version and iOS we use the standard UI components for modals and lists.

The design you have incorporated deviates from this and that now means we have a rogue modal that doesn't match up with the others. I think it's probaby best to stick with the original design to keep things consistent even if the modals do differ from the design language

Screenshot_20201201-232400_raywenderlich

filbabic commented 3 years ago

@luke-freeman Sure, I'll revert to "standard" rounded corners for the dialog & the buttons!