2013-06-21 6 views
6

मैं एक iPhone और मैक ओएस एक्स आवेदन है, जो आप ताला और निकटता के माध्यम से अपने मैक अनलॉक करने के लिए अनुमति देता है पर काम कर रहा हूँ में iPhone विज्ञापन। इसका मतलब है कि अगर आप सिग्नल शक्ति निर्धारित सीमा के नीचे हैं या कनेक्शन खो जाता है तो यह मैक को लॉक कर देगा।CoreBluetooth - backgrund मोड

मैं BTLE के लिए सेब CoreBluetooth ढांचे के साथ काम कर रहा हूँ, यदि कोई सहायक उपकरण और एक केंद्रीय रूप में मैक के रूप में iPhone का उपयोग कर। अब तक सब ठीक है। यह भी बहुत अच्छा है लेकिन जब मैं आईफोन पर पृष्ठभूमि में ऐप भेजता हूं तो विज्ञापन बदलना प्रतीत होता है। आईफोन अभी भी विज्ञापित करता है लेकिन ऐप में उपयोग की जाने वाली सेवा प्रोफ़ाइल और विशेषताओं के बिना। हालांकि यह कोई समस्या नहीं है जब आईफोन अभी भी मैक की सीमा में है, क्योंकि यह अभी भी जुड़ा हुआ है और विशेषताओं का उपयोग केंद्र में नहीं किया जाता है, यह आईफोन को सीमा से बाहर ले जाने के बाद एक समस्या बन जाती है। जैसा कि मैक लॉक करता है और आईफोन को फिर से कनेक्ट करने की खोज शुरू करता है और सफल होने पर अनलॉक करता है।

लेकिन इस खोज मैं करने के लिए निर्दिष्ट सेवा प्रोफ़ाइल और विशेषताओं का उपयोग केवल अपने एप्लिकेशन चलाने वाले उपकरण भी अनलॉक करने के लिए एक की पहचान करने के लिए मिलता है।

मैं एक सेवा प्रोफ़ाइल के बिना की खोज और उसके UUID है, जो मैं बचाया, जब मैं लॉक करने और अनलॉक करने के लिए इस iPhone का उपयोग शुरू कर के माध्यम से सही उपकरण की पहचान करके एक समाधान की कोशिश की। यह कामकाज एक छोटे से दायरे में भी काम करता है, क्योंकि जब मैं आईफोन पर ब्लूटूथ बंद करता हूं और इसे फिर से चालू करता हूं, तो यह एक अन्य यूयूआईडी प्राप्त करता है। एक बाधा है जिसके साथ मैं रह सकता हूं, लेकिन यह कुछ घंटों के बाद यूयूआईडी को भी बदलता है और फिर अनलॉकिंग काम नहीं करता है।

हो सकता है कि कोई पहले से ही है कि जैसे ऐप्लिकेशन पर काम किया और जानते हैं कि कैसे इस तरह के एक समस्या को ठीक करने? या आप एक स्थिर मूल्य जानते हैं जिसका उपयोग मैं डिवाइस की पहचान के लिए कर सकता हूं?

उत्तर

5

तो ऐसा लगता है, हमेशा की तरह की तरह, एप्पल कुछ अजीब और अद्वितीय बातें उनके ढांचे में चल रहा है। जब आप किसी आईओएस डिवाइस (जैसे आपका आईफोन) से विज्ञापन करते हैं, तो विज्ञापन के लिए दो "स्टोरेज एरिया" होते हैं - एक सामान्य उपकरण जो स्कैनिंग करने वाला कोई भी उपकरण देख सकता है, और एक "अतिप्रवाह" जिसे केवल देखा जा सकता है आईओएस डिवाइस जो विशेष रूप से इसके लिए स्कैनिंग कर रहे हैं। जब आपका ऐप पृष्ठभूमि में विज्ञापन करता है, तो आपके द्वारा विज्ञापित की जाने वाली सभी सेवाएं यूयूआईडी दुर्भाग्य से इस ओवरफ्लो क्षेत्र में जाती हैं, इसलिए ऐसा लगता है कि केवल अन्य आईओएस डिवाइस इसे देख सकते हैं - और आपका मैक नहीं।

किसी भी सेवा सार्वभौमिक एकमात्र पहचान (UUIDs) CBAdvertisementDataServiceUUIDsKey कुंजी मूल्य में निहित है कि में फिट नहीं आवंटित स्थान एक विशेष "अतिप्रवाह" क्षेत्र में शामिल कर रहे हैं;: CBPeripheralManager docs से वे हो सकते हैं केवल आईओएस डिवाइस द्वारा खोजा जा सकता है जो उनके लिए स्पष्ट रूप से स्कैनिंग कर रहा है। जबकि अपने अनुप्रयोग पृष्ठभूमि में है, स्थानीय नाम विज्ञापित नहीं है और सभी सेवा UUIDs अतिप्रवाह क्षेत्र में रखा जाता है।

संबंधित मुद्दे