Подтвердить что ты не робот

Как проверить программно, если приложение установлено?

Я разрабатываю приложение для iPhone, которое будет устанавливать несколько сторонних приложений на предприятии. У меня есть информация о идентификаторах пакета. Есть ли способ проверить, установлено ли приложение, используя некоторые системные API? В настоящее время приложение снова устанавливается, перезаписывая текущую установку. Мне нужно как-то предотвратить это. (Приложение Apple AppStore отключает параметр установки, если приложение уже установлено.)

4b9b3361

Ответ 1

Я думаю, что это невозможно напрямую, но если приложения регистрируют схемы uri, вы можете проверить это.

Схема URI, например, fb:// для приложения facebook. Вы можете зарегистрировать это в info.plist вашего приложения. [UIApplication canOpenURL:url] расскажет вам, откроется или не откроется определенный URL-адрес. Таким образом, если будет открыто fb://, будет указано, что установлено приложение, которое зарегистрировало fb:// - это хороший совет для приложения 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"]];
}

Ответ 2

Вот пример, чтобы проверить, установлено ли приложение facebook

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

Ответ 3

Для тех, кто пытается это сделать с помощью iOS 9/Swift 2:

Во-первых, вам нужно будет "переустановить" URL-адрес, добавив следующее в ваш файл Info.plist (функция безопасности - см. ответ Leo Natan)

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

После этого вы можете узнать, доступно ли приложение и имеет ли зарегистрированная схема:

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

Ответ 4

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

Добавьте их в Info.plist:

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

Ответ 5

Когда речь идет о социальных сетях, лучше всего проверить несколько схем. (Поскольку схема "fb" устарела для SDK IOS9, например.):

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

Конечно, Info.plist также должен содержать все необходимые схемы:

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