当应用程序在后台打开时,如何打开React Native Android深层链接?

时间:2017-02-17 20:36:43

标签: android reactjs react-native

当应用在后台打开时,我想打开React Native Android深层链接。以下是我处理其他类似案例的方法:

iOS应用程序在后台打开: Linking.addEventListener('url', this.handleOpenURL);

iOS应用已在后台关闭 Linking.getInitialURL().then(url => this.handleOpenURL({ url }));

Android应用在后台开启: ? - 处理这种情况的最佳方法是什么?

Android应用在后台关闭: Linking.getInitialURL().then(url => this.handleOpenURL({ url }));

2 个答案:

答案 0 :(得分:1)

本机链接反应似乎不适用于在后台运行的android。您可以使用本机Android代码解决此问题。在主活动中覆盖如下方法:

    @Override
public void onNewIntent(Intent intent) {
    if(intent.getData() != null) {
        Uri deepLinkURL = intent.getData();
        DeepLink deepLink = new DeepLink(deepLinkURL.toString());
    }
}

您需要做的是将此java代码与react本机javascript集成。这可以通过本机原生模块做出反应来完成。网站上有一些文档。为了使其成为更有效的解决方案,您可以使用类似http://square.github.io/otto/的内容来创建侦听该deeplink对象的事件总线。一旦事件发生,深度链接事件将有效触发。我希望这有助于男人:)

答案 1 :(得分:1)

将此添加到MainActivity.java

    @Override
    public void onNewIntent(Intent intent) {
        if(intent.getData() != null) {
            Uri deepLinkURL = intent.getData();
            ReactContext reactContext = getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
            sendEvent(reactContext,"deepLinking", deepLinkURL.toString());
        }
    }
    private void sendEvent(ReactContext reactContext,
                           String eventName,
                           String str) {
        reactContext
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName, str);
    }

然后添加此内容以进行反应

componentDidMount() {
  this.subscription = DeviceEventEmitter.addListener('deepLinking', function(e: Event) {
    // handle event
  });
}

componentWillUnmount() {
  // When you want to stop listening to new events, simply call .remove() on the subscription
  this.subscription.remove();
}