LinkingIOS

注:LinkingIOS现已过时,请使用跨平台的Linking组件。

LinkingIOS提供了一个通用的接口来与传入和传出的App链接进行交互。

基本用法#

处理链接#

如果你的应用被其注册过的外部url调起,则可以在任何组件内这样获取和处理它:

componentDidMount() {
 var url = LinkingIOS.popInitialURL();
}

如果要在App启动后也监听传入的App链接,那么需要在AppDelegate.m中增加以下代码:

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

// Only if your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html).
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
  restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
 {
  return [RCTLinkingManager application:application
                   continueUserActivity:userActivity
                     restorationHandler:restorationHandler];
 }

然后你的React组件就可以监听LinkingIOS的相关事件:

componentDidMount() {
  LinkingIOS.addEventListener('url', this._handleOpenURL);
},
componentWillUnmount() {
  LinkingIOS.removeEventListener('url', this._handleOpenURL);
},
_handleOpenURL(event) {
  console.log(event.url);
}

触发应用链接#

要触发一个App链接(打开浏览器、邮箱或者其它的应用),只需调用:

LinkingIOS.openURL(url)

如果想在打开链接前先检查是否安装了对应的应用,则调用以下方法:

LinkingIOS.canOpenURL(url, (supported) => {
  if (!supported) {
    AlertIOS.alert('Can\'t handle url: ' + url);
  } else {
    LinkingIOS.openURL(url);
  }
});

方法#

static addEventListener(type: string, handler: Function) #

添加一个监听LinkingIOS变化的事件。type参数应填url,并提供一个处理函数。

static removeEventListener(type: string, handler: Function) #

删除一个事件处理函数。type参数应填url

static openURL(url: string) #

尝试使用设备上已经安装的应用打开指定的url

static canOpenURL(url: string, callback: Function) #

判断设备上是否有已经安装的应用可以处理指定的URL。回调函数的参数只有一个:bool supported

注:对于iOS 9以上版本,你还需要在Info.plist中添加LSApplicationQueriesSchemes字段。

static popInitialURL() #

如果应用是被一个链接调起的,则会返回相应的链接地址。否则它会返回null