PureGym के अनौपचारिक Apple Wallet डेवलपर बनने की कहानी
(drobinin.com)- PureGym ऐप की धीमी उपयोगिता और जटिल एंट्री प्रक्रिया की असुविधा को दूर करने के लिए, इसे व्यक्तिगत रूप से Apple Wallet के लिए ऑप्टिमाइज़ किया गया
- मौजूदा QR कोड में हर बार ऐप खोलकर जानकारी लोड करनी पड़ती थी, और यह लगभग 47 सेकंड लेने वाला एक अप्रभावी एंट्री तरीका था
- विभिन्न reverse engineering, mitmproxy के उपयोग, PassKit framework आदि तकनीकी प्रक्रियाओं के जरिए ऑटो-रिन्यू होने वाला Wallet pass लागू किया गया
- इस प्रक्रिया में PIN code की सुरक्षा खामियां, API authentication संरचना, ब्रांच लोकेशन जानकारी आदि जैसी PureGym की आंतरिक कार्यप्रणाली, जो वेब पर उजागर थी, सामने आई
- अंततः सिर्फ 3 सेकंड में प्रवेश करने वाला user experience बनाया गया, और यह स्पष्ट किया गया कि यह केवल एक व्यक्तिगत प्रयोग है और आधिकारिक सेवा नहीं है
47 सेकंड: असुविधा की शुरुआत
- कार्यदिवस में सुबह 11:15 पर, PureGym के प्रवेश द्वार पर ऐप खोलने में 47 सेकंड लगे
- सिग्नल कमजोर था, और Wi‑Fi कनेक्शन, ऐप लॉन्च, कई push notifications, विशेष discount offers आदि को पार करने के बाद ही QR code दिखा
- असली QR code आने में बहुत समय लगता था, और दूसरे सदस्यों के सामने असहज महसूस होता था
- हफ्ते में 6 बार दोहराने पर हर सप्ताह 282 सेकंड खर्च होने वाला यह एक अप्रभावी अनुभव था
- Amazon Fresh जैसे frictionless अनुभव की तुलना में PureGym का entry UX काफी पीछे था
8 साल पुराने PIN का रहस्य
- लेखक 8-अंकों वाला PIN code पिछले 8 साल से वही इस्तेमाल कर रहा था
- यह PIN न कभी expire होता था, न बदला जाता था
- दूसरी ओर ऐप के भीतर का QR code हर 1 मिनट में नए मान से बदल जाता था
- वास्तविक सुरक्षा स्तर और असली implementation के बीच बड़ा विरोधाभास मौजूद था
- PIN तरीका बेहद लंबे समय तक बना रहता है, जबकि केवल QR code को सख्ती से सुरक्षित किया जाता है — यह एक तरह का "security theater" था
mitmproxy से PureGym को समझना
- शुरुआत में QR code का screenshot लेकर उसे Apple Wallet में इस्तेमाल करने की कोशिश की गई, लेकिन वह तुरंत काम नहीं किया
- PureGym का QR code dynamic तरीके से बनता था, लगभग 1 हफ्ते में expire होता था, लेकिन ऐप में हर 1 मिनट पर refresh होता था
- GitHub पर "PureGym" से जुड़े repos खोजकर API authentication structure का पता चला
- login के लिए इस्तेमाल होने वाला 8-अंकों का PIN, API password के रूप में भी वैसा ही इस्तेमाल हो रहा था
- Base64 में encoded basic auth जानकारी भी कमजोर सुरक्षा दिखाती थी
- ऐप ट्रैफिक का विश्लेषण करने के लिए mitmproxy जैसे proxy tools से requests intercept की गईं
- QR code की JSON structure में part1 (स्थिर id), part2 (timestamp), part3 (renewal salt) शामिल थे
- API refresh timing से लेकर expiry conditions तक सब कुछ बताता था
PassKit: Apple Wallet की क्षमता
- Apple Wallet pass कोई static card नहीं, बल्कि self-refresh, push notifications, location response आदि करने वाली mini app जैसी संरचना है
- PassKit implementation के लिए JSON spec, image resources, certificate signing, और real-time refresh के लिए web service की जरूरत होती है
- Apple Developer Portal से Pass Type ID और WWDR certificate जारी करवाना आवश्यक था
- certificate signing और management जटिल थे, लेकिन सफल होने पर असली डिवाइस पर बहुत smooth अनुभव मिला
Swift backend बनाना
- आमतौर पर Node.js इस्तेमाल किया जाता है, लेकिन लेखक ने Swift आधारित Vapor से सीधे PassKit web service लागू की
- जब pass को refresh की जरूरत होती, तो silent push के जरिए ऑटो अपडेट दिया जाता
- यूज़र को पता भी न चले, ऐसा स्वाभाविक pass refresh संभव हुआ
पूरे देश में PureGym लोकेशन ऑटोमेशन
- Apple Wallet pass निर्दिष्ट लोकेशन पर अपने-आप दिखाया जा सकता है
- PureGym की आधिकारिक साइट पर विस्तृत coordinates नहीं थे, लेकिन API से देशभर की ब्रांचों के coordinates की सूची मिली
- सभी ब्रांच coordinates को parse करके हर pass के लिए सबसे नज़दीकी ब्रांच तय की गई
- कमी: अगर PureGym किसी shopping center के भीतर हो, तो सिर्फ shopping के लिए जाने पर भी pass दिख जाता था
Apple Watch इंटीग्रेशन
- Apple Wallet pass बिना अलग काम के Apple Watch पर अपने-आप sync हो गया
- कलाई पर दो बार click करके scan करने और एंट्री तक पहुंचने में 3 सेकंड लगे, यानी बहुत बड़ी कमी
- 93% से अधिक समय की बचत हासिल हुई
आंकड़ों में बदलाव
- PureGym ऐप से पहले का एंट्री समय: 47 सेकंड
- Apple Wallet pass से एंट्री समय: 3 सेकंड
- एक हफ्ते में औसत बचत समय: 4.4 मिनट (सालाना 3.8 घंटे)
- आसपास के सदस्यों ने 23 बार पूछा, "क्या ऐसा कोई ऐप है?", और हर बार बताया गया कि यह अनौपचारिक है
- मांग होने के बावजूद copyright/service policy कारणों से इसे वितरित करने की कोई योजना नहीं है
बोनस: Home Assistant इंटीग्रेशन
- PureGym API के इनडोर occupancy endpoint के जरिए IoT dashboard पर मौजूदा gym crowding दिखाया गया
- data के आधार पर कम भीड़ वाले समय दोबारा जाने का फैसला संभव हुआ, जिससे workout efficiency और motivation में मदद मिली
इंजीनियरिंग की वास्तविकता और नैतिकता
- यह शुद्ध रूप से निजी असुविधा दूर करने का प्रयास था, लेकिन PureGym के भीतर यह ऐसा क्षेत्र था जिसमें कई सालों से सुधार नहीं हुआ था
- संगठन के बाहर बना prototype कभी-कभी आधिकारिक roadmap से भी तेज़ी से समस्या हल कर देता है
- आधिकारिक रूप से यह terms violation हो सकता है, और PureGym इसे कभी भी block कर सकता है
- इसे कभी automation/share नहीं किया गया; केवल निजी प्रयोग के लिए इस्तेमाल हुआ, और स्थिरता के लिए cache जैसे सिद्धांतों का पालन किया गया
अगले कदम और निष्कर्ष
- आगे चलकर "शर्मिंदगी push notification" जैसी विस्तार-आइडिया भी सुझाई जा सकती हैं
- व्यावहारिक उपयोगिता छोटी हो सकती है, लेकिन सालाना 3.8 घंटे की "अनावश्यक क्रियाओं" को ऑप्टिमाइज़ करने से संतोष मिला
- अगर PureGym इसे आधिकारिक रूप से लागू करे, तो और अधिक उपयोगकर्ताओं की सुविधा बढ़ सकती है
- यह "अनौपचारिक लेकिन प्रभावी अनुभव" बनाने का एक दर्ज उदाहरण बन गया
1 टिप्पणियां
Hacker News राय
जब मैं 3 महीने के लिए अमेरिका में था, तब मैंने PureGym जॉइन किया और एक PIN मिला, बाद में सदस्यता रद्द कर दी। फिर Chrome ने बताया कि मेरा PureGym PIN लीक हो गया है
2 साल बाद मैं फिर अमेरिका गया और मुझे वही PIN मिला, जो मुझे सुरक्षा के लिहाज़ से बहुत बड़ी समस्या लगी
PureGym ऐप और token भी दिलचस्प थे, और मैंने hydro massage chair activation system में भी एक security flaw पाया, वह किसी भी PIN को स्वीकार कर लेता था
उदाहरण के लिए, 87623103 जैसा PIN hash होकर 558B4C37F6E3FF9A5E1115C66CEF0703E3F2ADEE बनता है, और HaveIBeenPwned hash range में खोजने पर वास्तव में इसके कई leak records मिलते हैं
API access सीधे मिल जाता है क्या — इसका जवाब हाँ है, और ऐप व साइट इस्तेमाल करते समय मैं कभी rate limit से नहीं टकराया, failed attempts के मामले में यह काफ़ी उदार लगता है
पोस्ट में बताया गया scope वही है जिसे official app और GitHub के unofficial clients इस्तेमाल करते हैं
अतिरिक्त scopes होने की संभावना बहुत कम है। PureGym PHP Wrapper और PureGym Attendance Python भी देखे जा सकते हैं
“अगर हम यह feature बनाएँगे, तो इसकी ज़िम्मेदारी भी हमें ही लेनी होगी”
“सही बात है, तो इसे 2028 roadmap में डाल देते हैं” वाला मज़ाक भी बहुत आम है
करने के लिए मूल काम और wishlist पहले से इतनी लंबी होती है कि नए features आसानी से नहीं जुड़ते
मुझे लगता है PureGym अभी सबसे अच्छा यही कर सकता है कि इस ऐप बनाने वाले developer को कुछ हज़ार pounds और lifetime free membership दे दे
मैं Apple Wallet pass बनाना चाहता हूँ, लेकिन developer account setup और extra cost थोड़ी भारी लगती है
battery कम हो या power saving mode हो, तो यह पहुँचे ही नहीं — ऐसी संरचना battery usage कम से कम रखने के लिए बनाई गई है
ज़्यादा महत्वपूर्ण notifications में UI element ज़रूर दिखना चाहिए, इसलिए वे power saving की स्थिति से अलग होकर भी पहुँचती हैं