web-dev-qa-db-fra.com

Comment vérifier par programme si une application est installée?

Je développe une application iPhone qui installera quelques applications tierces dans une entreprise. J'ai les informations sur les ID de bundle. Existe-t-il un moyen de vérifier si l'application est déjà installée, à l'aide de certaines API système? Actuellement, l'application est réinstallée, écrasant l'installation actuelle. Je dois empêcher cela un peu. (L'application AppStore d'Apple désactive l'option d'installation si l'application est déjà installée.)

39
attisof

Je pense que ce n'est pas possible directement, mais si les applications enregistrent des schémas d'URI, vous pouvez tester cela.

Un schéma d'URI est par exemple fb:// pour l'application facebook. Vous pouvez l'enregistrer dans l'info.plist de votre application. [UIApplication canOpenURL:url] vous indiquera si une certaine URL s'ouvre ou ne s'ouvre pas. Donc, tester si fb:// s'ouvrira, indiquera qu'une application installée a enregistré fb:// - ce qui est un bon indice pour l'application 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"]];
}
62
mvds

Voici un exemple pour tester si l'application Facebook est installée

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
    // Facebook app is installed
}
31
AlBeebe

Pour tous ceux qui essaient de le faire avec iOS 9/Swift 2:

Tout d'abord, vous devrez "mettre en liste blanche" l'URL en ajoutant ce qui suit à votre Info.plist fichier (une fonction de sécurité - voir réponse de Leo Natan ):

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>

Après cela, vous pouvez demander si l'application est disponible et a un schéma enregistré:

guard UIApplication.sharedApplication().canOpenURL(NSURL(string: "fb://")!) else {
    NSLog("No Facebook?  You're a better man than I am, Charlie Brown.")
    return
}
24
sudo make install

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)
        }
    }
}

Ajoutez-les dans Info.plist:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>
4
Vini App

En ce qui concerne les réseaux sociaux, il est préférable de vérifier plusieurs schémas. (Parce que le schéma 'fb' est obsolète pour le SDK IOS9 par exemple.):

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;
}

Bien sûr, Info.plist doit également contenir tous les schémas nécessaires:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>
1
Denis Kreshikhin

iOS 9 et mise à jour plus récente:

En raison de certains changements de sécurité Apple effectué à partir d'iOS 9, en plus de canOpenURL mentionné dans d'autres réponses, vous devez également ajouter un tableau LSApplicationQueriesSchemes avec des chaînes dans info.plist. Voir la capture d'écran pour un exemple en utilisant Twitter.

info.plist LSApplicationQueriesSchemes array

Si vous souhaitez ajouter Facebook, vous devez simplement ajouter un autre élément dans le tableau avec une valeur de chaîne "fb".

0
D. Pratt