当应用在后台打开时,我想打开一个反应本机Android Deeplink。这是我处理其他类似情况的方式:
iOS应用在后台打开: Linking.addEventListener('url', this.handleOpenURL);
iOS应用程序在后台关闭 Linking.getInitialURL().then(url => this.handleOpenURL({ url }));
Android应用在后台打开:? - 处理这种情况的最佳方法是什么?
Android应用在后台关闭: Linking.getInitialURL().then(url => this.handleOpenURL({ url }));
REECT本机链接似乎与在后台运行的Android不起作用。您可以使用本机Android代码来解决此问题。在主要活动中覆盖这样的方法:
@Override
public void onNewIntent(Intent intent) {
if(intent.getData() != null) {
Uri deepLinkURL = intent.getData();
DeepLink deepLink = new DeepLink(deepLinkURL.toString());
}
}
您需要做的就是将此Java代码与React Native JavaScript集成。这可以使用React Native -Native模块来完成。网站上有一些文档。为了使其成为一个更有效的解决方案,您可以使用http://square.github.io/otto/之类的东西来创建在该Deeplink对象上听取该的事件总线。然后,一旦发生事件,Deeplink事件将有效地开火。我希望这对人有帮助:)
将其添加到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);
}
然后将其添加到React
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();
}