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

相關文章
相關標籤/搜索