NativeScript plugin to check whether or not another app is installed on the device
MIT License
A plugin to check for availability of other apps on the device.
⚠️ Looking for NativeScript 7 compatibilty? Go to the NativeScript/plugins repo.
Run the following command from the root of your project:
tns plugin add nativescript-appavailability
Note that version 1.3.0 added a synchronous version of this method that doesn't return a Promise. Need that? Use
availableSync
instead ofavailable
.
const isAppAvailable = require("nativescript-appavailability").available;
// examples of what to pass:
// - for iOS: "maps://", "twitter://", "fb://"
// - for Android: "com.facebook.katana"
appavailability.available("twitter://").then((avail: boolean) => {
console.log("App available? " + avail);
})
import * as appavailability from "nativescript-appavailability";
// examples of what to pass:
// - for iOS: "maps://", "twitter://", "fb://"
// - for Android: "com.facebook.katana"
appavailability.available("twitter://").then((avail: boolean) => {
console.log("App available? " + avail);
})
var appAvailability = require("nativescript-appavailability");
// examples of what to pass:
// - for iOS: "maps://", "twitter://", "fb://"
// - for Android: "com.facebook.katana"
appAvailability.available("com.facebook.katana").then(function(avail) {
console.log("App available? " + avail);
})
Now that you know whether an app is installed or not, you probably want to launch it. Here's a snippet that opens the mobile Twitter app and falls back to the website if it's not installed.
import { available } from "nativescript-appavailability";
import { openUrl } from "tns-core-modules/utils/utils";
const twitterScheme = "twitter://";
available(twitterScheme).then(available => {
if (available) {
// open in the app
openUrl(twitterScheme + (isIOS ? "/user?screen_name=" : "user?user_id=") + "eddyverbruggen");
} else {
// open in the default browser
openUrl("https://twitter.com/eddyverbruggen");
}
})
And a more concise, synchronous way would be:
import { availableSync } from "nativescript-appavailability";
import { openUrl } from "tns-core-modules/utils/utils";
if (availableSync("twitter://")) {
openUrl("twitter://" + (isIOS ? "/user?screen_name=" : "user?user_id=") + "eddyverbruggen");
} else {
openUrl("https://twitter.com/eddyverbruggen");
}
To get useful results on iOS 9 and up you need to whitelist the URL Scheme
you're querying in the application's .plist
.
Luckily NativeScript made this pretty easy. Just open app/App_ResourcesiOS/Info.plist
and add this if you want to query for both twitter://
and fb://
:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>twitter</string>
</array>
You may wonder how one would determine the correct identifier for an app.