2010-08-18 6 views
33

Je développe une application iPhone qui va installer 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, en utilisant certaines API système? Actuellement, l'application est à nouveau installée, écrasant l'installation actuelle. Je dois empêcher cela d'une certaine manière. (L'application AppStore d'Apple désactive l'option d'installation si l'application est déjà installée.)Comment vérifier par programme si une application est installée?

+2

duplication possible de [comment vérifier l'application installée dans le périphérique iphone] (http://stackoverflow.com/questions/3243567/how-to-check-installed-application-in-iphone-device) –

+0

peut-être que ce wiki aidera Vous aussi: http://wiki.akosma.com/IPhone_URL_Schemes Le problème avec la plupart des schémas d'url est que vous ne pouvez pas passer de données si vous n'avez pas les identifiants de l'application que vous appelez –

+0

http://stackoverflow.com/questions/32643522/fbsdksharedialog-of-facebook-sdk-is-not-working-on-ios9/39159507#39159507 – TharakaNirmana

Répondre

57

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 info.plist de votre application. [UIApplication canOpenURL:url] vous dira si une certaine url s'ouvrira ou ne s'ouvrira pas. Donc, le test si fb:// va ouvrir, indiquera qu'il ya une application installée qui 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"]]; 
} 
+0

"mais si les applications enregistrent des schémas d'uri vous pourriez tester pour cela": vous s'il vous plaît expliquer un peu plus loin? – attisof

31

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

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

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

D'abord, vous aurez besoin de ' whitelist l'URL en ajoutant ce qui suit à votre fichier Info.plist (une fonction de sécurité - voir Leo Natan's answer):

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

Après cela, vous pouvez demander si l'application est disponible et dispose d'un régime enregistré:

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

Cela a fonctionné pour moi, merci –

1

En ce qui concerne les réseaux sociaux, il est préférable de vérifier plusieurs régimes. (Parce que 'fb' système est obsolète pour IOS9 SDK 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 devrait aussi contenir tous les systèmes nécessaires:

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fbapi</string> 
    <string>fb-messenger-api</string> 
    <string>fbauth2</string> 
    <string>fbshareextension</string> 
</array> 
3

Swift 3.1, 3.2 Swift, 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) 
     } 
    } 
} 

Ajouter à ces Info.plist:

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