react-native-rate-app
Version:
React Native module for In App Rating on Android and iOS
140 lines (139 loc) • 5.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _exportNames = {
requestReview: true,
openStoreForReview: true,
getAndroidMarketUrl: true
};
exports.requestReview = exports.openStoreForReview = exports.getAndroidMarketUrl = exports.default = void 0;
var _reactNative = require("react-native");
var _NativeRateApp = _interopRequireDefault(require("./codegenSpec/NativeRateApp"));
var _constants = require("./constants");
Object.keys(_constants).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _constants[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _constants[key];
}
});
});
var _types = require("./types");
Object.keys(_types).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _types[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function () {
return _types[key];
}
});
});
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* Custom error for rate app operations
*/
class RateAppError extends Error {
constructor(message) {
super(message);
this.name = "RateAppError";
}
}
const RNRateApp = {
/**
* Requests a review from the user.
*
* @param {RequestReviewProps} props - The properties for the review request.
* @param {AndroidMarket} [props.androidMarket=AndroidMarket.GOOGLE] - The market where the app's review request should be directed on Android.
* @param {string} [props.androidPackageName] - The package name of the app to request a review for on Samsung Galaxy Store.
* @returns {Promise<boolean>} A promise that resolves to a boolean indicating whether the review was successfully requested.
*/
async requestReview({
androidMarket = _types.AndroidMarket.GOOGLE,
androidPackageName
} = {}) {
try {
if (_reactNative.Platform.OS === "android") {
switch (androidMarket) {
case _types.AndroidMarket.SAMSUNG:
if (!androidPackageName) {
throw new RateAppError("androidPackageName is required for Samsung Galaxy Store");
}
return await _NativeRateApp.default.requestReviewGalaxyStore(androidPackageName);
case _types.AndroidMarket.HUAWEI:
return await _NativeRateApp.default.requestReviewAppGallery();
default:
return await _NativeRateApp.default.requestReview();
}
}
return await _NativeRateApp.default.requestReview();
} catch (error) {
throw new RateAppError(`Failed to request review: ${error}`);
}
},
/**
* Opens the store listing for the app.
* @param props The properties for the store listing.
* @returns A promise that resolves to a boolean indicating whether the store listing was successfully opened.
*/
async openStoreForReview({
iOSAppId,
androidPackageName,
androidMarket = _types.AndroidMarket.GOOGLE
}) {
const isIOS = _reactNative.Platform.OS === "ios";
const ismacOS = _reactNative.Platform.OS === "macos";
const isAndroid = _reactNative.Platform.OS === "android";
let url = "";
if (isIOS || ismacOS) {
if (!iOSAppId) {
throw new RateAppError("iOSAppId is required for iOS and macOS");
}
url = `${_constants.IOS_REVIEW_URL}${iOSAppId}?action=write-review`;
} else if (isAndroid) {
if (!androidPackageName) {
throw new RateAppError("androidPackageName is required for Android");
}
url = this.getAndroidMarketUrl(androidMarket, androidPackageName);
} else {
throw new RateAppError(`Unsupported platform: ${_reactNative.Platform.OS}`);
}
try {
const canOpenURL = await _reactNative.Linking.canOpenURL(url);
if (canOpenURL) {
await _reactNative.Linking.openURL(url);
}
return canOpenURL;
} catch (error) {
throw new RateAppError(`Failed to open store for review: ${error}`);
}
},
/**
* Gets the URL for the Android market.
* @param androidMarket The market where the app's store listing should be opened on Android.
* @param androidPackageName The package name of the app to open the store listing for on Android.
* @returns The URL for the Android market.
*/
getAndroidMarketUrl(androidMarket, androidPackageName) {
const urlTemplate = _constants.ANDROID_MARKET_URLS[androidMarket];
if (!urlTemplate) {
throw new RateAppError(`Unsupported Android market: ${androidMarket}`);
}
return urlTemplate.replace("{packageName}", androidPackageName);
}
};
const {
requestReview,
openStoreForReview,
getAndroidMarketUrl
} = RNRateApp;
exports.getAndroidMarketUrl = getAndroidMarketUrl;
exports.openStoreForReview = openStoreForReview;
exports.requestReview = requestReview;
var _default = exports.default = RNRateApp;
//# sourceMappingURL=index.js.map