Я хочу запустить функцию/установить логическое значение после того, как пользователь открыл приложение в течение n-го раза (n - любое число, которое я хочу).
Аналогично, я хочу запустить функцию/установить логическое значение после n дней с момента первого запуска.
Я думал о создании основы для этого, но я не уверен, с чего начать. Существуют ли какие-либо существующие рамки /Cocoapods, которые это делают? Если нет, может кто-нибудь дать мне несколько советов/предложений о том, как я мог бы это сделать?
Я бы порекомендовал вам использовать UserDefaults
для отслеживания того, сколько раз пользователь запускал ваше приложение. Существует инфраструктура iRate, которая позволяет вам выбирать, сколько запуска приложений и/или дней, чтобы заставить пользователя оценивать ваше приложение. Чтобы отслеживать количество дней с момента установки и количество раз, которое было запущено, вы можете сделать что-то подобное
//FUNCTION для вызова из метода appDelegate didFinishLaunching
func trackUsage() {
let defaults = UserDefaults.standard
let installationDate = defaults.object(forKey: "installationDate") as? Date
if installationDate == nil { // this is the first launch of the app
defaults.set(Date(), forKey: "installationDate")
}
let usageCount = defaults.integer(forKey: "usageCount") ?? 0
defaults.set(usageCount + 1, forKey: "usageCount")
defaults.synchronize()
}
то перед вызовом функции вы можете:
if defaults.integer(forKey: "usageCount") ?? 0 > 10 {
// the app has been launched at least 10 times
}
Проще всего было бы использовать UserDefaults
. Установите его в viewDidLoad
вашего основного ViewController
.
func setNumberOfStarts(){
let defaults = UserDefaults.standard
//will return 0 if not set previously
var numberOfStarts: Int = defaults.integer(forKey: "starts")
numberOfStarts = numberOfStarts + 1
defaults.set(numberOfStarts, forKey: "starts")
}
Запросите его там, где это необходимо.
func getNumberOfStarts() -> Int{
let defaults = UserDefaults.standard
//will return 0 if not set previously
let numberOfStarts: Int = defaults.integer(forKey: "starts")
return numberOfStarts
}
Делайте с результатами по мере необходимости.
let MAXIMUM_STARTS: Int = 10
func startedEnough() -> Bool{
var enough = false
let defaults = UserDefaults.standard
let numberOfStarts: Int = defaults.integer(forKey: "starts")
if numberOfStarts > MAXIMUM_STARTS {
enough = true
}
return enough
}