{"id":13989090,"url":"https://github.com/Vorlonsoft/AndroidRate","last_synced_at":"2025-07-22T10:31:00.382Z","repository":{"id":46264621,"uuid":"109681407","full_name":"Vorlonsoft/AndroidRate","owner":"Vorlonsoft","description":"AndroidRate is a library to help you promote your Android app by prompting users to rate the app after using it for a few days. ","archived":false,"fork":false,"pushed_at":"2023-02-14T15:04:13.000Z","size":1669,"stargazers_count":133,"open_issues_count":13,"forks_count":34,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-23T07:50:40.214Z","etag":null,"topics":["android","android-library","android-ui","appstore","dialog","feedback","feedback-form","java","java-library","kotlin","kotlin-android","kotlin-library","library","rate","rating","rating-dialog","rating-stars","ratings","user-rating","var-library"],"latest_commit_sha":null,"homepage":"https://vorlonsoft.github.io/AndroidRate/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Vorlonsoft.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-11-06T10:34:40.000Z","updated_at":"2025-04-01T23:24:11.000Z","dependencies_parsed_at":"2024-01-15T16:45:08.330Z","dependency_job_id":null,"html_url":"https://github.com/Vorlonsoft/AndroidRate","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/Vorlonsoft/AndroidRate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vorlonsoft%2FAndroidRate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vorlonsoft%2FAndroidRate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vorlonsoft%2FAndroidRate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vorlonsoft%2FAndroidRate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vorlonsoft","download_url":"https://codeload.github.com/Vorlonsoft/AndroidRate/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vorlonsoft%2FAndroidRate/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266474987,"owners_count":23934849,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-library","android-ui","appstore","dialog","feedback","feedback-form","java","java-library","kotlin","kotlin-android","kotlin-library","library","rate","rating","rating-dialog","rating-stars","ratings","user-rating","var-library"],"created_at":"2024-08-09T13:01:31.099Z","updated_at":"2025-07-22T10:30:59.888Z","avatar_url":"https://github.com/Vorlonsoft.png","language":"Java","readme":"[![AndroidRate Logo](https://raw.githubusercontent.com/Vorlonsoft/AndroidRate/master/logo/152px.png)](#)\n\n# AndroidRate [![Build Status](https://raw.githubusercontent.com/Vorlonsoft/AndroidRate/master/badges/build-status_90x20.png)](#) [![Latest Version](https://raw.githubusercontent.com/Vorlonsoft/AndroidRate/master/badges/latest-version_104x20.png)](https://github.com/Vorlonsoft/AndroidRate/releases) [![Supported APIs](https://raw.githubusercontent.com/Vorlonsoft/AndroidRate/master/badges/api_54x20.png)](#) [![Android Arsenal](https://raw.githubusercontent.com/Vorlonsoft/AndroidRate/master/badges/android-arsenal_174x20.png)](#) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/c1691c3e199c45e9834f880b70823d4a)](https://www.codacy.com/app/Vorlonsoft/AndroidRate?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=Vorlonsoft/AndroidRate\u0026amp;utm_campaign=Badge_Grade)\n\nAndroidRate is a library to help you promote your Android app by\nprompting users to rate the app after using it for a few days. Project\nbased on [Android-Rate](https://github.com/hotchemi/Android-Rate) by\nShintaro Katafuchi.\n\n[![AndroidRate animated screenshots](https://raw.githubusercontent.com/Vorlonsoft/AndroidRate/master/screenshots/screenshots_360x640.gif)](#)\n\n## Contents\n\n* [Install](#install)\n* [Usage](#usage)\n  * [Configuration](#configuration)\n  * [OnClickButtonListener interface](#onclickbuttonlistener-interface)\n  * [Custom event requirements](#optional-custom-event-requirements)\n  * [Clear show dialog flag](#clear-show-dialog-flag)\n  * [Forced Rate Dialog](#forced-display-of-the-rate-dialog)\n  * [Forced dismiss of the Dialog](#forced-dismiss-of-the-rate-dialog)\n  * [Custom view](#set-custom-view)\n  * [Custom theme](#specific-theme)\n  * [Custom dialog labels](#custom-dialog-labels)\n  * [Appstores](#appstores)\n  * [Сustom intents](#custom-intents)\n  * [Check for Google Play](#check-for-google-play)\n* [Sample](#sample)\n* [Javadoc Documentation](#javadoc-documentation)\n* [Supported Languages](#supported-languages)\n* [Already in Use](#already-in-use)\n* [Contribute](#contribute)\n* [License](#license)\n\n## Install\n\n### Latest stable version\n\nYou can download library files from JCenter, Maven Central, JFrog\nBintray (JCenter mirror),\n**[GitHub](https://github.com/Vorlonsoft/AndroidRate) (main source)**,\nGitLab (GitHub mirror) or SourceForge (GitHub mirror).\n\n`latestVersion` is [![Latest Version](https://raw.githubusercontent.com/Vorlonsoft/AndroidRate/master/badges/latest-version_104x20.png)](https://github.com/Vorlonsoft/AndroidRate/releases)\n\nAdd the following in your app's `build.gradle` file:\n\n```groovy\ndependencies {\n    implementation \"com.vorlonsoft:androidrate:${latestVersion}\"\n}\n```\n\n### Latest snapshot version\n\nIf you don't want to wait for the next release, you can add the\nSonatype's snapshots repository to your project root `build.gradle`\nfile:\n\n```groovy\nrepositories {\n    maven { url \"https://oss.sonatype.org/content/repositories/snapshots/\" }\n}\n```\n\nThen add the following dependency to your relevant project modules\n`build.gradle` files:\n\n```groovy\ndependencies {\n    implementation \"com.vorlonsoft:androidrate:1.2.5-SNAPSHOT\"\n}\n```\n\n## Usage\n\n### Configuration\n\nAndroidRate library provides methods to configure it's behavior. Select\nthe type of configuration that best describes your needs.\n\n#### Nano configuration\n\nUses library's defaults.\n\n```java\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n  super.onCreate(savedInstanceState);\n\n  AppRate.quickStart(this); // Monitors the app launch times and shows the Rate Dialog when default conditions are met\n}\n```\n\n#### Micro configuration\n\nConfigures basic library behavior only.\n\n```java\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n  super.onCreate(savedInstanceState);\n\n  AppRate.with(this)\n      .setInstallDays((byte) 0)                  // default is 10, 0 means install day, 10 means app is launched 10 or more days later than installation\n      .setLaunchTimes((byte) 3)                  // default is 10, 3 means app is launched 3 or more times\n      .setRemindInterval((byte) 1)               // default is 1, 1 means app is launched 1 or more days after neutral button clicked\n      .setRemindLaunchesNumber((byte) 1)         // default is 0, 1 means app is launched 1 or more times after neutral button clicked\n      .monitor();                                // Monitors the app launch times\n  AppRate.showRateDialogIfMeetsConditions(this); // Shows the Rate Dialog when conditions are met\n}\n```\n\n#### Standard configuration\n\nThe choice of most corporate developers.\n\n```java\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n  super.onCreate(savedInstanceState);\n\n  AppRate.with(this)\n      .setStoreType(StoreType.GOOGLEPLAY) /* default is GOOGLEPLAY (Google Play), other options are AMAZON (Amazon Appstore), BAZAAR (Cafe Bazaar),\n                                           *         CHINESESTORES (19 chinese app stores), MI (Mi Appstore (Xiaomi Market)), SAMSUNG (Samsung Galaxy Apps),\n                                           *         SLIDEME (SlideME Marketplace), TENCENT (Tencent App Store), YANDEX (Yandex.Store),\n                                           *         setStoreType(BLACKBERRY, long) (BlackBerry World, long - your application ID),\n                                           *         setStoreType(APPLE, long) (Apple App Store, long - your application ID),\n                                           *         setStoreType(String...) (Any other store/stores, String... - an URI or array of URIs to your app) and\n                                           *         setStoreType(Intent...) (Any custom intent/intents, Intent... - an intent or array of intents) */\n      .setTimeToWait(Time.DAY, (short) 0) // default is 10 days, 0 means install millisecond, 10 means app is launched 10 or more time units later than installation\n      .setLaunchTimes((byte) 3)           // default is 10, 3 means app is launched 3 or more times\n      .setRemindTimeToWait(Time.DAY, (short) 2) // default is 1 day, 1 means app is launched 1 or more time units after neutral button clicked\n      .setRemindLaunchesNumber((byte) 1)  // default is 0, 1 means app is launched 1 or more times after neutral button clicked\n      .setSelectedAppLaunches((byte) 1)   // default is 1, 1 means each launch, 2 means every 2nd launch, 3 means every 3rd launch, etc\n      .setShowLaterButton(true)           // default is true, true means to show the Neutral button (\"Remind me later\").\n      .set365DayPeriodMaxNumberDialogLaunchTimes((short) 3) // default is unlimited, 3 means 3 or less occurrences of the display of the Rate Dialog within a 365-day period\n      .setVersionCodeCheck(true)          // default is false, true means to re-enable the Rate Dialog if a new version of app with different version code is installed\n      .setVersionNameCheck(true)          // default is false, true means to re-enable the Rate Dialog if a new version of app with different version name is installed\n      .setDebug(false)                    // default is false, true is for development only, true ensures that the Rate Dialog will be shown each time the app is launched\n      .setOnClickButtonListener(which -\u003e Log.d(this.getLocalClassName(), Byte.toString(which))) // Java 8+, change for Java 7-\n      .monitor();                         // Monitors the app launch times\n\n  if (AppRate.with(this).getStoreType() == StoreType.GOOGLEPLAY) { // Checks that current app store type from library options is StoreType.GOOGLEPLAY\n      if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) != ConnectionResult.SERVICE_MISSING) { // Checks that Google Play is available\n          AppRate.showRateDialogIfMeetsConditions(this); // Shows the Rate Dialog when conditions are met\n      }\n  } else {\n      AppRate.showRateDialogIfMeetsConditions(this);     // Shows the Rate Dialog when conditions are met\n  }\n}\n```\n\nDefault options of the Rate Dialog are as below:\n\n1. Google Play launches when you press the positive button. Change via `AppRate#setStoreType(int)`, `AppRate#setStoreType(int, long)`, `AppRate#setStoreType(String...)` or `AppRate#setStoreType(Intent...)`.\n2. App is launched 10 or more days later than installation. Change via `AppRate#setTimeToWait(long, short)` or `AppRate#setInstallDays(byte)`.\n3. App is launched 10 or more times. Change via `AppRate#setLaunchTimes(byte)`.\n4. App is launched 1 or more days after neutral button clicked. Change via `AppRate#setRemindTimeToWait(long, short)` or `AppRate#setRemindInterval(byte)`.\n5. App is launched 0 or more times after neutral button clicked. Change via `AppRate#setRemindLaunchesNumber(byte)`.\n6. Each launch (the condition is satisfied if appLaunches % `param` == 0). Change via `AppRate#setSelectedAppLaunches(byte)`.\n7. App shows the Neutral button (\"Remind me later\"). Change via `setShowLaterButton(boolean)`.\n8. Unlimited occurrences of the display of the Rate Dialog within a 365-day period. Change via `AppRate#set365DayPeriodMaxNumberDialogLaunchTimes(short)`.\n9. Don't re-enable the Rate Dialog if a new version of app with different version code is installed. Change via `AppRate#setVersionCodeCheck(boolean)`.\n10. Don't re-enable the Rate Dialog if a new version of app with different version name is installed. Change via `AppRate#setVersionNameCheck(boolean)`.\n11. Setting `AppRate#setDebug(boolean)` to `true` ensures that the Rate Dialog will be shown each time the app is launched. **This feature is for development only!**.\n12. There is no default callback when the button of Rate Dialog is pressed. Change via `AppRate.with(this).setOnClickButtonListener(OnClickButtonListener)`.\n\n### OnClickButtonListener interface\n\nYou can implement OnClickButtonListener Interface and use\n`AppRate.with(this).setOnClickButtonListener(OnClickButtonListener)` to\nspecify the callback when the button of Rate Dialog is pressed.\n`DialogInterface.BUTTON_POSITIVE`, `DialogInterface.BUTTON_NEUTRAL` or\n`DialogInterface.BUTTON_NEGATIVE` will be passed in the argument of\n`OnClickButtonListener#onClickButton`.\n\n```java\n// Java 7- start\nAppRate.with(this).setOnClickButtonListener(new OnClickButtonListener() {\n    @Override\n    public void onClickButton(final byte which) {\n        // Do something\n    }\n})\n// Java 7- end\n// Java 8+ start\nAppRate.with(this).setOnClickButtonListener(which -\u003e {\n    // Do something\n})\n// Java 8+ end\n```\n\n### Optional custom event requirements\n\nYou can add additional optional requirements for showing dialog. Each\nrequirement can be added/referenced as a unique string. You can set a\nminimum count for each such event (for e.g. \"action_performed\" 3 times,\n\"button_clicked\" 5 times, etc.)\n\n```java\nAppRate.with(this).setMinimumEventCount(String, short);\nAppRate.with(this).incrementEventCount(String);\nAppRate.with(this).setEventCountValue(String, short);\n```\n\n### Clear show dialog flag\n\nWhen you want to show the dialog again, call\n`AppRate#clearAgreeShowDialog()`.\n\n```java\nAppRate.with(this).clearAgreeShowDialog();\n```\n\n### Forced display of the Rate Dialog\n\nUse this method directly if you want to force display of the Rate\nDialog. Call it when some button presses on. Method also useful for\ntesting purposes. Call `AppRate#showRateDialog(Activity)`.\n\n```java\nAppRate.with(this).showRateDialog(this);\n```\n\n### Forced dismiss of the Rate Dialog\n\nUse this method directly if you want to remove the Rate Dialog from the\nscreen. Call `AppRate#dismissRateDialog()`.\n\n```java\nAppRate.with(this).dismissRateDialog();\n```\n\n### Set custom view\n\nCall `AppRate#setView(View)`.\n\n```java\nLayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);\nView view = inflater.inflate(R.layout.custom_dialog, (ViewGroup) findViewById(R.id.layout_root));\nAppRate.with(this).setView(view);\n```\n\n### Specific theme\n\nYou can use a specific theme to inflate the dialog.\n\n```java\nAppRate.with(this).setThemeResId(int);\n```\n\n### Custom dialog labels\n\nIf you want to use your own dialog labels, override string xml resources\non your application.\n\n```xml\n\u003cresources\u003e\n    \u003cstring name=\"rate_dialog_title\"\u003eRate this app\u003c/string\u003e\n    \u003cstring name=\"rate_dialog_message\"\u003eIf you enjoy playing this app, would you mind taking a moment to rate it? It won\\'t take more than a minute. Thanks for your support!\u003c/string\u003e\n    \u003cstring name=\"rate_dialog_ok\"\u003eRate It Now\u003c/string\u003e\n    \u003cstring name=\"rate_dialog_cancel\"\u003eRemind Me Later\u003c/string\u003e\n    \u003cstring name=\"rate_dialog_no\"\u003eNo, Thanks\u003c/string\u003e\n\u003c/resources\u003e\n```\n\n### Appstores\n\nYou can use different app stores.\n\n#### Google Play, Amazon Appstore, Cafe Bazaar, Mi Appstore (Xiaomi Market), Samsung Galaxy Apps, SlideME Marketplace, Tencent App Store, Yandex.Store\n\n```java\nAppRate.with(this).setStoreType(StoreType.GOOGLEPLAY); // Google Play\nAppRate.with(this).setStoreType(StoreType.AMAZON);     // Amazon Appstore\nAppRate.with(this).setStoreType(StoreType.BAZAAR);     // Cafe Bazaar\nAppRate.with(this).setStoreType(StoreType.MI);         // Mi Appstore (Xiaomi Market)\nAppRate.with(this).setStoreType(StoreType.SAMSUNG);    // Samsung Galaxy Apps\nAppRate.with(this).setStoreType(StoreType.SLIDEME);    // SlideME Marketplace\nAppRate.with(this).setStoreType(StoreType.TENCENT);    // Tencent App Store\nAppRate.with(this).setStoreType(StoreType.YANDEX);     // Yandex.Store\n```\n\n#### Apple App Store\n\n```java\n/* Apple App Store, long - your Apple App Store application ID\n * e. g. 284882215 for Facebook (https://itunes.apple.com/app/id284882215) */\nAppRate.with(this).setStoreType(StoreType.APPLE, long);\n```\n\n#### BlackBerry World\n\n```java\n/* BlackBerry World, long - your BlackBerry World application ID\n * e. g. 50777 for Facebook (https://appworld.blackberry.com/webstore/content/50777) */\nAppRate.with(this).setStoreType(StoreType.BLACKBERRY, long);\n```\n\n#### Chinese app stores\n\nThe first Chinese app store found on the user device will be used, if\nfirst fails, second will be used, etc. The Library doesn't check the\navailability of your application on the app store.\n\n```java\n/* 19 chinese app stores: 腾讯应用宝, 360手机助手, 小米应用商店, 华为应用商店, 百度手机助手,\n * OPPO应用商店, 中兴应用商店, VIVO应用商店, 豌豆荚, PP手机助手, 安智应用商店, 91手机助手,\n * 应用汇, QQ手机管家, 机锋应用市场, GO市场, 宇龙Coolpad应用商店, 联想应用商店, cool市场 */\nAppRate.with(this).setStoreType(StoreType.CHINESESTORES);\n```\n\n#### Other store\n\n```java\n/* Any other store/stores,\n * String... - an RFC 2396-compliant URI or array of URIs to your app,\n * e. g. \"https://otherstore.com/app?id=com.yourapp\"\n * or \"otherstore://apps/com.yourapp\" */\nAppRate.with(this).setStoreType(String...);\n```\n\n### Custom intents\n\nYou can set custom action to the Positive button. For example, you want\nto open your custom RateActivity when the Rate button clicked.\n\n```java\n/* Any custom intent/intents, Intent... - an intent or array of intents,\n * first will be executed (startActivity(intents[0])), if first fails,\n * second will be executed (startActivity(intents[1])), etc. */\nAppRate.with(this).setStoreType(Intent...);\n```\n\n### Check for Google Play\n\nThe following code checks that Google Play is available on the user's\ndevice. We recommend to use it if current app store type from library\noptions is StoreType.GOOGLEPLAY.\n\n```java\nif (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) != ConnectionResult.SERVICE_MISSING) {\n    // ...\n}\n```\n\n## Sample\n\nClone this repo and check out the\n[sample](https://github.com/Vorlonsoft/AndroidRate/tree/master/sample)\nmodule.\n\n## Javadoc Documentation\n\nSee generated javadoc\n[AndroidRate documentation](https://vorlonsoft.github.io/AndroidRate/javadoc/).\n\n## Supported Languages\n\nAndroidRate library currently supports the following 41 languages:\n\n* Albanian\n* Arabic\n* Azerbaijani\n* Basque\n* Benqali\n* Bulgarian\n* Catalan\n* Chinese (zh-CN, zh-TW)\n* Croatian\n* Czech\n* Danish\n* Dutch\n* English\n* Finnish\n* French\n* German\n* Greek\n* Hebrew\n* Hindi\n* Hungarian\n* Indonesian\n* Italy\n* Japanese\n* Korean\n* Malay\n* Norwegian\n* Persian\n* Polish\n* Portuguese\n* Romanian\n* Russian\n* Serbian\n* Slovak\n* Slovenian\n* Spanish\n* Swedish\n* Thai\n* Turkish\n* Ukrainian\n* Vietnamese\n\n## Already in Use\n\nAndroidRate library already in use in following apps:\n\n* [I Love You Free Edition](https://play.google.com/store/apps/details?id=com.vorlonsoft.iloveyou)\n* [Rossiya.pro Mail](https://play.google.com/store/apps/details?id=com.vorlonsoft.rossiyapro)\n* ...\n\n## Contribute\n\n1. Fork it.\n2. Create your feature branch (`git checkout -b my-new-feature`).\n3. Commit your changes (`git commit -am 'Added some feature'`).\n4. Push to the branch (`git push origin my-new-feature`).\n5. Create new Pull Request.\n\n## License\n\n    The MIT License (MIT)\n\n    Copyright (c) 2017 - 2018 Vorlonsoft LLC\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in\n    all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n    THE SOFTWARE.\n","funding_links":[],"categories":["Java"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FVorlonsoft%2FAndroidRate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FVorlonsoft%2FAndroidRate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FVorlonsoft%2FAndroidRate/lists"}