# @nativescript/app-availability A plugin that checks if an app is installed on a device. ## Installation ```cli npm install @nativescript/appavailability ``` ## Use @nativescript/app-availability ```typescript // examples of what to pass: // - for iOS: "maps://", "twitter://", "fb://" // - for Android: "com.facebook.katana" available('twitter://').then((avail: boolean) => { console.log('App available? ' + avail); }); ``` ### Open an app (with web fallback) To open an app installed on the device, call the `openUrl()` method on the `Utils` class. Pass the app's identifier URL to the method. The code below asynchronously checks if the Twitter mobile app is available on the device. If the app is availabe, `openUrl()` opens it . Otherwise, `openUrl()` opens the website instead. ```typescript import { available } from '@nativescript/appavailability'; import { Utils } from '@nativescript/core'; const twitterScheme = 'twitter://'; available(twitterScheme).then((available) => { if (available) { // open in the app Utils.openUrl(twitterScheme + (isIOS ? '/user?screen_name=' : 'user?user_id=') + 'eddyverbruggen'); } else { // open in the default browser Utils.openUrl('https://twitter.com/eddyverbruggen'); } }); ``` To synchronously check for an app's availability, use the `availableSync()` function. ```typescript import { availableSync } from '@nativescript/appavailability'; import { Utils } from '@nativescript/core'; if (availableSync('twitter://')) { Utils.openUrl('twitter://' + (isIOS ? '/user?screen_name=' : 'user?user_id=') + 'eddyverbruggen'); } else { Utils.openUrl('https://twitter.com/eddyverbruggen'); } ``` ### Determine the correct identifier of an app. - `Android` : search the Play Store and use the id in the URL. For Twitter this is `com.twitter.android` because the URL is `https://play.google.com/store/apps/details?id=com.twitter.android`. - `iOS`: Open Safari on your iPhone and type, for example,`'twitter://'` in the address bar. If the app launches, use that URL as the identifier. ## iOS whitelisting To get useful results on iOS 9+, whitelist the URL Scheme you're querying in the application's `Info.plist`. For example, to query for `twitter://`, `whatsapp://` and `fb://`, edit `app/App_ResourcesiOS/Info.plist` as follows: ```xml LSApplicationQueriesSchemes fb twitter whatsapp ``` ## Android Query Permission Starting from Android API level 30 (Android 11), you must explicitly declare your app's intent to interact with other apps in the Android manifest file `AndroidManifest.xml`. ```xml ``` Replace `com.whatsapp` with the package name of the app you want to interact with. ## API | Methods| Return Type| Description| |--------|------------|------------| |`available(packageName:string)`|`Promise`| Asynchronously checks if the app with the specified `packageName` is installed on the device.| |`availableSync(packageName:string)`|`boolean`| Synchronously checks if the app with the specified `packageName` is installed on the device.| ## License Apache License Version 2.0