Программно определять, установлено ли приложение на iPhone
Я нахожусь в такой ситуации, когда мне нужно отобразить кнопку "Открыть myApp" (если myApp установлена на устройстве) или "Загрузить myApp" (если myApp не установлена на устройстве) в приложении для iphone. Для этого мне нужно определить, установлено ли на устройстве приложение (с известным пользовательским URL). Как я могу это сделать? Заранее спасибо.
5 ответов
ОБНОВЛЕНО 8 января 2014 года - 3 вещи, которые вы можете сделать
Я действительно должен был сделать это для клиента снова. Они хотели, чтобы пользователи могли открыть свое второе приложение из основного приложения, если оно было установлено.
Это моя находка. Использовать canOpenURL
способ проверить, установлено ли приложение или / и затем использовать openURL
метод для
- Откройте приложение, установленное на устройстве iOS
- Отведите пользователей в магазин приложений, указав им ссылку на приложение / список приложений для разработчиков.
- Взять их на сайт вместо
Все примеры кода доступны для каждого сценария
//Find out if the application has been installed on the iOS device
- (BOOL)isMyAppInstalled {
return [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"nameOfMyApp:"]];
}
- (IBAction)openOrDownloadApp {
//This will return true if the app is installed on the iOS device
if ([self myAppIsInstalled]){
//Opens the application
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"nameOfMyApp:"]];
}
else { //App is not installed so do one of following:
//1. Take the user to the apple store so they can download the app
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/nameOfMyApp"]];
//OR
//2. Take the user to a list of applications from a developer
//or company exclude all punctuation and space characters.
//for example 'Pavan's Apps'
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/PavansApps"]];
//OR
//3. Take your users to a website instead, with maybe instructions/information
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.pavan.com/WhyTheHellDidTheAppNotOpen_what_now.html"]];
}
}
Выберите один вариант, я просто избаловал вас выбором. Выберите тот, который соответствует вашим требованиям. В моем случае мне пришлось использовать все три варианта в разных областях программы.
Если схема URL для вашего приложения "myapp:", то
BOOL myAppInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"myapp:"]];
(Требуется iOS 3.0.)
Чтобы проверить приложение установлено на устройстве или нет
1) В info.plist добавьте LSApplicationQueriesSchemes, как показано ниже
2) и в типах URL
3) Теперь, чтобы проверить приложение установлено или нет
- (IBAction)openAppPressed:(UIButton *)sender {
NSString *urlString = @"XYZAPP://";
NSURL *url = [NSURL URLWithString:urlString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itunes link for download app"]];
}
}
Вы можете добавить простой метатег в заголовке любой страницы, которая нуждается в этом сниффинге приложения.
Для получения дополнительной информации, перейдите сюда:
Для тех, кто использует canOpenURL, всегда безопасно перейти с этого на
openURL:options:completionHandler:
NSString *urlString = @"XYZAPP://";
NSURL *url = [NSURL URLWithString:urlString];
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
if (!success) {
[[UIApplication sharedApplication] openURL:appStoreUrl options:@{} completionHandler:nil];
}
}];
потому что это не требует, чтобы вы объявляли схему заранее.
canOpenURL
который устарел, уже имеет некоторые странные ограничения, потому что Twitter уже давно использовал его для обнаружения сотен приложений.