pudo - no puedo verificar app en iphone
¿Cómo verificar programáticamente si una aplicación está instalada? (6)
Aquí hay un ejemplo para probar si la aplicación de Facebook está instalada
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
// Facebook app is installed
}
Estoy desarrollando una aplicación para 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 desactiva la opción de instalación si la aplicación ya está instalada).
Creo que esto no es posible directamente, pero si las aplicaciones registran esquemas de uri, podrías 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 prueba fb://
se abrirá, 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"]];
}
Cuando se trata de redes sociales, es mejor verificar múltiples esquemas. (Debido a que el 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;
}
Por supuesto, Info.plist 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>
Para cualquiera que intente hacer esto con iOS 9 / Swift 2:
En primer lugar, deberá ''incluir en la lista blanca'' la URL agregando lo siguiente a su archivo Info.plist
(una característica de seguridad - vea la respuesta de Leo Natan ):
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
Después de eso, puede preguntar si la aplicación está disponible y si tiene un esquema registrado:
guard UIApplication.sharedApplication().canOpenURL(NSURL(string: "fb://")!) else {
NSLog("No Facebook? You''re a better man than I am, Charlie Brown.")
return
}
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)
}
}
}
Añádalos en Info.plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
iOS 9 y una actualización más reciente:
Debido a algunos cambios de seguridad que Apple inició en iOS 9, además de canOpenURL mencionado en otras respuestas, también necesita agregar una matriz LSApplicationQueriesSchemes con cadenas en info.plist. Ver captura de pantalla para un ejemplo usando Twitter.
Si desea agregar Facebook, simplemente agregará otro elemento en la matriz con un valor de cadena de "fb".