美文网首页
iOS 检测设备上安装的应用

iOS 检测设备上安装的应用

作者: Jack_King_ | 来源:发表于2020-04-14 14:49 被阅读0次

    使用场景: 产品需要分析用户设备已安装的竞品 APP,所以在 APP 中以某种时机获得竞品 APP 是否已安装,并将结果上报!

    使用 runtime 机制获取设备已安装 APP 信息的方式不可取
    原因:
    1、读取设备上应用信息需要调用系统的私有方法,苹果明令禁止
    2、只有低版本或者越狱设备才能获取到
    3、应用若过多,获取过程会阻塞线程

    正确姿势

    需要预先统得知所要统计的所有竞品

    一、获取要判断 APP 的 scheme 地址

    1. 获得要分析的APP .ipa 包(推荐使用工具:爱思助手)
    2. 修改后缀名为 .zip , 解压 - Playload - .app文件 - 右击“显示包内容 ”
    3. 找到 info.plisth 文件并打开
    4. 找到 URL types 项,选取对应的 scheme 前缀: “demo”
    info.plist
    1. 拼接“://”为:“demo://”

    二、判断 APP 是否已安装

    使用 UIApplication canOpenURL 方法判断

    NSURL *demoScheme = [NSURL URLWithString:@"demol://"];
    BOOL isInstall = [[UIApplication sharedApplication] canOpenURL:demoScheme];
    NSLog(@"demol app: %@", isInstall ? @"已安装" : @"未安装");
    

    打印结果:

     : -canOpenURL: failed for URL: "demol://" - error: "This app is not allowed to query for scheme demol"
     : demol app: 未安装
    

    三、调用 canOpenURL 失败

    原因: 苹果对 UIApplication canOpenUrl 进行了保护,对第三方 app scheme 试探性的进行访问做了限制,需要将访问的 scheme 添加至白名单;
    1、打开项目的 info.plist 配置文件
    2、添加第三方 APP scheme 至 LSApplicationQueriesSchemes item 下

    info.plist

    注:
    1、openURL 并没有做限制,可跳转任意设备已安装应用内
    2、旧版 xcode 编译运行在新 iOS 系统上,白名单只支持 50项

    四、重新执行 canOpenUrl 方法

    1、未安装 demo APP 执行 canOpenUrl 方法
    打印结果:

    demol app: 未安装
    

    2、安装 demo APP 之后重新执行 canOpenUrl 方法
    打印结果:

    demol app: 已安装
    

    缺点:每次增减竞品统计都依赖发版

    相关文章

      网友评论

          本文标题:iOS 检测设备上安装的应用

          本文链接:https://www.haomeiwen.com/subject/bxzzmhtx.html