2010-08-18 21 views
33

Pracuję nad aplikacją na iPhone'a, która zainstaluje kilka aplikacji firm trzecich w przedsiębiorstwie. Mam informacje o identyfikatorach pakietów. Czy istnieje sposób sprawdzenia, czy aplikacja jest już zainstalowana, za pomocą niektórych funkcji API systemu? Obecnie aplikacja zostaje ponownie zainstalowana, zastępując bieżącą instalację. Muszę temu temu zapobiec. (Aplikacja AppStore firmy Apple wyłącza opcję instalacji, jeśli aplikacja jest już zainstalowana.)Jak sprawdzić programowo, czy aplikacja jest zainstalowana?

+2

możliwy duplikat [jak sprawdzić zainstalowaną aplikację w urządzeniu iPhone] (http://stackoverflow.com/questions/3243567/how-to-check-installed-application-in-iphone-device) –

+0

może to wiki pomoże Ty też: http://wiki.akosma.com/IPhone_URL_Schemes Problem z większością schematów adresów URL polega na tym, że nie możesz przekazać żadnych danych, jeśli nie masz identyfikatorów użytkowników aplikacji, którą nazywasz –

+0

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

Odpowiedz

57

Myślę, że nie jest to możliwe bezpośrednio, ale jeśli aplikacje rejestrują schematy uri, można to przetestować.

Schemat URI to na przykład fb:// w aplikacji Facebook. Możesz zarejestrować to w pliku info.plist swojej aplikacji. [UIApplication canOpenURL:url] powie Ci, czy dany adres URL zostanie otwarty, czy nie. Testowanie, czy otworzy się fb://, oznacza, że ​​jest zainstalowana aplikacja, która zarejestrowała fb:// - co jest dobrą wskazówką do aplikacji na Facebooku.

// 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

"ale jeśli aplikacje rejestrują schematy uri, możesz je przetestować": proszę wyjaśnić to nieco dalej? – attisof

31

Oto przykład, aby sprawdzić, czy aplikacja Facebook jest zainstalowany

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

Dla każdego, kto próbuje to zrobić z iOS 9/Swift 2:

Po pierwsze, trzeba " whitelist”URL poprzez dodanie następujących do pliku Info.plist (funkcja bezpieczeństwa - patrz Leo Natan's answer):

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

Po tym, można zapytać, czy aplikacja jest dostępna i ma zarejestrowaną schematu:

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

To zadziałało dla mnie, dzięki –

1

Jeśli chodzi o sieci społecznych, najlepiej jest sprawdzić kilka schematów. (Ponieważ scheme 'Fb' jest przestarzałe IOS9 SDK np.)

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

oczywiście Info.plist powinny również zawierać wszystkie niezbędne schematów:

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

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

Dodaj nich w Info.plist:

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fb</string> 
</array> 
Powiązane problemy