ios系统判断设备上是否有安装某app

iOS 9 以上的系统判断设备上是否有安装某app的两个方法:(主要是通过canOpenURL来打判断app是否存在)
方法一:

1、首先要知道你要判断的这款app的UrlSchemes 是什么? 如图:
在这里插入图片描述
2、在自己的项目中添加白名单
在这里插入图片描述

3、 在代码中调用Application 的canopenUrl 的方法判断设备时候有对应的应用 程序,返回YES表示已安装了该app
代码如下:
// 判断有没有安装该app

-(BOOL)checkAPPIsExist:(NSString*)URLScheme{
    NSURL* url;
    if ([URLScheme containsString:@"://"]) {
        url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",URLScheme]];
    } else {
        url = [NSURL URLWithString:[NSString stringWithFormat:@"%@://",URLScheme]];
    }
    if ([[UIApplication sharedApplication] canOpenURL:url]){
        return YES;
    } else {
        return NO;
    }
}

这个方法首先要知道 app 的UrlSchemes.

方法二

1、 获取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);
}

2、判断iOS设备上是否有安装某个app,判断依据是根据app 的Bundle Id。我们上一步所获取到的allApplications数组中的元素是一个LSApplicationProxy类型的,我们要把这个转换成字符串, 这个字符串中不只包含了App的bundle ID,还包含了安装的路径,因为这个路径不唯一不确定,我们判断是否安装了某个App只需判断这个字符串中的bundle ID,所有我们还要对字符串做处理。前提是要知道你要判断的这个app的Bundle ID 是什么

-(void)isInstallLDApp:(NSArray *)allAPP
{ 
    NSInteger count = 0;
    for (NSString *appStr in allAPP) {
          NSString *app = [NSString stringWithFormat:@"%@",appStr];//转换成字符串
         NSRange range = [app  rangeOfString:@"LdWBrowserIPhone"];//是否包含这个bundle ID
           if (range.length > 1)
        {
            count ++;
            }
    }
    if (count >= 1) {
           NSLog(@"已安装");
    }else{
        NSLog(@"没有安装");
    }
}

这个方法完美解决添加白名单的限制 ,但是遍历的过程中可能会消耗性能, App Store审核可能会被拒,前提是要知道你要判断的这个app的Bundle ID 是什么

参考

猜你喜欢

转载自blog.csdn.net/u013983033/article/details/87856598