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