canOpenURL 为自定义 URL 方案返回 true,即使未安装应用程序也是如此
canOpenURL returning true for custom URL scheme even if app is not installed
NSString *customURL = @"mycustomurl://";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
} else {
...
}
'canOpenURL' 的应用 returns 为真,即使未安装公开自定义 URL 的目标应用。此行为发生在 phone 和模拟器上。 openURL 然后默默地失败了。知道为什么 happening/how 会捕捉到这种情况吗?
如果安装了 Uber 应用程序,这就是我用来打开 Uber 应用程序的方法,否则打开 Uber 网站
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"uber://"]])
{
//Uber is installed
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"uber://"]];
}
else
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://uber.com"]];
}
不要忘记在您的 info.plist 文件中添加此 LSApplicationQueriesSchemes
像这样(uber 和 twitter 的应用程序名称已包含在其中)info.plist screenshot
如果使用 SDK 9.0 及更高版本的应用,则必须确保在主应用的 info.plist:
中添加要打开的应用方案
如果不将以上内容添加到主应用程序的 info.plist(相应地更改方案),canOpenURL 将始终 return 否。除非使用 iOS SDK 低于 9.0 的应用,否则不会发生这种情况。
此外,使用以下逻辑更安全:
NSString * urlStr = @"mycustomurl://";
NSURL * url = [NSURL URLWithString:urlStr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
if([[UIApplication sharedApplication] openURL:url]) {
// App opened
} else {
// App not opened
}
} else {
// Can not open URL
}
我建议的最后一项检查是在设备中打开 Safari 应用程序,在 url 字段中输入应用程序方案 url 字符串,然后按回车键。从结果中得出结论。
确保您使用的是 LSApplicationQueriesSchemes 而不是 URL 类型
它只适用于 LSApplicationQueriesSchemes
这将不起作用
这将工作
NSString *customURL = @"mycustomurl://";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
} else {
...
}
'canOpenURL' 的应用 returns 为真,即使未安装公开自定义 URL 的目标应用。此行为发生在 phone 和模拟器上。 openURL 然后默默地失败了。知道为什么 happening/how 会捕捉到这种情况吗?
如果安装了 Uber 应用程序,这就是我用来打开 Uber 应用程序的方法,否则打开 Uber 网站
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"uber://"]])
{
//Uber is installed
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"uber://"]];
}
else
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://uber.com"]];
}
不要忘记在您的 info.plist 文件中添加此 LSApplicationQueriesSchemes
像这样(uber 和 twitter 的应用程序名称已包含在其中)info.plist screenshot
如果使用 SDK 9.0 及更高版本的应用,则必须确保在主应用的 info.plist:
中添加要打开的应用方案如果不将以上内容添加到主应用程序的 info.plist(相应地更改方案),canOpenURL 将始终 return 否。除非使用 iOS SDK 低于 9.0 的应用,否则不会发生这种情况。
此外,使用以下逻辑更安全:
NSString * urlStr = @"mycustomurl://";
NSURL * url = [NSURL URLWithString:urlStr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
if([[UIApplication sharedApplication] openURL:url]) {
// App opened
} else {
// App not opened
}
} else {
// Can not open URL
}
我建议的最后一项检查是在设备中打开 Safari 应用程序,在 url 字段中输入应用程序方案 url 字符串,然后按回车键。从结果中得出结论。
确保您使用的是 LSApplicationQueriesSchemes 而不是 URL 类型
它只适用于 LSApplicationQueriesSchemes
这将不起作用
这将工作