2010-08-18 14 views
33

Estoy desarrollando una aplicación de iPhone que instalará pocas aplicaciones de terceros en una empresa. Tengo la información sobre los ID del paquete. ¿Hay alguna manera de verificar si la aplicación ya está instalada, utilizando algunas API del sistema? Actualmente, la aplicación se instala de nuevo, sobrescribiendo la instalación actual. Necesito evitar esto de alguna forma. (La aplicación AppStore de Apple deshabilita la opción de instalación si la aplicación ya está instalada.)¿Cómo verificar programáticamente si hay una aplicación instalada?

+2

posible duplicado de [cómo comprobar la aplicación instalada en el dispositivo iphone] (http://stackoverflow.com/questions/3243567/how-to-check-installed-application-in-iphone-device) –

+0

tal vez este wiki ayude usted también: http://wiki.akosma.com/IPhone_URL_Schemes El problema con la mayoría de los esquemas de url es que no puede pasar datos si no tiene los id de la aplicación a la que llama –

+0

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

Respuesta

57

Creo que esto no es posible directamente, pero si las aplicaciones registran los esquemas de uri, puede probarlo.

Un esquema de URI es por ejemplo fb:// para la aplicación de Facebook. Puede registrar eso en la info.plist de su aplicación. [UIApplication canOpenURL:url] le dirá si una determinada URL se abrirá o no. Por lo tanto, si se abre fb://, se indicará que hay una aplicación instalada que registró fb://, que es una buena pista para la aplicación de 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

"pero si las aplicaciones registran esquemas de uri, podría probar eso": podría ¿por favor explica esto un poco más? – attisof

31

He aquí un ejemplo para comprobar si la aplicación de Facebook se instala

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

para cualquiera que trate de hacer esto con iOS 9/Swift 2:

En primer lugar, usted tendrá que ' lista blanca' de la URL añadiendo lo siguiente a su archivo Info.plist (una característica de seguridad - véase Leo Natan's answer):

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

Después de eso, se puede preguntar si la aplicación está disponible y tiene un sistema registrado:

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

funcionó para mí, gracias –

1

Cuando se trata de redes sociales, lo mejor es comprobar múltiples esquemas. (Debido esquema 'FB' es obsoleto para IOS9 SDK, por ejemplo.):

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

De Info.plist supuesto, también debe contener todos los esquemas necesarios:

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

Añadir estos en Info.plist:

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