如何以编程方式检查是否安装了应用程序?

时间:2010-08-18 12:50:37

标签: iphone objective-c cocoa-touch ipad ios4

我正在开发一个iPhone应用程序,它将在企业中安装很少的第三方应用程序。我有关于捆绑ID的信息。有没有办法使用某些系统API检查应用程序是否已安装?目前,应用程序再次安装,覆盖当前安装。我需要防止这种情况。 (如果已安装该应用程序,Apple的AppStore应用程序将禁用安装选项。)

6 个答案:

答案 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)

iOS 9及更新版本:

由于Apple在iOS 9中进行了一些安全性更改,除了在其他答案中提到的canOpenURL之外,还需要在info.plist中添加带有字符串的LSApplicationQueriesSchemes数组。请参阅截图,了解使用Twitter的示例。

info.plist LSApplicationQueriesSchemes array

如果你想添加Facebook,你只需在数组中添加另一个字符串值为“fb”的项目。