从另一个应用程序打开TestFlight应用程序并深入链接到特定应用程序

时间:2014-10-31 04:16:25

标签: ios objective-c iphone deep-linking

如何从我自己的iOS应用程序中找到另一个应用程序的方案及其深层链接?

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

我知道在Android上,您可以查询应用并发送意图以深入链接到其他人的应用。在iOS上会有什么相同的东西?

5 个答案:

答案 0 :(得分:27)

您需要做两件事。首先,检查是否安装了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网址将直接在TestFlight中打开。

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

  

如果您的应用在iOS 9.0上或之后进行了关联,则必须声明该网址   您想要传递给此方法的方案。这样做是通过使用   Xcode项目的Info.plist中的LSApplicationQueriesSchemes数组   文件。对于您希望应用与此方法一起使用的每种网址方案,   将其添加为此数组中的字符串。

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

答案 1 :(得分:7)

通过查看plist,TestFlight的URL方案是&#34; itms-beta://&#34;我无法设法深入链接,我已经尝试将Apple ID传递给它,有没有?以及使用appleid =为它添加前缀我将在下一步尝试捆绑ID。

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

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

答案 2 :(得分:5)

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

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

  2. http://wiki.akosma.com/IPhone_URL_Schemes - 两者都有很好的URL方案列表

  3. 获得自定义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]]];
    }
    

答案 3 :(得分:2)

Swift 3/4回答:

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

答案 4 :(得分:0)

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

- (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]];


}

请阅读&#34; UseYourLoaf's最近关于使用URLschemescanOpenURL一起使用的博文。这涉及新的安全问题和解决方案。引用:

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

有关canOpenURL功能

的问题,请阅读this link

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