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:(
    " com.apple.Passbook ",
    " com.apple.GameController ",
    " com.apple.managedconfiguration.MDMRemoteAlertService ",
    " com.apple.MailCompositionService ",
    " com.apple.calculator ",
    " com.apple.SharedWebCredentialViewService ",
    " com.apple.SafariViewService ",
    " com.apple.ios.StoreKitUIService ",
    " com.apple.MobileStore ",
    " com.apple.tips ",

   " com.kingsoft.www.office.wpsoffice ",
    " com.tencent.mqq ",
    " jack.LQPhotoPickerDemo "
步骤二:
判断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.


你可能感兴趣的:(ios系统判断设备上是否有安装某app的两个方法)