Программно определять, установлено ли приложение на iPhone

Я нахожусь в такой ситуации, когда мне нужно отобразить кнопку "Открыть myApp" (если myApp установлена ​​на устройстве) или "Загрузить myApp" (если myApp не установлена ​​на устройстве) в приложении для iphone. Для этого мне нужно определить, установлено ли на устройстве приложение (с известным пользовательским URL). Как я могу это сделать? Заранее спасибо.

5 ответов

Решение

ОБНОВЛЕНО 8 января 2014 года - 3 вещи, которые вы можете сделать

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

Это моя находка. Использовать canOpenURL способ проверить, установлено ли приложение или / и затем использовать openURL метод для

  1. Откройте приложение, установленное на устройстве iOS
  2. Отведите пользователей в магазин приложений, указав им ссылку на приложение / список приложений для разработчиков.
  3. Взять их на сайт вместо

Все примеры кода доступны для каждого сценария

//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"]];
    }
}

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

Для получения дополнительной информации, перейдите сюда:

http://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html

Для тех, кто использует 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 уже давно использовал его для обнаружения сотен приложений.

Другие вопросы по тегам