首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linking

Projects with Native Code Only

本部分仅适用于react-native init使用Create React Native App创建的项目或已经退出的项目。有关弹出的更多信息,请参阅创建React Native App存储库的指南

Linking 为您提供了一个通用接口,可以与传入和传出应用程序链接进行交互

Basic Usage

Handling deep links

如果您的应用是从注册到您的应用的外部URL启动的,则您可以从任何需要的组件访问和处理该应用

代码语言:javascript
复制
componentDidMount() {
  Linking.getInitialURL().then((url) => {
    if (url) {
      console.log('Initial url is: ' + url);
    }
  }).catch(err => console.error('An error occurred', err));
}

注意:有关如何在Android上添加对深度链接的支持的说明,请参阅启用应用程序内容的深层链接 - 为您的深层链接添加意向过滤器

如果您希望在MainActivity的现有实例中接收意图,可以将launchModeMainActivity 设置为singleTaskin AndroidManifest.xml。查看<activity>文档以获取更多信息。

代码语言:javascript
复制
<activity
  android:name=".MainActivity"
  android:launchMode="singleTask">

注意:在iOS上,您需要RCTLinking按照此处所述的步骤链接到您的项目。如果您还想在应用执行过程中收听传入的应用链接,则需要将以下行添加到您的应用中*AppDelegate.m

代码语言:javascript
复制
// iOS 9.x or newer
#import <React/RCTLinkingManager.h>

- (BOOL)application:(UIApplication *)application
   openURL:(NSURL *)url
   options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}

如果您的目标是iOS 8.x或更低版本,则可以使用以下代码:

代码语言:javascript
复制
// iOS 8.x or older
#import <React/RCTLinkingManager.h>

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url
                      sourceApplication:sourceApplication annotation:annotation];
}

//如果您的应用程序使用通用链接,则还需要添加以下代码:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
 restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
 return [RCTLinkingManager application:application
                  continueUserActivity:userActivity
                    restorationHandler:restorationHandler];
}

然后在您的React组件上,您可以Linking按照以下方式收听活动

代码语言:javascript
复制
componentDidMount() {
  Linking.addEventListener('url', this._handleOpenURL);
},
componentWillUnmount() {
  Linking.removeEventListener('url', this._handleOpenURL);
},
_handleOpenURL(event) {
  console.log(event.url);
}

打开外部链接

To start the corresponding activity for a link (web URL, email, contact etc.), call

代码语言:javascript
复制
Linking.openURL(url).catch(err => console.error('An error occurred', err));

如果您想检查是否有任何已安装的应用程序可以事先处理给定的URL,您可以致电

代码语言:javascript
复制
Linking.canOpenURL(url).then(supported => {
  if (!supported) {
    console.log('Can\'t handle url: ' + url);
  } else {
    return Linking.openURL(url);
  }
}).catch(err => console.error('An error occurred', err));

方法

constructor()

addEventListener(type, handler)

通过侦听url事件类型并提供处理程序来添加处理程序来链接更改

removeEventListener(type, handler)

通过传递url事件类型和处理程序来移除处理程序

openURL(url)

尝试url用任何已安装的应用程序打开给定的。

您可以使用其他网址,例如位置(例如,Android上的“地理位置:37.484847,-122.148386”或iOS 上的“ http://maps.apple.com/?ll=37.484847,-122.148386 ”),联系人或任何可以使用已安装的应用程序打开的其他URL。

该方法返回一个Promise对象。如果用户确认打开的对话框或URL自动打开,则承诺已解决。如果用户取消打开的对话框或没有为该URL注册的应用程序,该承诺将被拒绝。

注意:如果系统不知道如何打开指定的URL,则此方法将失败。如果您传递的是非http网址,则最好首先检查canOpenURL。

注意:对于网址,协议(“http://”,“https://”)必须相应设置!

canOpenURL(url)

确定安装的应用程序是否可以处理给定的URL。

注意:对于网址,协议(“http://”,“https://”)必须相应设置!

注意:从iOS 9开始,您的应用程序需要在LSApplicationQueriesSchemes内部提供密钥,Info.plist否则canOpenURL将始终返回false。

@param URL打开的URL

getInitialURL()

如果应用程序启动是由应用程序链接触发的,则会显示链接网址,否则会显示链接网址 null

扫码关注腾讯云开发者

领取腾讯云代金券