【问题标题】:Opening TestFlight app from another app and deep link to specific app从另一个应用程序打开 TestFlight 应用程序并深层链接到特定应用程序
【发布时间】:2014-12-27 08:21:30
【问题描述】:

如何从我自己的 iOS 应用中找到另一个应用的方案以及指向它的深层链接?

更具体地说,我想在某些条件下(由我的代码设置)深度链接到 Testflight 应用程序。我假设这个人安装了 Testflight,(这可能是一个糟糕的假设,但我们可以接受这个假设)。

我知道在 Android 上,您可以查询应用并将意图发送到其他人的应用的深层链接。 iOS 上的等价物是什么?

【问题讨论】:

  • React-native 是否有任何解决方案来实现相同的目标? Linking.canOpenURL(config.testFlightUrl) .then(supported => { if (!supported) { console.log("Unable to Open Url"); } else { return Linking.openURL(config.testFlightUrl); } }) .catch(err => console.error("Unable to Open Url", err));

标签: ios objective-c iphone deep-linking


【解决方案1】:

您需要做两件事。首先,检查是否安装了 TestFlight。然后为您的应用创建一个新链接。

NSURL *customAppURL = [NSURL URLWithString:@"itms-beta://"];
if ([[UIApplication sharedApplication] canOpenURL:customAppURL]) {

    // TestFlight is installed

    // Special link that includes the app's Apple ID
    customAppURL = [NSURL URLWithString:@"https://beta.itunes.apple.com/v1/app/978489855"]; 
    [[UIApplication sharedApplication] openURL:customAppURL];
}

这个特殊的https://beta.itunes.apple.com URL 将直接在 TestFlight 中打开。

最后,如果您使用的是 iOS 9(或更高版本),您需要在 Info.plist 中添加内容以使 canOpenURL: 方法正常工作。

如果您的应用在 iOS 9.0 或之后链接,您必须声明 URL 您要传递给此方法的方案。通过使用 Xcode 项目的 Info.plist 中的 LSApplicationQueriesSchemes 数组 文件。对于您希望应用程序使用此方法的每个 URL 方案, 将其作为字符串添加到此数组中。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>itms-beta</string>
</array>

【讨论】:

  • 如何获取 customAppURL?我的应用已上传到 testFlight,但我找不到获取网址的方法。
  • 只是https://beta.itunes.apple.com/v1/app/ 后跟应用程序ID。请注意,这在任何地方都没有记录,并且可能随时更改。
  • 这会打开 Testflight 并显示我们的测试版应用程序图标(带有打开的链接),但是如何直接从链接打开测试版应用程序?
  • 这似乎不适用于 iOS 10.3?它在 TestFlight 页面上正确打开 Safari,但没有打开 TestFlight 应用程序...
  • @Altimac 看起来直接深层链接现在可以工作了。使用协议直接调用应用程序:itms-beta://beta.itunes.apple.com/v1/app/978489855
【解决方案2】:

通过查看 plist,TestFlight 的 URL 方案是“itms-beta://”我还无法获得深度链接,我已经尝试将 Apple ID 传递给它,无论是否带有 ?除了在它前面加上 appleid= 之外,我接下来会尝试 bundle ID。

要在您可以使用的用户设备上打开 TestFlight 应用程序:

NSURL *customAppURL = [NSURL URLWithString:@"itms-beta://"];
if ([[UIApplication sharedApplication] canOpenURL:customAppURL]) {
    [[UIApplication sharedApplication] openURL:customAppURL];
}

【讨论】:

    【解决方案3】:

    Apple 提供的大多数内置应用程序都响应自定义 URL 方案;例如,地图、邮件、YouTube、iTunes 和 App Store 应用程序都将打开以响应自定义 URL。但是,也有许多已发布的具有已发布 URL 方案的第三方应用程序,您可以在自己的应用程序中使用它们。您可以在

    上搜索应用程序方案
    1. http://handleopenurl.com/

    2. http://wiki.akosma.com/IPhone_URL_Schemes – 两者都有很多 URL 方案列表

    获得自定义 URL 架构后,您就可以使用相同架构深层链接到该应用,

    NSURL *customAppURL = [NSURL URLWithString:@"urlscheme://"];
    //Eg: NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%20World!"];
    if ([[UIApplication sharedApplication] canOpenURL:whatsAppURL]) {
        [[UIApplication sharedApplication] openURL:whatsAppURL]]];
    }
    

    【讨论】:

    • 这是很好的信息,但它没有尝试回答有关 TestFlight 应用程序的自定义 URL 方案的问题。
    • 两个链接都返回 404
    【解决方案4】:

    Swift 3/4 答案:

    if let customAppURL = URL(string: "itms-beta://"){
        if(UIApplication.shared.canOpenURL(customAppURL)){
            UIApplication.shared.open(customAppURL, options: [:], completionHandler: nil)
        }
    }
    

    【讨论】:

      【解决方案5】:

      调用一个或另一个应用程序的另一种方式:

      - (IBAction)go:(id)sender {
          NSString *cnnAppURL = @"cnn://";
          NSString *mapsAppURL = @"maps://";
      
          BOOL canOpenURL = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:cnnAppURL]];
      
          NSString *url = canOpenURL ? cnnAppURL : mapsAppURL;
          [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
      
      
      }
      

      请阅读“UseYourLoaf's 最近关于使用 URLschemescanOpenURL 的博客文章。这涉及到新的安全问题和解决方案。引用:

      “这很有用,但包括 Twitter 和 Facebook 在内的开发人员正在使用这种机制来发现设备上安装的应用程序列表,以便他们可以提供“量身定制的内容”。Apple 认为这是侵犯隐私权,因此在 iOS 9 中限制了查询 URL 方案。如果您针对 iOS 9 SDK 构建和链接,则需要将您的应用程序将查询的方案列入白名单。重要的是要了解此策略还可能影响尚未使用 iOS 9 重建的旧应用程序SDK。”

      请阅读this link 了解与canOpenURL 功能相关的问题

      阅读@picciano 的最后一点 - 如果不修改应用的 plist,这将无法正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-15
        • 1970-01-01
        • 2016-05-10
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        相关资源
        最近更新 更多