美文网首页防作弊维度
iOS 检测本机是否安装了某 App

iOS 检测本机是否安装了某 App

作者: 黑羽肃霜 | 来源:发表于2018-10-20 17:18 被阅读506次

    前言

    iOS中,检测安装了某种 App 的文章有很多。这里只介绍方法,和一些实际用的技巧。

    综述

    实际上有两种东西可以用来检测 APP 是否安装:

    • bundle ID —— 包名,是每个应用的唯一识别码(换言之,这个值是一定会有的)
    • URL Scheme —— 供APP 之间跳转(打开应用)使用,需要在下面的配置中去手动添加(换言之,如果我没有配置他,他也没有默认值,实际上我是无法通过外部应用打开的)

    Bundle ID

    • 缺点:方法一消耗一定的性能(手机安装APP比较多的话),APP 审核必备拒
    • 优点:跳过了ios9.0canOpenURL这个API使用限制

    一些安卓的应用,通过动态下发的方式,获取到每个游戏的package ID,检测是否安装。
    在iOS中实际上是用到了OC Runtime中的方法去实现。因为一定会被拒,这里就不引用代码了

    URL Scheme

    • 必须要提前知道打开APP的列表,也就是白名单,并配置到工程的 info.plist中去。
    • 无法动态更新列表(每次新增都需要去更改这个列表)

    配置的方法:

    • source code 的方式打开工程的 info.plist, 找到(如果没有就添加)LSApplicationQueriesSchemes ,加入对应的 URL Scheme

      <key>LSApplicationQueriesSchemes</key>
        <array>
            <string>wechat</string>
            <string>weixin</string>
            <string>twitter</string>
        </array>
      
    • 假设我们要检测微信是否已安装,那么通过下面这段代码(swift为例). 务必在 string的末尾加上://

      func detectInstalled(URLString: String?) -> URL? {
        if let URLString = URLString, let exsistURL = URL(string: URLString), UIApplication.shared.canOpenURL(exsistURL) {
            return exsistURL
        } else {
            return nil
        }
      }
      
      detectInstalled(URLString: "weixin://")
      

    碰到的问题

    有一种情况,团队发布了 N 款 App,这时候我需要写一个工具 APP 去检测哪些发布的包是否安装。鉴于上文提到的,URL Scheme并不是一个App 上架时候的必备项,那怎么办呢,我们是不是就没有可以参考的依据了?

    如果是下面这种情况,应该还有得救:

    如果你之前发布的 App,对接过需要提供 URL Scheme 的第三方平台,那么可以使用这个URL Scheme作为检测或打开的依据。

    举个例子

    说具体一些,假设我对结果微信或 Facebook,在对接平台的时候,这些 平台一定会提供一个唯一识别本 AppID 用来作识别。
    因为当你实现了:

    MyApp --> 微信/Facebook --> 跳回 MyApp

    这个步骤,他一定是需要知道你的 URL Scheme,不然他怎么知道跳回到哪一个 App 呢?

    工程中的截图

    可以看到,图中涂掉的部分,就是第三方平台提供并让我们配置的 URL Scheme

    经过实测发现,这些 URL Scheme确实可以用于打开/检测是否可以打开 对应的 App

    相关文章

      网友评论

        本文标题:iOS 检测本机是否安装了某 App

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