您好我正在尝试使用React-Native的链接库来收听链接更改,我按照https://facebook.github.io/react-native/docs/linking.html上的说明操作。我可以使用openURL打开外部URL,但Linking.addEventListener似乎不适合我。 我复制了代码段:
componentDidMount() {
Linking.addEventListener('url', this._handleOpenURL);
},
componentWillUnmount() {
Linking.removeEventListener('url', this._handleOpenURL);
},
_handleOpenURL(event) {
console.log(event.url);
}
它不会给我一个错误,但是当应用打开外部网址时,不会调用_handleOpenURL。
我想知道为什么会这样,我该怎么做才能解决它?
答案 0 :(得分:1)
这是因为当应用程序通过意图开始时,链接具有特定的方法。
试试这个:
componentDidMount() {
Linking.getInitialURL().then((ev) => {
if (ev) {
this._handleOpenURL(ev);
}
}).catch(err => {
console.warn('An error occurred', err);
});
Linking.addEventListener('url', this._handleOpenURL);
}
答案 1 :(得分:0)
我遇到了相同的问题,设法解决了2天。这是我的步骤,希望对下一个需要解决此问题的人有所帮助。
就我而言,我只是添加了此方法
// 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和以下版本的代码段。
答案 2 :(得分:0)
对于从博览会中退出的任何人-您无需将此代码添加到AppDelegate(与此处的文档https://reactnative.dev/docs/0.60/linking中所述不同)。我不知道为什么会这样,而且我不确定文件为什么没有说明这一点。也许是假设您还没有退出。
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
就这样吧
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}
一旦我将其删除,Linking.addEventListener('url', this._handleOpenURL);
就开始为我工作。
答案 3 :(得分:-1)
在链接时遇到问题,然后我刚刚删除了删除的侦听器代码,然后我的代码正常工作,我的代码就是这样。