Feature flags ใน Android SDK
Pushwoosh.getInstance().featureFlags มอบ feature flags ที่กำหนดค่าไว้สำหรับแอปพลิเคชันใน Control Panel ให้กับแอป Android ของคุณ Pushwoosh จะประเมินกฎของ flag บนเซิร์ฟเวอร์สำหรับอุปกรณ์และผู้ใช้ปัจจุบัน แล้ว SDK จะส่งคืนผลลัพธ์ว่า flag เปิดอยู่สำหรับอุปกรณ์นี้หรือไม่ และใช้ค่าพร็อพเพอร์ตีใดบ้าง
ข้อกำหนดเบื้องต้น
Anchor link to- Pushwoosh Android SDK 6.16.0 ขึ้นไป ที่ผสานรวมตามที่อธิบายไว้ในคู่มือ Android SDK feature flags เป็นส่วนหนึ่งของไลบรารีหลัก
com.pushwoosh:pushwooshคุณจึงไม่ต้องเพิ่ม dependency อื่น จนกว่า SDK จะเริ่มต้นการทำงานgetจะส่งคืนnull - มี flag อย่างน้อยหนึ่งรายการที่สร้างไว้ใน Audience → Feature Flags คุณต้องใช้ Key ของ flag นั้น รวมถึงคีย์และประเภทของพร็อพเพอร์ตี ใช้คีย์ให้ตรงตามที่แสดงไว้ทุกประการ รวมถึงตัวพิมพ์เล็กและพิมพ์ใหญ่ ตัวอย่างเช่น
get("New_Checkout")จะไม่พบ flag ที่มีคีย์new_checkout
อ่าน flag
Anchor link toส่งค่าเริ่มต้นทุกครั้ง ค่านี้จะมีผลจนกว่า SDK จะได้รับ flag สำหรับอุปกรณ์ และมีผลทุกครั้งที่ flag ไม่มีอยู่ ถูกเก็บถาวร หรือแพ็กเกจไม่รวม feature flags
import com.pushwoosh.Pushwoosh
val flags = Pushwoosh.getInstance().featureFlags
val checkout = flags.get("new_checkout")if (checkout != null && checkout.isEnabled) { showNewCheckout( buttonColor = checkout.getString("button_color", "blue"), maxItems = checkout.getNumber("max_items", 3.0).toInt(), )} else { showOldCheckout()}หากต้องการตรวจสอบเพียงว่า flag เปิดอยู่หรือไม่ ให้ใช้ isEnabled:
val isNewCheckout = Pushwoosh.getInstance().featureFlags.isEnabled("new_checkout", false)ใน Java ให้เรียก Pushwoosh.getInstance().getFeatureFlags()
สิ่งที่ flag ส่งคืน
Anchor link toget(key) จะส่งคืนออบเจ็กต์ FeatureFlag หรือ null เมื่อ SDK ยังไม่มี flag สำหรับอุปกรณ์ หรือ flag ไม่อยู่ในคำตอบ flag ที่ถูกเก็บถาวรจะไม่อยู่ในคำตอบ get จะอ่านเฉพาะ flag ที่จัดเก็บไว้และไม่รอเครือข่ายเลย ออบเจ็กต์มีฟิลด์ดังนี้:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
key | String | คีย์ของ flag |
isEnabled | Boolean | flag เปิดอยู่สำหรับอุปกรณ์นี้หรือไม่ |
ruleId | String | กฎที่ตัดสินผลลัพธ์ เช่น r_1a2b3c4d เป็น default เมื่อไม่มีกฎใดตรงกับอุปกรณ์ และเป็นสตริงว่างเมื่อ flag ถูก kill |
อ่านค่าพร็อพเพอร์ตีด้วย getter ที่ตรงกับประเภทของพร็อพเพอร์ตี getter แต่ละตัวจะส่งคืนค่าเริ่มต้นของคุณเมื่อไม่มีพร็อพเพอร์ตีนั้น หรือพร็อพเพอร์ตีมีค่าเป็นประเภทอื่น เมื่อ flag ปิดอยู่ พร็อพเพอร์ตีจะมีค่าเริ่มต้นที่ตั้งไว้ใน Control Panel
| เมธอด | ส่งคืน |
|---|---|
getString(property, defaultValue) | ค่าของพร็อพเพอร์ตีประเภท String |
getNumber(property, defaultValue) | ค่าของพร็อพเพอร์ตีประเภท Number ในรูปแบบ Double |
getBool(property, defaultValue) | ค่าของพร็อพเพอร์ตีประเภท Boolean |
getJsonObject(property, defaultValue) | ค่าของพร็อพเพอร์ตีประเภท JSON ที่เก็บออบเจ็กต์ ในรูปแบบ JSONObject |
getJsonArray(property, defaultValue) | ค่าของพร็อพเพอร์ตีประเภท JSON ที่เก็บอาร์เรย์ ในรูปแบบ JSONArray |
isEnabled(key, defaultValue) จะส่งคืน defaultValue เมื่อ get(key) ส่งคืน null
ทำให้ flag เป็นปัจจุบันอยู่เสมอ
Anchor link toSDK จะจัดเก็บคำตอบล่าสุดไว้บนอุปกรณ์นานสูงสุด 24 ชั่วโมง flag ที่จัดเก็บไว้จะใช้ได้เฉพาะกับ User ID ที่ใช้ขอ flag เหล่านั้นเท่านั้น SDK จะรีเฟรช flag ในกรณีต่อไปนี้:
- เมื่อเซสชันเริ่มต้น กล่าวคือ เมื่อแอปขึ้นมาอยู่เบื้องหน้าเป็นครั้งแรก หรือหลังจากอยู่ในเบื้องหลังอย่างน้อย 30 นาที
- ทุกชั่วโมงขณะที่แอปอยู่เบื้องหน้า
- หลังจากอุปกรณ์ลงทะเบียนเป็นครั้งแรก
- ทันทีหลังจาก User ID เปลี่ยนด้วย
setUserIdflag ที่จัดเก็บไว้ของผู้ใช้ก่อนหน้าจะถูกทิ้ง ดังนั้นผู้ใช้ใหม่จะไม่เห็น flag เหล่านั้นเลย
หากต้องการตอบสนองต่อค่าใหม่ ให้ลงทะเบียน listener ซึ่งจะถูกเรียกหลังจากการรีเฟรชที่ทำให้ค่าของ flag ใดๆ เปลี่ยนไป:
import com.pushwoosh.featureflags.FeatureFlagsUpdateListener
private val flagsListener = FeatureFlagsUpdateListener { render() }
override fun onStart() { super.onStart() Pushwoosh.getInstance().featureFlags.addUpdateListener(flagsListener)}
override fun onStop() { Pushwoosh.getInstance().featureFlags.removeUpdateListener(flagsListener) super.onStop()}หากต้องการขอ flag ด้วยตัวเอง เช่น หลังจากการกระทำที่อาจทำให้ผู้ใช้ย้ายไปอยู่ใน Segment อื่น ให้เรียก refresh ขณะที่ flag ที่จัดเก็บไว้ยังใช้ได้ เมธอดนี้จะส่งคำขอได้สูงสุดหนึ่งครั้งต่อ 5 นาที และภายในช่วงเวลานั้นจะตอบกลับด้วย flag ที่จัดเก็บไว้ callback จะทำงานบนเธรดหลัก:
Pushwoosh.getInstance().featureFlags.refresh { result -> if (!result.isSuccess) { val status = result.exception?.httpStatus // the stored flags, or your defaults, stay in effect } render()}เมื่อล้มเหลว result.exception จะเป็น FeatureFlagsException โดย httpStatus ของออบเจ็กต์นี้จะเป็น 0 เมื่อคำขอไม่ได้รับการตอบกลับ HTTP และเป็น 200 เมื่อเซิร์ฟเวอร์ตอบกลับแล้วแต่ไม่สามารถใช้คำตอบนั้นได้
หาก Pushwoosh ไม่สามารถจับคู่ Segment ของอุปกรณ์ได้ทันเวลา ระบบจะส่งคืนคำตอบบางส่วน SDK จะไม่จัดเก็บคำตอบนี้ และการรีเฟรชครั้งถัดไปจะนำคำตอบฉบับสมบูรณ์มาให้
เมื่อ flag ถูก kill ใน Control Panel อุปกรณ์จะได้รับ flag นั้นในสถานะปิดพร้อมค่าพร็อพเพอร์ตีเริ่มต้นในการรีเฟรชครั้งถัดไป เมื่อ SDK ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ ก็จะใช้ flag ที่จัดเก็บไว้ต่อไปจนกว่าจะมีอายุครบ 24 ชั่วโมง และหลังจากนั้นจะใช้ค่าเริ่มต้นของคุณ
บันทึก impression
Anchor link toimpression จะแจ้ง Pushwoosh ว่าผู้ใช้เข้าถึงโค้ดที่ flag ควบคุมจริง เพื่อให้คุณเปรียบเทียบผู้ใช้ที่ได้รับฟีเจอร์กับผู้ที่ไม่ได้รับได้ เรียก logImpression(key) ในขณะที่ผู้ใช้เห็นฟีเจอร์หรือเวอร์ชันเก่าของฟีเจอร์ ทั้งในสาขาที่เปิดและสาขาที่ปิด เพราะผู้ใช้ที่ flag ปิดอยู่คือกลุ่มเปรียบเทียบของคุณ:
val flags = Pushwoosh.getInstance().featureFlagsval isOn = flags.isEnabled("new_checkout", false)flags.logImpression("new_checkout")if (isOn) { showNewCheckout()} else { showOldCheckout()}SDK จะส่ง Event PW_FeatureFlagImpression พร้อมแอตทริบิวต์ต่อไปนี้:
| แอตทริบิวต์ | ประเภท | ค่า |
|---|---|---|
flag_key | string | คีย์ของ flag |
rule_id | string | กฎที่ตัดสินผลลัพธ์ เช่นเดียวกับใน ruleId |
enabled | boolean | flag เปิดอยู่หรือไม่ |
คุณไม่จำเป็นต้องสร้าง Event ไว้ล่วงหน้า เพราะ Pushwoosh จะเพิ่ม PW_FeatureFlagImpression พร้อมแอตทริบิวต์เหล่านี้ลงใน Audience → Events เมื่อ impression แรกมาถึง SDK จะส่ง impression หนึ่งครั้งต่อ flag กฎ และสถานะในหนึ่งเซสชัน และจะไม่ส่งอะไรเลยเมื่อไม่มี flag สำหรับคีย์นั้น
impression ยังช่วยให้นักการตลาดสร้าง Segment ของผู้ใช้ที่เข้าถึงฟีเจอร์ได้ด้วย นั่นคือสถานะ เห็นฟีเจอร์ (30 วัน) ของเงื่อนไข feature flag
ข้อมูลอ้างอิงเมธอด
Anchor link toPushwoosh.getInstance().featureFlags มีเมธอดดังนี้:
| เมธอด | คำอธิบาย |
|---|---|
get(key) | ส่งคืน FeatureFlag สำหรับคีย์ หรือ null อ่านเฉพาะ flag ที่จัดเก็บไว้ |
isEnabled(key, defaultValue) | ส่งคืนว่า flag เปิดอยู่หรือไม่ หรือ defaultValue เมื่อไม่มี flag |
refresh(callback) | ขอ flag โดยจำกัดไว้ที่หนึ่งครั้งต่อ 5 นาทีขณะที่ flag ที่จัดเก็บไว้ยังใช้ได้ callback จะได้รับ Result ที่มี FeatureFlagsException เมื่อล้มเหลว และ callback อาจเป็น null ได้ |
addUpdateListener(listener) | เรียก listener หลังจากการรีเฟรชทุกครั้งที่ทำให้ค่าของ flag เปลี่ยนไป |
removeUpdateListener(listener) | ลบ listener ที่เพิ่มไว้ด้วย addUpdateListener |
logImpression(key) | ส่ง Event PW_FeatureFlagImpression สำหรับกฎและสถานะปัจจุบันของ flag |