/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule IntentAndroid */ 'use strict'; var IntentAndroidModule = require('NativeModules').IntentAndroid; var invariant = require('invariant'); /** * `IntentAndroid` gives you a general interface to handle external links. * * ### Basic Usage * * #### Handling deep links * * If your app was launched from an external url registered to your app you can * access and handle it from any component you want with * * ``` * componentDidMount() { * var url = IntentAndroid.getInitialURL(url => { * if (url) { * console.log('Initial url is: ' + url); * } * }); * } * ``` * * NOTE: For instructions on how to add support for deep linking, * refer [Enabling Deep Links for App Content - Add Intent Filters for Your Deep Links](http://developer.android.com/training/app-indexing/deep-linking.html#adding-filters). * * #### Opening external links * * To start the corresponding activity for a link (web URL, email, contact etc.), call * * ``` * IntentAndroid.openURL(url) * ``` * * If you want to check if any installed app can handle a given URL beforehand you can call * ``` * IntentAndroid.canOpenURL(url, (supported) => { * if (!supported) { * console.log('Can\'t handle url: ' + url); * } else { * IntentAndroid.openURL(url); * } * }); * ``` */ class IntentAndroid { /** * Starts a corresponding external activity for the given URL. * * For example, if the URL is "https://www.facebook.com", the system browser will be opened, * or the "choose application" dialog will be shown. * * You can use other URLs, like a location (e.g. "geo:37.484847,-122.148386"), a contact, * or any other URL that can be opened with {@code Intent.ACTION_VIEW}. * * NOTE: This method will fail if the system doesn't know how to open the specified URL. * If you're passing in a non-http(s) URL, it's best to check {@code canOpenURL} first. * * NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly! */ static openURL(url: string) { this._validateURL(url); IntentAndroidModule.openURL(url); } /** * Determine whether or not an installed app can handle a given URL. * * You can use other URLs, like a location (e.g. "geo:37.484847,-122.148386"), a contact, * or any other URL that can be opened with {@code Intent.ACTION_VIEW}. * * NOTE: For web URLs, the protocol ("http://", "https://") must be set accordingly! * * @param URL the URL to open */ static canOpenURL(url: string, callback: Function) { this._validateURL(url); invariant( typeof callback === 'function', 'A valid callback function is required' ); IntentAndroidModule.canOpenURL(url, callback); } /** * If the app launch was triggered by an app link with {@code Intent.ACTION_VIEW}, * it will give the link url, otherwise it will give `null` * * Refer http://developer.android.com/training/app-indexing/deep-linking.html#handling-intents */ static getInitialURL(callback: Function) { invariant( typeof callback === 'function', 'A valid callback function is required' ); IntentAndroidModule.getInitialURL(callback); } static _validateURL(url: string) { invariant( typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url ); invariant( url, 'Invalid URL: cannot be empty' ); } } module.exports = IntentAndroid;