UNPKG

react-native-rn-in-app-update

Version:

A minimal React Native module that displays the native Android in-app update popup using the Play Core library. Supports both immediate and flexible update types.

61 lines (56 loc) 2.16 kB
"use strict"; import { DeviceEventEmitter, NativeModules, Platform } from 'react-native'; export * from "./types.js"; const LINKING_ERROR = `The package 'react-native-rn-in-app-update' doesn't seem to be linked. Make sure: \n\n` + Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n'; const RnInAppUpdate = NativeModules.RnInAppUpdate ? NativeModules.RnInAppUpdate : new Proxy({}, { get() { throw new Error(LINKING_ERROR); } }); /** * Shows the native Android in-app update popup using the Play Core API. * * @param type - (Optional) The update type to use: * - `'immediate'` (default): Forces the user to update immediately before continuing. * - `'flexible'`: Allows the user to continue using the app while the update is downloaded in the background. * * @returns A Promise that resolves when the update flow is started, or rejects if not available or fails. */ export const showUpdatePopup = (type = 'immediate') => { if (Platform.OS !== 'android') { return Promise.resolve(); } const updateType = type === 'immediate' ? 0 : 1; return RnInAppUpdate.showUpdatePopup(updateType); }; /** * Gets metadata about the available update from the Play Store. * * @returns A promise that resolves with update info, or rejects on error or unsupported platform. */ export const getUpdateInfo = async () => { if (Platform.OS !== 'android') { return null; } const info = await RnInAppUpdate.getUpdateInfo(); return info; }; /** * Starts a flexible update and listens for download progress. * Emits progress events via DeviceEventEmitter. */ export const startFlexibleUpdateWithProgress = async () => { if (Platform.OS !== 'android') return; await RnInAppUpdate.startFlexibleUpdateWithProgress(); }; /** * Subscribes to update progress events */ export const subscribeToUpdateProgress = callback => { const subscription = DeviceEventEmitter.addListener('in_app_update_progress', callback); return () => subscription.remove(); // return unsubscribe function }; //# sourceMappingURL=index.js.map