Code Monkey home page Code Monkey logo

titanium-review-dialog's Introduction

Review Dialogs in Appcelerator Titanium

Example

Summary

Use the SKStoreReviewController from iOS 10.3+ in your Ttanium application. Also use a native Android dialog for best parity.

Requirements

  • Titanium Mobile SDK 8+
  • iOS 10.3+
  • Android 4.4+

Android Usage

import Review from 'ti.reviewdialog';

if (!Review.isSupported()) { return; }

Review.requestReview({
  storeURL: `https://play.google.com/store/apps/details?id=${Ti.App.id}`
  onFeedback: event => {
    // Send feedback to your server via "event.value"
  }
});

// when review is done
Review.addEventListener("complete", function(e){
	console.log(e.success);
});

iOS Usage

There are some important notes on when to show the rating dialog (thanks to @skypanther:

  • The internal API itself will decide when, or if, to show the prompt
  • You should not show it more than once for a given version of your app
  • You should not show the dialog in response to user actions (like after a user clicks a button)
  • You should not show it on first app launch (even after an update) but should wait until the user has used your app for a "meaningful" amount.

The following (ES6+ based) example shows how to use it in a real world example. It relies on the semver module / http://gitt.io/component/semver to compare app versions. Apple's own example uses a simple launch count to determine "meaningful" amount of use, which is also used in this example. You should use something appropriate for your app (amount of time, completion of an action N times, etc.):

import semver from 'semver';
import Review from 'ti.reviewdialog';

// first, check that the user has used your app for a "meaningful" amount
// here, a simple count of some action
let countOfSomeUserAction = Ti.App.Properties.getInt('countOfSomeUserAction', 0);
countOfSomeUserAction += 1;

Ti.App.Properties.setInt('countOfSomeUserAction', countOfSomeUserAction);

if (countOfSomeUserAction >= 4) {
  // if they've done whatever action 4 or more times, check the app version
  const lastVersionPromptedForReview = Ti.App.Properties.getString('lastVersionPromptedForReview', '1.0.0');
  let appVersion = Ti.App.version;
  const appVersionAsArray = appVersion.split('.');
  if (appVersionAsArray.length > 3) {
    // the semver library supports max 3-part version numbers (per semver rules)
    appVersion = appVersionAsArray[0] + '.' + appVersionAsArray[1] + '.' + appVersionAsArray[2];
  }
  if (semver.gt(appVersion, lastVersionPromptedForReview)) {
    // if the current app version is greater-than the last time you prompted them
    // prompt them with the titanium-review-dialog alert
    Ti.App.Properties.setString('lastVersionPromptedForReview', appVersion);
      if (Review.isSupported()) {
          Review.requestReview();
      }
  }
}

Download

Setup

Unpack the modules and place them inside the modules/iphone/ and modules/android/ folder of your project. Edit the modules section of your tiapp.xml file to include this module:

<modules>
    <module platform="iphone">ti.reviewdialog</module>
    <module platform="android">ti.reviewdialog</module>
</modules>

Example

Request a new review dialog:

import Review from 'ti.reviewdialog';

if (Review.isSupported()) {
    Review.requestReview();
}

Methods

  • isSupported
  • requestReview

Events

  • complete (Android only) Note: The API does not indicate whether the user reviewed or not, or even whether the review dialog was shown.

Author

Hans Knoechel (@hansemannnn / Web)

License

Apache 2.0

Contributing

Code contributions are greatly appreciated, please submit a new pull request!

titanium-review-dialog's People

Contributors

hansemannn avatar m1ga avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.