【问题标题】:how to check whether application is installed or not in iOS device?如何检查iOS设备中是否安装了应用程序?
【发布时间】:2014-09-21 21:51:43
【问题描述】:

我正在做一个 iOS 应用程序。在那,我有一个 UITableView 模块。在那个 UITableView 中,我正在显示一些应用程序名称列表。这些名字来自我的服务器。这些是我公司的申请。所以,我不知道有多少应用程序来自服务器。用户单击 UITableViewCell 后,我需要检查该设备上是否已安装该应用程序。如果未安装,用户需要使用该应用的应用商店链接前往应用商店。我检查了一些教程。他们说,使用 url 方案我们可以做到这一点。但是,我没有这些 url 的 url 方案,因为这些应用程序来自服务器。另外,我尝试了以下方法

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms://itunes.com/apps/nameOfMyApp"]]; 
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"nameOfMyAppOrurl:"]];

但没有任何帮助。有没有人能想到这个问题,如果有,请提出宝贵的建议。

【问题讨论】:

标签: ios xcode


【解决方案1】:

您需要为列表中的每个应用程序提供一个App URL scheme,没有其他方法可以检查该应用程序是否已安装。

我猜你服务器的列表形式将是 JSON,类似于:

{
   "name" : "My Cool APP",
   "scheme" :"mycoolapp:",
   "itunes": "http:///...../"
}

然后只需执行以下操作:

    if ([[UIApplication sharedApplication] canOpenURL:scheme]) {
        [[UIApplication sharedApplication]openURL:scheme];
    }
    else {
        [[UIApplication sharedApplication]openURL:itunesURL];
    }

【讨论】:

    【解决方案2】:

    自定义 url 方案是解决此问题的首选方法。对于需要检查可用性的每个应用程序,您必须了解所有 url 方案(这意味着所有应用程序都应该配置一个)。对于您的特定情况,您需要后端支持,即服务器应该为每个应用程序提供一个方案(服务器也应该被告知这些方案)。

    另一种选择是在钥匙串中使用共享数据,有一个answer here about sharing data between apps via keychain。您应该为此想出一个解决方案,但只要您可以在已知的应用程序组之间共享数据,您就可以在该技术之上实现一些东西。请注意,第二种解决方案要求您拥有所有应用(或能够影响它们的配置)。

    【讨论】:

      【解决方案3】:

      您可以在服务器上为应用程序注册自定义 URL 方案: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW50

      如果您的应用有方案,您将能够使用canOpenURL 方法。

      【讨论】:

        【解决方案4】:

        您还可以将 URL Schemes 分配给您的公司应用程序,并使用以下代码检查它们是否已安装:

        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"myAppURLScheme://"]])
        {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myAppURLScheme://"]];
        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"App not installed on Device"  delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Open link", nil];
            [alert show];
        }
        

        也可以查看URL Scheme Tutorial

        【讨论】:

        • 嗨,认识,感谢您的快速回复。我有一个疑问,如何将应用名称传递给应用的 plist 以创建自定义 url 方案?
        • @Anilkumar,在 Xcode 中打开您的代码,转到目标。在下面的“信息”选项卡中,设置 URL 类型,提供包标识符和所需的 url 方案。还要检查我在答案中给出的 URL 方案教程链接
        • bundle id 没问题,但是如何在运行时为 url 方案添加 appnameinfo.plist,因为我只是从服务器运行时获取应用程序名称,希望你能理解我的问题
        • @Anilkumar,您不需要添加 url 方案@运行时。我要说的是使用上面的代码来检查是否支持 urlscheme 打开应用程序。比如说,您正在获取“testAppOne://” URL Scheme,这也是您公司的一个应用程序。您只需要使用上述代码检查该特定应用程序是否安装在设备上。我不明白您为什么要求设置动态 URL 方案。仅供参考,您不能设置动态 URL 方案。
        • 执行此[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myAppURLScheme://"]]; 后是否会打开该应用程序。我希望应用不应该被打开
        猜你喜欢
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 2012-04-02
        相关资源
        最近更新 更多