检查用户连续使用应用程序的天数



我已经看到其他关于应用程序打开次数的问题。当用户连续使用应用程序31天时,我想发送本地通知。

这是NSUserDefaults发现方法,还是需要使用分析API?

使用UserDefault。在appdelegate的didFinishLaunch方法中检查天数

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

let kLastUsed = "LastUsedTime"
let kDaysCount = "DaysCount"
let currentDateTimeInterval = Int(Date().timeIntervalSinceReferenceDate)
var storedDaysCount:Int = UserDefaults.standard.integer(forKey: kDaysCount)
if storedDaysCount >= 31 {
//show pushNotifications
}
else {
let lastDateTimeInterval = UserDefaults.standard.integer(forKey: kLastUsed)

let diff = currentDateTimeInterval - lastDateTimeInterval
if diff > 86400 && diff < 172800 {
//next day. increase day count by one
storedDaysCount = storedDaysCount + 1
UserDefaults.standard.set(storedDaysCount, forKey: kDaysCount)
}
else if diff > 86400 {
//not next day. reset counter to 1
UserDefaults.standard.set(1, forKey: kDaysCount)
}

UserDefaults.standard.set(currentDateTimeInterval, forKey: kLastUsed)
}

return true
}

只是扩展了Hitesh令人敬畏的答案,使其更适合实时测试。

你不能像在真实设备上那样在模拟器设置中更改日期。如果你更改了真实设备上的日期,你可能会遇到一些苹果服务器Xcode同步问题,Xcode会要求你再次在开发者门户中注册你的设备。

*使用当前时间在实际设备上进行测试,因为UserDefaults需要实际设备的日期和存储。

要测试几分钟或几秒钟,只需将所有Ints更改为Doubles,并将条件更改为更精细的条件,如storedDaysCount>=0.0000000015。

let kLastUsed = "LastUsedTime"
let kDaysCount = "DaysCount"
let currentDateTimeInterval = Double(Date().timeIntervalSinceReferenceDate)
var storedDaysCount:Double = UserDefaults.standard.double(forKey: kDaysCount)
if storedDaysCount >= 0.000000000015 {
print("storedDaysCount = (storedDaysCount)")

相关内容

最新更新