如何从我自己的iOS应用程序中找到另一个应用程序的方案及其深层链接?
更具体地说,我希望在某些条件下(由我的代码设置)深入链接到Testflight应用程序。我假设这个人安装了Testflight(这可能是一个不好的假设,但我们可以接受这个假设)。
我知道在Android上,您可以查询应用并发送意图以深入链接到其他人的应用。在iOS上会有什么相同的东西?
答案 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。但是,还有许多已建立的第三方应用程序具有已发布的URL方案,您可以在自己的应用程序中使用它们。您可以在
上搜索应用程序方案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]]];
}
答案 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最近关于使用URLschemes
与canOpenURL
一起使用的博文。这涉及新的安全问题和解决方案。引用:
&#34;这很有用,但包括Twitter和Facebook在内的开发人员正在使用此机制来发现设备上安装的应用程序列表,以便他们可以提供“量身定制的内容”。 Apple认为这是违反隐私的行为,因此在iOS 9中限制了对URL方案的查询。如果您构建并链接iOS 9 SDK,则需要将应用程序将查询的方案列入白名单。重要的是要理解这个策略还会影响尚未使用iOS 9 SDK重建的旧应用程序。&#34;
有关canOpenURL
功能
阅读@ picciano的最后一点 - 如果不修改应用程序的plist,这将无法正常工作。