Detox 不处理通用链接

Posted

技术标签:

【中文标题】Detox 不处理通用链接【英文标题】:Detox does not handle universal links 【发布时间】:2019-05-03 17:32:32 【问题描述】:

我一直在尝试使用来自https://github.com/wix/Detox/blob/master/docs/APIRef.MockingOpenFromURL.md 的device.openURLios 通用链接与 Detox 一起使用,但它不起作用。

我尝试过的示例:

it('should work', async () => 
  await device.sendToHome();
  await device.openURL(
    url: 'https://name.page.link/somewhere,
    sourceApp: 'com.apple.MobileSMS'
  );
);

它永远不会打开我的应用程序,在测试了各种东西后,它似乎 detox 只支持深度链接而不支持通用链接。

我可以提一下,当运行应用程序(在设备和模拟器上)时,通用链接工作正常,这让我相信问题不在于我如何配置通用链接,而是对它的 detox 支持。

在 iOS UI 测试中,可以通过 iMessage 应用程序测试通用链接(请参阅https://blog.branch.io/ui-testing-universal-links-in-xcode-9/)。有人知道类似的排毒方法吗?

【问题讨论】:

【参考方案1】:

您在 AppDelegate.m 中使用了此代码:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

  return [RCTLinkingManager application:application openURL:url
                  sourceApplication:sourceApplication annotation:annotation];

但 Detox 不支持。你应该使用:

- (BOOL)application:(UIApplication *)app
        openURL:(NSURL *)url
        options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options

  return [RCTLinkingManager application:app openURL:url
                            options:options];

【讨论】:

确实如此。 application:openURL:sourceApplication:annotation: 已过时且已弃用,不应使用。由于 Detox 不支持 iOS 9,所以我们不检查也不调用这个方法。

以上是关于Detox 不处理通用链接的主要内容,如果未能解决你的问题,请参考以下文章

如何不以编程方式处理一些通用链接?

iOS 应用程序上的通用链接打开应用程序但不调用处理程序

如何在处理通用链接之前等待 didFinishLaunchingWithOptions 完成?

如果不满足某个条件,你怎么能忽略一个通用链接?

使用 Detox 在 Android 上设置相机权限

无法在 IOS 应用程序的 detox 中使用深度链接 url 启动应用程序