在ios9出现之前,当按下按钮时,我使用以下代码用我的应用程序打开Facebook应用程序。如果手机有Facebook应用程序,则打开Facebook应用程序,如果不是,则打开safari browser.same对于twitter.this是我的代码。
- (IBAction)facebookButton:(id)sender {
NSURL *facebookUrl = [NSURL URLWithString:@"fb://profile/number"];
if ([[UIApplication sharedApplication] canOpenURL:facebookUrl]) {
[[UIApplication sharedApplication] openURL:facebookUrl];
}
else{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.facebook.com/number"]];
}
}
- (IBAction)twitterButton:(id)sender {
NSURL *twitterUrl = [NSURL URLWithString:@"twitter://profile/"];
if ([[UIApplication sharedApplication] canOpenURL:twitterUrl]) {
[[UIApplication sharedApplication] openURL:twitterUrl];
}
else{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.twitter.com/"]];
}
}
这在iOS 9之前运行良好。但是现在如果应用程序存在与否,它只会打开safari.help我这个
答案 0 :(得分:3)
答案 1 :(得分:1)
来自canOpenURL:
方法的Apple文档:
如果您的应用在iOS 9.0上或之后进行了关联,则必须声明该网址 您想要传递给此方法的方案。这样做是通过使用 Xcode项目的Info.plist中的LSApplicationQueriesSchemes数组 文件。对于您希望应用与此方法一起使用的每种网址方案, 将其添加为此数组中的字符串。
如果您的(iOS 9.0或更高版本)应用使用您的方案调用此方法 没有声明,方法返回NO,无论是否 该方案的相应应用程序已安装在设备上。
与此方法不同,openURL:方法不受约束 LSApplicationQueriesSchemes要求:如果一个应用程序处理一个 方案安装在设备上,openURL:方法是否有效 或不是你已经宣布了这个计划。
Apple将此更改添加到API,因为canOpenURL:
方法通常用于接收有关安装在用户设备上的应用程序的信息,而无需实际openURL:
次调用。
问题可以通过以下方式解决:
将“fb”和“twitter”URL方案添加到Info.plist中的LSApplicationQueriesSchemes数组中;
openURL:
方法返回NO。您可以通过以下方式重写代码以避免canOpenURL:
调用:
if (![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"fb://profile/number"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.facebook.com/number"]];
}
查看Universal Links,它的工作方式类似 - 打开应用程序,如果它在设备上可用,否则在Safari中打开URL。
答案 2 :(得分:0)
自定义深层链接模式不再适用于iOS9。您需要使用Universal Links。请参阅this指南。