expo-plugin-app-checker
Version:
检测指定的App是否存在
48 lines (47 loc) • 2.23 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkAppExists = void 0;
const react_native_1 = require("react-native");
// 获取原生模块
const { AppChecker } = react_native_1.NativeModules;
/**
* 检查设备上是否存在指定的应用程序
*
* @param packageNameOrScheme - 在Android上使用完整包名(如 "com.whatsapp"),
* 在iOS上使用URL scheme(如 "whatsapp://")
* @returns 一个Promise,解析为布尔值,表示应用程序是否存在
*/
function checkAppExists(packageNameOrScheme) {
return __awaiter(this, void 0, void 0, function* () {
try {
// iOS使用Linking API
if (react_native_1.Platform.OS === 'ios') {
// 确保scheme包含了"://"
const scheme = packageNameOrScheme.includes('://')
? packageNameOrScheme
: `${packageNameOrScheme}://`;
return yield react_native_1.Linking.canOpenURL(scheme);
}
// Android使用原生模块
if (!AppChecker) {
console.warn('[expo-plugin-app-checker] Native module not found. Falling back to default behavior.');
return false;
}
return yield AppChecker.checkAppExists(packageNameOrScheme);
}
catch (error) {
console.error('[expo-plugin-app-checker] error:', error);
return false;
}
});
}
exports.checkAppExists = checkAppExists;