处理URL方案反应和迅速



我想在我的反应本应用程序中处理自定义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)
}

相关内容

  • 没有找到相关文章

最新更新