Waitorit ทำให้การใช้สถานการณ์แอพ iOS ทั่วไปเป็นเรื่องง่าย:
การจัดการกับตรรกะประเภทนี้มักจะเกี่ยวข้องกับการบันทึกข้อมูลด้วยตนเองไปยัง UserDefaults และจะต้องได้รับการทำใหม่ตั้งแต่เริ่มต้นสำหรับแต่ละสถานการณ์
Waitorit ให้ API ที่ประกาศอย่างง่าย ๆ ช่วยให้คุณสามารถจัดการกับสถานการณ์ที่เป็นไปได้ส่วนใหญ่โดยไม่ต้องกังวลเกี่ยวกับการใช้งาน
ScenarioProtocol มีคุณสมบัติดังต่อไปนี้ซึ่งสามารถใช้เพื่อกำหนดเมื่อควรดำเนินการสถานการณ์:
protocol ScenarioProtocol {
// minimum number of scenario events needed to be trigerred before scenario can be executed
static var minEventsRequired : Int ? { get set }
// maximum number of scenario events which can be trigerred before scenario stops executing
static var maxEventsPermitted : Int ? { get set }
// maximum number of times that scenario can be executed
static var maxExecutionsPermitted : Int ? { get set }
// minimum time interval, after the first scenario event was trigerred, before the scenario can be executed
static var minSecondsSinceFirstEvent : TimeInterval ? { get set }
// minimum time interval, after the last scenario event was trigerred, before the scenario can be executed
static var minSecondsSinceLastEvent : TimeInterval ? { get set }
// minimum time interval before scenario can be executed again after previous execution
static var minSecondsBetweenExecutions : TimeInterval ? { get set }
// custom conditions closure
static var customConditions : ( ( ) -> Bool ) ? { get set }
} สถานการณ์เป็นโครงสร้างที่เรียบง่ายซึ่งใช้ฟังก์ชั่น config เดียว คุณใช้มันเพื่อกำหนดค่าค่าที่กำหนดเมื่อสถานการณ์ที่กำหนดจะดำเนินการ
คุณสามารถใช้งานบนโครงสร้างสถานการณ์โดยใช้วิธีการคงที่:
// increment scenario specific event counter
static func triggerEvent ( )
// try to execute a scenario (it counts as executed only if bool param passed into a block was `true`)
static func tryToExecute ( completion : @escaping ( Bool ) -> Void )
// reset scenario event and execution counters
static func reset ( )สมมติว่าคุณต้องการแสดงหน้าจอการสอนเพียงครั้งเดียว:
import WaitForIt
struct ShowTutorial : ScenarioProtocol {
static func config ( ) {
maxExecutionsPermitted = 1
}
}
// In ViewController.swift
func viewDidLoad ( ) {
super . viewDidLoad ( )
ShowTutorial . tryToExecute { didExecute in
if didExecute {
self . showTutorial ( )
}
}
} แค่ไหน! คุณไม่จำเป็นต้องจัดการกับ UserDefaults ด้วยตัวเองอีกต่อไป เพียงกำหนดค่าโครงสร้างที่มีเงื่อนไขการดำเนินการที่ถูกต้องและ LIB จะดูแลส่วนที่เหลือ เมื่อเงื่อนไขทั้งหมดสำหรับสถานการณ์ของคุณได้รับการเติมเต็มค่าบูลที่ส่งผ่านภายในบล็อก tryToExecute จะเป็น true
ลองสถานการณ์ที่ซับซ้อนขึ้นอีกหน่อย คุณต้องการขอให้ผู้ใช้ซื้อการสมัครสมาชิกหากเขาติดตั้งแอพอย่างน้อย 1 สัปดาห์ที่ผ่านมาและเปิดอย่างน้อย 5 ครั้ง คุณต้องการถามเขาทุกๆ 2 วัน แต่ไม่มีทั้งหมด 4 ครั้ง: ทั้งหมด:
import WaitForIt
struct AskToSubscribe : ScenarioProtocol {
static func config ( ) {
minEventsRequired = 5
minSecondsSinceFirstEvent = 604 800 // seconds in one week
maxExecutionsPermitted = 4
minSecondsBetweenExecutions = 172 800 // seconds in two days
}
}
// In AppDelegate.swift
func application ( _ application : UIApplication ,
didFinishLaunchingWithOptions launchOptions : [ UIApplicationLaunchOptionsKey : Any ] ? ) -> Bool {
AskToSubscribe . triggerEvent ( )
AskToSubscribe . tryToExecute { didExecute in
if didExecute {
self . askToSubscribe ( )
}
}
return true
}หากเงื่อนไขตามเวลาและการนับเหตุการณ์ไม่เพียงพอสำหรับสถานการณ์ของคุณคุณสามารถกำหนดเงื่อนไขการปิดที่กำหนดเองได้ จะได้รับการประเมินทุกครั้งที่คุณพยายามดำเนินการสถานการณ์:
struct ShowLowBrightnessAlertOnce : ScenarioProtocol {
static func config ( ) {
customConditions = {
return UIScreen . main . brightness < 0.3
}
maxExecutionsPermitted = 1
}
}เรื่องราวที่ซับซ้อนยิ่งขึ้นสามารถนำไปใช้งานได้หากคุณตัดสินใจที่จะผสมผสานเงื่อนไขจากโครงสร้างสถานการณ์มากกว่าหนึ่งโครงสร้าง แน่นอนว่าคุณสามารถกระจายตัวทริกเกอร์เหตุการณ์และการประหารชีวิตตลอดทั้งแอพพวกเขาไม่จำเป็นต้องอยู่ในไฟล์เดียวกัน
การใช้งานจะขึ้นอยู่กับ UserDefaults มาตรฐานมาตรฐานดังนั้นข้อมูลจะไม่คงอยู่หากแอปติดตั้งใหม่ ชื่อคีย์ UserDefaults ถูกสร้างขึ้นด้วยชื่อโครงสร้างดังนั้นการเปลี่ยนชื่อโครงสร้างจะรีเซ็ตข้อมูลทั้งหมด คุณยังสามารถรีเซ็ตข้อมูลที่คงอยู่โดยใช้วิธี reset()
ใน Cartfile ของคุณ:
github "pawurb/WaitForIt" ~> 2.0.0
ใน Podfile ของคุณ:
platform :ios , '10.0'
use_frameworks!
target 'TargetName' do
pod 'WaitForIt'
end Lib ใช้ในการผลิต แต่ก็ยังอยู่ในช่วงเริ่มต้นของการพัฒนา คำแนะนำเกี่ยวกับวิธีการปรับปรุงที่จะได้รับการต้อนรับ