Как определить, установлено ли у пользователя приложение iOS?

Как определить, установлено ли у пользователя устройства iOS определенное приложение? Если я знаю имя приложения, я могу как-то использовать canOpenURL?

Ответ 1

Если приложение поддерживает настраиваемую схему URL-адресов, вы можете проверить UIApplication -canOpenURL:. Это скажет вам только, что приложение, способное открыть эту схему URL, доступно, не обязательно, какое приложение оно есть. Там нет общедоступного механизма для проверки того, какие другие приложения пользователь установил на своем устройстве.

Если вы управляете обоими приложениями, вы также можете использовать общий ключ или картон для обмена информацией между ними более подробно.

Ответ 2

Вы также можете проверить это:

BOOL temp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"yourAppURL://"]];
            
if(!temp)
{
    NSLog(@"INVALID URL"); //Or alert or anything you want to do here
}

Ответ 3

для быстрых пользователей

     let urlPath: String = "fb://www.facebook.com"
     let url: NSURL = NSURL(string: urlPath)!

    let isInstalled = UIApplication.sharedApplication().canOpenURL(url)
    if isInstalled {
        print("Installed")
    }else{
        print("Not installed")
    }

Ответ 4

Facebook использует этот https://github.com/facebook/facebook-ios-sdk/blob/master/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m внутренне, вы можете сделать то же самое

#define FBSDK_CANOPENURL_FACEBOOK @"fbauth2"

+ (BOOL)isFacebookAppInstalled
{
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    [FBSDKInternalUtility checkRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_FACEBOOK];
  });
  NSURLComponents *components = [[NSURLComponents alloc] init];
  components.scheme = FBSDK_CANOPENURL_FACEBOOK;
  components.path = @"/";
  return [[UIApplication sharedApplication]
          canOpenURL:components.URL];
}

Код в Swift 3

static func isFacebookAppInstalled() -> Bool {
  let schemes = ["fbauth2", "fbapi", "fb"]
  let schemeUrls = schemes.flatMap({ URL(string: "\($0)://") })

  return !schemeUrls.filter({ UIApplication.shared.canOpenURL($0) }).isEmpty
 }