我想在我的反应本应用程序中处理自定义URL方案。因此,我首先在我的root组件中的JS代码中添加了一个EventListener:
componentDidMount() {
Linking.addEventListener('url', this.handleOpenURL);
}
componentWillUnmount() {
Linking.removeEventListener('url', this.handleOpenURL);
}
handleOpenURL = event => {
console.log('event', event);
};
在我的Xcode应用程序中,我添加了一个自定义URL方案" com.myscheme"。
当我尝试在AppDelegate.swift中添加该功能以处理深层链接时,我的问题已经出现。
这是我的功能:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
print(url)
return true
}
似乎返回true不足以触发我的听众在我的应用程序中...
我知道反应本文档中有一个Objective-C方法:
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
,但我只想与Swift进行项目,以提高我的技能。问题是我找不到使用Swift实现此功能的任何示例。
这就是为什么我会寻求帮助以实现此方法,然后在我的RN应用程序中触发我的事件。
谢谢您的理解:)
关于您的AppDelegate方法,Swift版本应为:
public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return RCTLinkingManager.application(app, open: url, options: options)
}
RO22E0的答案对我来说很好。我的应用程序也支持通用链接,因此我还需要迅速等同于React Native Docs中提供的以下功能:
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
我对Swift不太满意,但是我最终能够通过反复试验获得工作解决方案:
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
return RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)
}