3 分钟搭建 App Store 动态审核开关

我曾经在一篇文章中写过,但愿你们不要欺骗 App Store Review Team,可是近来的 Uber 审核事件,以及发生在我我的身上的 审核团队不对个人长篇详细辩解做正面回答,且无限期推迟个人 App 审核的事情发生后,我完全对这个团队没有了尊重,做为能力有限的我的开发者,我会选择经过必定的技术手段来欺骗审核团队。git

  • 审核团队身在北美,若是你的 app
  • 不须要支持北美地区,而且有地理位置获取权限,那么直接经过地理位置进行开关便可
  • 经过系统时区判断对方位置已经被证实不可行
  • 预判审核时间,进行硬编码的开关,可能会致使审核比较快的时候,项目已经上线,可是没法发布给用户(审核开关仍是打开的状态,用户得不到审核不容许经过的功能)

这里介绍一个为没有后台可用的 app 快速搭建动态审核开关的方法:

  1. 新建一个 public 的 GitHub Repo,仓库里面有没有东西都无所谓,重点在于你能够经过新建、删除仓库的方式,来远程控制一个开关:即这个仓库的地址(好比 www.github.com/yourName/repoName)是否能够访问
  2. 若是你的 app 不能访问 www.github.com 这个 host(好比断网),或者能够访问这个 host 而且你的仓库地址也能够成功访问,则说明正在审核,你能够关掉一些可能致使你的 app 被拒的功能;若是 GitHub 能够访问,可是你的仓库不能访问,说明你已经在审核经过以后删掉了这个仓库,则用户手里的 app 能够解锁那些特定的功能(www.github.com 目前没有被墙,可是 www.gist.github.com 被墙,因此才用新建仓库而不是新建 gist 的方式)
  3. 由于 app 可能还会更新,不能由于你下一个版本的 app 正在审核,就把以前版本的 app 里面的功能禁用,因此你新建的仓库须要最好能够和版本号创建一个映射,好比一个叫 happy 的 app,如今上传了 0.0.1 版本的构建,那么仓库名能够是 happy001,下一个版本用 happy002 这个名字创建仓库。
  4. 每次都须要用户访问 github 才能够解锁正常功能,不是一个很好的解决方式,能够预估一个相对宽松的审核时间,好比预估 10 天后 app 必定是能够经过审核的,那么能够硬编码一下,时间过了 10 天以后,就不用动态审核的机制,直接解锁那些可能致使被拒的功能。
  5. 上面介绍的方法,能不用就不用,能少用就少用,还需自行评估风险哦~

下面使用 Swift + Alamofire 提供一份代码示例

import UIKit
import Alamofire

class Cheater {

    // 审核开关自动配置
    class func autoConfig() {
        Alamofire.request("www.github.com/yourName/repoName")
            .validate().responseData { response in
            switch response.result {
            case .success:
                print("repo exist")
                setIsOff(0)
            case .failure(let error):
                print(error)
                setIsOff(1)
            }
        }
    }

    class func setIsOff(_ value:Int) {
        if value == 1 {
            print("已经过审核")
        }else {
            print("未经过审核")
        }
        UserDefaults.standard.set(value, forKey: "wbdswitch")
    }

    class func isOff() -> Bool {
        if dateIsAfter(20171115) {
            return true
        }
        let num = UserDefaults.standard.integer(forKey: "wbdswitch")
        return (num == 1)
    }
}

fileprivate func dateIsAfter(_ dateNum: Int) -> Bool {
    let formatter = DateFormatter()
    formatter.dateFormat = "YYYYMMdd"
    formatter.timeZone = TimeZone(abbreviation: "CHN")
    if let current = Int(formatter.string(from: Date())), current >= dateNum {
        return true
    }else {
        return false
    }
}复制代码

上面这份代码,实现了利用 www.github.com/yourName/repoName 这个地址进行开关的功能,而且在日期晚于 2017年11月15日时,会直接解锁功能。你能够把可能致使 App 被拒的功能放在以下代码块里:github

if Cheater.isOff() {
    print("审核已经经过")
}复制代码

并经过 bash

Cheater.autoConfig()复制代码

来进行开关的配置,能够放在 AppDelegate 或者其余 selector 里面。app

相关文章
相关标签/搜索