ios系统判断设备上是否有安装某app的两个方法

iOS 9 以上的系统判断设备上是否有安装某app的两个方法:(主要是通过canOpenURL来打判断app是否存在
方法一:
  步骤一: 获取iOS设备上所有已经安装的app
 -(void)getAllApp
{
    Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
    NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
    NSArray *allApplications = [workspace performSelector:@selector(allApplications)];//这样就能获取到手机中安装的所有App
    NSLog(@"设备上安装的所有app:%@",allApplications);
}
打印出来的结果’:
2017-01-17 15:16:27.562 TRCloundDocumnet[751:209420] 设备上安装的所有app:(
    "<LSApplicationProxy: 0x12e563310> com.apple.Passbook <file:///Applications/Passbook.app>",
    "<LSApplicationProxy: 0x12e563bb0> com.apple.GameController <file:///Applications/GameController.app>",
    "<LSApplicationProxy: 0x12e564230> com.apple.managedconfiguration.MDMRemoteAlertService <file:///Applications/MDMRemoteAlertService.app>",
    "<LSApplicationProxy: 0x12e5646f0> com.apple.MailCompositionService <file:///Applications/MailCompositionService.app>",
    "<LSApplicationProxy: 0x12e564bd0> com.apple.calculator <file:///Applications/Calculator.app>",
    "<LSApplicationProxy: 0x12e5651f0> com.apple.SharedWebCredentialViewService <file:///Applications/SharedWebCredentialViewService.app>",
    "<LSApplicationProxy: 0x12e5656f0> com.apple.SafariViewService <file:///Applications/SafariViewService.app>",
    "<LSApplicationProxy: 0x12e565c40> com.apple.ios.StoreKitUIService <file:///Applications/StoreKitUIService.app>",
    "<LSApplicationProxy: 0x12e566150> com.apple.MobileStore <file:///Applications/MobileStore.app>",
    "<LSApplicationProxy: 0x12e566bc0> com.apple.tips <file:///Applications/Tips.app>",

   "<LSApplicationProxy: 0x12e586400> com.kingsoft.www.office.wpsoffice <file:///private/var/containers/Bundle/Application/135D6955-A45F-4A3E-971A-B601757E96A7/wpsoffice.app>",
    "<LSApplicationProxy: 0x12e586c60> com.tencent.mqq <file:///private/var/containers/Bundle/Application/AD66793A-7E19-4F50-93EB-05FA736E5D78/QQ.app>",
    "<LSApplicationProxy: 0x12e587530> jack.LQPhotoPickerDemo <file:///private/var/containers/Bundle/Application/4C433042-7208-4E33-8544-AAAB6716E4F7/LQPhotoPickerDemo.app>"
步骤二:
判断iOS设备上是否有安装某个app,判断依据是根据app 的Bundle Id。
从打印结果看出,我们上一步所获取到的allApplications数组中的元素是一个LSApplicationProxy类型的,我们要把这个转换成字符串, 这个字符串中不只包含了App的bundle ID,还包含了安装的路径,因为这个路径不唯一不确定,我们判断是否安装了某个App只需判断这个字符串中的bundle ID,所有我们还要对字符串做处理。前提是要知道你要判断的这个app的Bundle ID 是什么
-(void)isInstallLDApp:(NSArray *)allAPP

    NSInteger zlConnt = 0;
    for (NSString *appStr in allAPP) {
          NSString *app = [NSString stringWithFormat:@"%@",appStr];//转换成字符串
         NSRange range = [app  rangeOfString:@"LdWBrowserIPhone"];//是否包含这个bundle ID
           if (range.length > 1)
        {
            zlConnt ++;
            }
    }
       if (zlConnt >= 1) {
    NSLog(@"已安装天锐绿盾");
    }else{
        NSLog(@"没有安装天瑞绿盾");
    }
}
方法一的优点:   完美解决iOS9的canopenurl 白名单的限制  ,缺点: 遍历的过程中可能会消耗性能, App Store审核可能会被拒,前提是要知道你要判断的这个app的Bundle ID 是什么

方法二:
步骤一:首先要知道你要判断的这款app的UrlSchemes 是什么
备注: 
1,获取app的 urlschemes  的方法 

把相应的 app 的 ipa 安装文件下载下来,把文件 .ipa 的后缀改成 .zip,然后解压,打开 Payload/xxx.app/Info.plist 这个文件,找到 URL types 下的 URL Schemes 下的数组对应的值就是这个 app 的 URL Scheme 了 
2,简单验证一个 URL Scheme 是否正确的方法:
 在真机设备(此设备要安装了待验证的 app)里面打开 Safari,然后在地址栏中键入该应用的 URL Scheme,后加 ://,比如 Weico 的,在地址栏中键入 weico:// ,然后点击确定,如果能正常调用出 Weico,即代表这个 URL Scheme 正确可用
步骤二:  对于系统iOS 9来说,把需要检测的UrlScheme添加到白名单即可,添加方法:info.plist 增加LSApplicationQueriesSchemes (array类型),把要检测的app的UrlScheme加进去。

步骤三: 在代码中调用Application 的canopenUrl 的方法判断设备时候有对应的应用 程序,返回YES表示已安装了该app 
代码如下:
  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"IOSDevApp://"]])
{  //说明此设备有安装app
}else{
//说明此设备没有安装app

方法二的优点: 效率高,代码量小  ,但前提是要先知道要判断的app 的UrlSchemes.


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值