当应用在后台打开时,我想打开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 }));
答案 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();
}