mirror of
https://github.com/status-im/react-native.git
synced 2025-02-23 22:58:19 +00:00
Summary:
Android requires lowercase for URL scheme. This commit d00bdb9bb8
fixed it but on React Native side.
Because it is Android specific, it should be fixed on Android side.
Android has method to normalize url scheme: https://developer.android.com/reference/android/net/Uri.html#normalizeScheme()
Pull Request resolved: https://github.com/facebook/react-native/pull/21561
Differential Revision: D10287868
Pulled By: hramos
fbshipit-source-id: f5e474164fdb2cfd49bd8ee51da17de3f1341a9c
94 lines
2.4 KiB
JavaScript
94 lines
2.4 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
* @flow
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const NativeEventEmitter = require('NativeEventEmitter');
|
|
const NativeModules = require('NativeModules');
|
|
const Platform = require('Platform');
|
|
|
|
const invariant = require('fbjs/lib/invariant');
|
|
|
|
const LinkingManager =
|
|
Platform.OS === 'android'
|
|
? NativeModules.IntentAndroid
|
|
: NativeModules.LinkingManager;
|
|
|
|
/**
|
|
* `Linking` gives you a general interface to interact with both incoming
|
|
* and outgoing app links.
|
|
*
|
|
* See https://facebook.github.io/react-native/docs/linking.html
|
|
*/
|
|
class Linking extends NativeEventEmitter {
|
|
constructor() {
|
|
super(LinkingManager);
|
|
}
|
|
|
|
/**
|
|
* Add a handler to Linking changes by listening to the `url` event type
|
|
* and providing the handler
|
|
*
|
|
* See https://facebook.github.io/react-native/docs/linking.html#addeventlistener
|
|
*/
|
|
addEventListener(type: string, handler: Function) {
|
|
this.addListener(type, handler);
|
|
}
|
|
|
|
/**
|
|
* Remove a handler by passing the `url` event type and the handler.
|
|
*
|
|
* See https://facebook.github.io/react-native/docs/linking.html#removeeventlistener
|
|
*/
|
|
removeEventListener(type: string, handler: Function) {
|
|
this.removeListener(type, handler);
|
|
}
|
|
|
|
/**
|
|
* Try to open the given `url` with any of the installed apps.
|
|
*
|
|
* See https://facebook.github.io/react-native/docs/linking.html#openurl
|
|
*/
|
|
openURL(url: string): Promise<any> {
|
|
this._validateURL(url);
|
|
return LinkingManager.openURL(url);
|
|
}
|
|
|
|
/**
|
|
* Determine whether or not an installed app can handle a given URL.
|
|
*
|
|
* See https://facebook.github.io/react-native/docs/linking.html#canopenurl
|
|
*/
|
|
canOpenURL(url: string): Promise<boolean> {
|
|
this._validateURL(url);
|
|
return LinkingManager.canOpenURL(url);
|
|
}
|
|
|
|
/**
|
|
* If the app launch was triggered by an app link,
|
|
* it will give the link url, otherwise it will give `null`
|
|
*
|
|
* See https://facebook.github.io/react-native/docs/linking.html#getinitialurl
|
|
*/
|
|
getInitialURL(): Promise<?string> {
|
|
return LinkingManager.getInitialURL();
|
|
}
|
|
|
|
_validateURL(url: string) {
|
|
invariant(
|
|
typeof url === 'string',
|
|
'Invalid URL: should be a string. Was: ' + url,
|
|
);
|
|
invariant(url, 'Invalid URL: cannot be empty');
|
|
}
|
|
}
|
|
|
|
module.exports = new Linking();
|