iOS SDK में फ़ीचर फ़्लैग
Pushwoosh.configure.featureFlags आपके iOS ऐप को वे फ़ीचर फ़्लैग देता है जो कंट्रोल पैनल में एप्लिकेशन के लिए कॉन्फ़िगर किए गए हैं। Pushwoosh वर्तमान डिवाइस और उपयोगकर्ता के लिए सर्वर पर फ़्लैग नियमों का मूल्यांकन करता है, और SDK परिणाम लौटाता है: क्या इस डिवाइस के लिए फ़्लैग चालू है और कौन-से प्रॉपर्टी मान लागू होते हैं।
पूर्वापेक्षाएँ
Anchor link to- Pushwoosh iOS SDK 7.2.10 या उसके बाद का संस्करण, जिसे iOS SDK का अवलोकन में बताए अनुसार इंटीग्रेट किया गया हो। फ़ीचर फ़्लैग आवश्यक
PushwooshFrameworkऔरPushwooshCoreमॉड्यूल में शामिल हैं, इसलिए आपको कोई अन्य मॉड्यूल जोड़ने की ज़रूरत नहीं है। वे स्वयं iOS ऐप में काम करते हैं। ऐप एक्सटेंशन, जैसे Notification Service Extension, कभी फ़्लैग का अनुरोध नहीं करते। - Audience → Feature Flags में बनाया गया कम से कम एक फ़्लैग। आपको उसकी Key और उसकी प्रॉपर्टी की कुंजियाँ और प्रकार चाहिए। कुंजियों का उपयोग ठीक वैसे ही करें जैसे वे वहाँ दिखाई देती हैं, अक्षरों के केस सहित। उदाहरण के लिए,
get("New_Checkout")कोnew_checkoutकुंजी वाला फ़्लैग नहीं मिलता। - यदि ऐप SDK अनुरोध किसी रिवर्स प्रॉक्सी के माध्यम से भेजता है, तो उसका URL
json/1.3/पर समाप्त होना चाहिए। अन्यथा SDK फ़्लैग का अनुरोध नहीं करता, और हर फ़्लैग आपके डिफ़ॉल्ट मान पर लौट आता है।
फ़्लैग पढ़ें
Anchor link toहमेशा एक डिफ़ॉल्ट मान पास करें। यह तब तक लागू होता है जब तक SDK के पास डिवाइस के लिए फ़्लैग नहीं होते, और तब भी जब फ़्लैग मौजूद नहीं है, आर्काइव किया गया है, या प्लान में फ़ीचर फ़्लैग शामिल नहीं हैं।
import PushwooshFramework
let flags = Pushwoosh.configure.featureFlags
if let checkout = flags.get("new_checkout"), checkout.isEnabled { showNewCheckout( buttonColor: checkout.string(forProperty: "button_color", default: "blue") ?? "blue", maxItems: Int(checkout.number(forProperty: "max_items", default: 3)) )} else { showOldCheckout()}केवल यह जाँचने के लिए कि फ़्लैग चालू है या नहीं, isEnabled का उपयोग करें:
let isNewCheckout = Pushwoosh.configure.featureFlags.isEnabled("new_checkout", default: false)Objective-C में [PushwooshConfig featureFlags] कॉल करें।
फ़्लैग क्या लौटाता है
Anchor link toget(_:) एक PWFeatureFlag ऑब्जेक्ट लौटाता है, या nil तब लौटाता है जब SDK के पास अभी डिवाइस के लिए फ़्लैग नहीं हैं या फ़्लैग उत्तर में नहीं है। आर्काइव किया गया फ़्लैग उत्तर में नहीं होता। get केवल संग्रहीत फ़्लैग पढ़ता है और कभी नेटवर्क की प्रतीक्षा नहीं करता। ऑब्जेक्ट में ये प्रॉपर्टी होती हैं:
| प्रॉपर्टी | प्रकार | विवरण |
|---|---|---|
key | String | फ़्लैग कुंजी। |
isEnabled | Bool | क्या इस डिवाइस के लिए फ़्लैग चालू है। |
ruleId | String | वह नियम जिसने परिणाम तय किया, उदाहरण के लिए r_1a2b3c4d। जब कोई नियम डिवाइस से मेल नहीं खाता तो default, और जब फ़्लैग किल (kill) किया गया हो तो खाली स्ट्रिंग। |
प्रॉपर्टी के प्रकार से मेल खाने वाले मेथड से प्रॉपर्टी मान पढ़ें। जब फ़्लैग बंद होता है, तो प्रॉपर्टी में कंट्रोल पैनल में सेट किए गए डिफ़ॉल्ट मान होते हैं।
| मेथड | लौटाता है |
|---|---|
string(forProperty:default:) | String प्रॉपर्टी का मान, या आपका डिफ़ॉल्ट मान। |
number(forProperty:default:) | Number प्रॉपर्टी का मान Double के रूप में, या आपका डिफ़ॉल्ट मान। |
bool(forProperty:default:) | Boolean प्रॉपर्टी का मान, या आपका डिफ़ॉल्ट मान। |
jsonObject(forProperty:) | ऑब्जेक्ट रखने वाली JSON प्रॉपर्टी का मान, डिक्शनरी के रूप में, या nil। |
jsonArray(forProperty:) | ऐरे रखने वाली JSON प्रॉपर्टी का मान, या nil। |
जब प्रॉपर्टी मौजूद नहीं होती या उसमें किसी अन्य प्रकार का मान होता है, तो हर मेथड आपका डिफ़ॉल्ट मान लौटाता है, और JSON मेथड nil लौटाते हैं।
जब get(_:) nil लौटाता है, तो isEnabled(_:default:) डिफ़ॉल्ट मान लौटाता है।
फ़्लैग को अप-टू-डेट रखें
Anchor link toSDK अंतिम उत्तर को डिवाइस पर अधिकतम 24 घंटे तक संग्रहीत करता है। संग्रहीत फ़्लैग केवल उसी User ID और ऐप के उसी Application Code के लिए मान्य होते हैं जिनके लिए उनका अनुरोध किया गया था। SDK उन्हें रीफ़्रेश करता है:
- जब कोई सत्र शुरू होता है, यानी जब ऐप पहली बार सक्रिय होता है या बैकग्राउंड में कम से कम 30 मिनट रहने के बाद;
- जब तक ऐप फ़ोरग्राउंड में है, हर घंटे;
- डिवाइस के पुश नोटिफिकेशन के लिए रजिस्टर होने के बाद, यदि पिछला अनुरोध रजिस्ट्रेशन से पहले भेजा गया था;
setUserIdसे User ID बदलने के ठीक बाद। पिछले उपयोगकर्ता के संग्रहीत फ़्लैग हटा दिए जाते हैं, इसलिए नया उपयोगकर्ता उन्हें कभी नहीं देखता।
नए मानों पर प्रतिक्रिया देने के लिए, PWFeatureFlagsUpdateListener अपनाने वाला एक listener जोड़ें। किसी फ़्लैग को बदलने वाले रीफ़्रेश के बाद उसका featureFlagsDidUpdate() मुख्य थ्रेड पर कॉल किया जाता है। SDK listener को कमज़ोर (weak) रेफ़रेंस से रखता है। अपने listener का एक मज़बूत (strong) रेफ़रेंस रखें, नहीं तो वह रिलीज़ हो जाएगा और कभी कॉल नहीं होगा:
final class CheckoutViewController: UIViewController, PWFeatureFlagsUpdateListener { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) Pushwoosh.configure.featureFlags.addUpdateListener(self) }
override func viewWillDisappear(_ animated: Bool) { Pushwoosh.configure.featureFlags.removeUpdateListener(self) super.viewWillDisappear(animated) }
func featureFlagsDidUpdate() { render() }}फ़्लैग का अनुरोध स्वयं करने के लिए, उदाहरण के लिए किसी ऐसी कार्रवाई के बाद जो उपयोगकर्ता को किसी अलग सेगमेंट में ले जा सकती है, refresh(completion:) कॉल करें। जब तक संग्रहीत फ़्लैग मान्य हैं, यह हर 5 मिनट में अधिकतम एक अनुरोध भेजता है और उस अवधि के भीतर संग्रहीत फ़्लैग से उत्तर देता है। completion मुख्य थ्रेड पर चलता है:
Pushwoosh.configure.featureFlags.refresh { error in if let error = error as NSError? { let status = error.code // the stored flags, or your defaults, stay in effect } render()}विफलता पर, error का डोमेन PWFeatureFlagsErrorDomain होता है, और उसका code HTTP स्टेटस होता है। जब अनुरोध को कोई HTTP उत्तर नहीं मिला या वह भेजा नहीं गया, तो कोड 0 होता है, और जब सर्वर ने उत्तर दिया लेकिन उत्तर का उपयोग नहीं किया जा सका, तो 200 होता है।
5 मिनट की सीमा के बिना रीफ़्रेश का परीक्षण करने के लिए, Info.plist में Boolean कुंजी Pushwoosh_FEATURE_FLAGS_DISABLE_THROTTLE को YES पर सेट करें।
यदि Pushwoosh समय पर डिवाइस के सेगमेंट का मिलान नहीं कर पाता, तो वह आंशिक उत्तर लौटाता है। SDK इसे डिवाइस पर संग्रहीत नहीं करता, और अगला रीफ़्रेश पूरा उत्तर लाता है।
जब कंट्रोल पैनल में किसी फ़्लैग को किल (kill) किया जाता है, तो डिवाइस को अगले रीफ़्रेश पर वह डिफ़ॉल्ट प्रॉपर्टी मानों के साथ बंद मिलता है। जब SDK सर्वर तक नहीं पहुँच पाता, तो वह संग्रहीत फ़्लैग का उपयोग तब तक जारी रखता है जब तक वे 24 घंटे पुराने न हो जाएँ, और उसके बाद आपके डिफ़ॉल्ट मानों का।
इम्प्रेशन लॉग करें
Anchor link toइम्प्रेशन Pushwoosh को बताता है कि उपयोगकर्ता वास्तव में उस कोड तक पहुँचा जिसे फ़्लैग नियंत्रित करता है, ताकि आप फ़ीचर पाने वाले उपयोगकर्ताओं की तुलना उनसे कर सकें जिन्हें फ़ीचर नहीं मिला। logImpression(_:) को उसी क्षण कॉल करें जब उपयोगकर्ता फ़ीचर या उसका पुराना संस्करण देखता है, चालू और बंद दोनों ब्रांच के लिए, क्योंकि फ़्लैग बंद वाले उपयोगकर्ता आपका तुलना समूह हैं:
let flags = Pushwoosh.configure.featureFlagslet isOn = flags.isEnabled("new_checkout", default: false)flags.logImpression("new_checkout")if isOn { showNewCheckout()} else { showOldCheckout()}SDK इन एट्रिब्यूट के साथ PW_FeatureFlagImpression इवेंट भेजता है:
| एट्रिब्यूट | प्रकार | मान |
|---|---|---|
flag_key | string | फ़्लैग कुंजी। |
rule_id | string | वह नियम जिसने परिणाम तय किया, जैसा ruleId में है। |
enabled | boolean | क्या फ़्लैग चालू था। |
आपको इवेंट पहले से बनाने की ज़रूरत नहीं है, क्योंकि पहला इम्प्रेशन आने पर Pushwoosh इन एट्रिब्यूट के साथ PW_FeatureFlagImpression को Audience → Events में जोड़ देता है। SDK एक सत्र में हर फ़्लैग, नियम और स्थिति के लिए एक इम्प्रेशन भेजता है, और जब कुंजी के लिए कोई फ़्लैग नहीं होता तो कुछ नहीं भेजता। यदि भेजना विफल हो जाता है, तो फ़्लैग के लिए अगली logImpression कॉल उसे फिर से भेजती है।
इम्प्रेशन मार्केटर्स को उन उपयोगकर्ताओं का सेगमेंट बनाने की सुविधा भी देते हैं जो फ़ीचर तक पहुँचे: फ़ीचर फ़्लैग शर्त की फ़ीचर देखा (30 दिन) स्थिति।
मेथड संदर्भ
Anchor link toPushwoosh.configure.featureFlags में ये मेथड हैं:
| मेथड | विवरण |
|---|---|
get(_:) | कुंजी के लिए PWFeatureFlag या nil लौटाता है। केवल संग्रहीत फ़्लैग पढ़ता है। |
isEnabled(_:default:) | लौटाता है कि फ़्लैग चालू है या नहीं, या फ़्लैग न होने पर डिफ़ॉल्ट मान। |
refresh(completion:) | फ़्लैग का अनुरोध करता है, जब तक संग्रहीत फ़्लैग मान्य हैं तब तक हर 5 मिनट में एक बार तक सीमित। completion को nil या PWFeatureFlagsErrorDomain में एक error मिलता है, और completion nil हो सकता है। |
addUpdateListener(_:) | किसी फ़्लैग को बदलने वाले हर रीफ़्रेश के बाद listener का featureFlagsDidUpdate() कॉल करता है। listener को कमज़ोर रेफ़रेंस से रखा जाता है। |
removeUpdateListener(_:) | addUpdateListener(_:) से जोड़े गए listener को हटाता है। |
logImpression(_:) | फ़्लैग के वर्तमान नियम और स्थिति के लिए PW_FeatureFlagImpression इवेंट भेजता है। |