我正在开发一个iPhone应用程序,它将在企业中安装很少的第三方应用程序。我有关于捆绑ID的信息。有没有办法使用某些系统API检查应用程序是否已安装?目前,应用程序再次安装,覆盖当前安装。我需要防止这种情况。 (如果已安装该应用程序,Apple的AppStore应用程序将禁用安装选项。)
答案 0 :(得分:61)
我认为这不可能直接,但如果应用程序注册uri方案,你可以测试它。
对于facebook应用,URI方案例如是fb://
。您可以在应用的info.plist中注册。 [UIApplication canOpenURL:url]
会告诉您某个网址是否会打开。因此测试fb://
是否会打开,将表明安装了一个已注册fb://
的应用程序 - 这对于facebook应用程序来说是一个很好的提示。
// check whether facebook is (likely to be) installed or not
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
// Safe to launch the facebook app
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"fb://profile/200538917420"]];
}
答案 1 :(得分:31)
以下是测试Facebook应用程序是否已安装的示例
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
// Facebook app is installed
}
答案 2 :(得分:24)
对于任何尝试使用iOS 9 / Swift 2执行此操作的人:
首先,您需要通过将以下内容添加到Info.plist
文件中来将网址“列入白名单”(安全功能 - 请参阅Leo Natan's answer):
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
之后,您可以询问该应用程序是否可用且具有注册方案:
guard UIApplication.sharedApplication().canOpenURL(NSURL(string: "fb://")!) else {
NSLog("No Facebook? You're a better man than I am, Charlie Brown.")
return
}
答案 3 :(得分:4)
Swift 3.1,Swift 3.2,Swift 4
if let urlFromStr = URL(string: "fb://") {
if UIApplication.shared.canOpenURL(urlFromStr) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(urlFromStr)
}
}
}
在Info.plist中添加这些:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
答案 4 :(得分:1)
说到社交网络,最好检查多个方案。 (例如,对于IOS9 SDK,方案&#39; fb&#39;已经过时了。):
NSArray* fbSchemes = @[
@"fbapi://", @"fb-messenger-api://", @"fbauth2://", @"fbshareextension://"];
BOOL isInstalled = false;
for (NSString* fbScheme in fbSchemes) {
isInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:fbScheme]];
if(isInstalled) break;
}
if (!isInstalled) {
// code
return;
}
当然,Info.plist也应该包含所有必要的方案:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
答案 5 :(得分:0)