2013-10-01 12 views
8

की खोज iOS7 के तहत, प्राथमिक ANCS सेवा लगातार विज्ञापित किया जा करने के लिए होती है या यह सुलझा सेटिंग में सक्षम होना आवश्यक होता है/एक कस्टम CBPeripheralManager (एप्पल द्वारा निर्दिष्ट सेवा का उपयोग कर का उपयोग कर कार्यान्वित और विशेषता यूयूआईडीएस) एक संभावित अधिसूचना उपभोक्ता के लिए इसे सफलतापूर्वक खोजने और सदस्यता लेने के लिए?iOS 7 ANCS: प्राथमिक ANCS सेवा UUID

ऐप्पल प्रलेखन (CoreBluetooth Programming Guide, और ANCS Specification दोनों) इस पर किसी भी जानकारी की आश्चर्यजनक रूप से बेताब हैं। वे एक कस्टम कार्यान्वयन की आवश्यकता पर संकेत देते हैं, लेकिन यह हमारे हिस्से पर अनुमान है।

प्राथमिक एएनसीएस सेवा यूयूआईडी: 7905F431-B5CE-4E99-A40F-4B1E122D00D0 को देखते हुए, स्कैन करने से कोई हिट नहीं होती है। पूरे बीएलई स्पेक्ट्रम को स्कैनिंग, जैसा कि अपेक्षित है, अन्य बीएलई उपकरणों के लिए हिट पैदा करता है, लेकिन एक एएनसीएस डिवाइस नहीं।

संपादित करें 1:

, एक कस्टम CBPeripheralManager को परिभाषित करना और मैन्युअल रूप से उसके संबंधित लक्षण के साथ एप्पल द्वारा निर्दिष्ट ANCS सेवा जोड़ने विफल रहता है NSError साथ: नतीजतन Error Domain=CBErrorDomain Code=8 "The specified UUID is not allowed for this operation."

, ऐसा लगता है कि सेवा UUID है ऐप्पल द्वारा आरक्षित (जैसा कि यह होना चाहिए), और हम इसे इस तरह से सक्षम नहीं कर सकते हैं।

किसी भी अंतर्दृष्टि की सराहना की जाती है; हम इसके बारे में ऐप्पल तक पहुंच गए हैं, और जब हम उनसे सुनेंगे तो अपडेट हो जाएंगे।

कोड नीचे reproduces NSError ऊपर उल्लेख किया है:

// define the ANCS Characteristics 
CBUUID *notificationSourceUUID = [CBUUID UUIDWithString:@"9FBF120D-6301-42D9-8C58-25E699A21DBD"]; 
CBMutableCharacteristic *notificationSource = [[CBMutableCharacteristic alloc] initWithType:notificationSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired]; 
CBUUID *controlPointUUID = [CBUUID UUIDWithString:@"69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9"]; 
CBMutableCharacteristic *controlPoint = [[CBMutableCharacteristic alloc] initWithType:controlPointUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteEncryptionRequired]; 
CBUUID *dataSourceUUID = [CBUUID UUIDWithString:@"22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB"]; 
CBMutableCharacteristic *dataSource = [[CBMutableCharacteristic alloc] initWithType:dataSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired]; 

// define the ANCS Service 
CBUUID *ANCSUUID = [CBUUID UUIDWithString:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"]; 
CBMutableService *ANCS = [[CBMutableService alloc] initWithType:ANCSUUID primary:YES]; 
ANCS.characteristics = @[notificationSource, controlPoint, dataSource]; 

// define the Advertisement data 
NSMutableDictionary *advertisementData = [NSMutableDictionary dictionary]; 
[advertisementData setValue:@"CUSTOM_ANCS" forKey:CBAdvertisementDataLocalNameKey]; 
[advertisementData setValue:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0" forKey:CBAdvertisementDataServiceUUIDsKey]; 

// publish the ANCS service 
[self.peripheralManager addService:ANCS]; 

उत्तर

5

इस सवाल का एक संक्षिप्त जवाब के रूप में, अब मैवरिक्स बाहर है, यहां हम यही आ गए हैं।

दो आईओएस उपकरणों के बीच एएनसीएस विनिर्देश को लागू करने के हमारे प्रारंभिक प्रयास, एक परिधीय एक केंद्रीय के रूप में, असफल थे। कुछ समय बाद ऐप्पल ने हमें जवाब दिया (टोपी टिप उनके प्रचारकों को) और हमें बताया कि यह असंभव था।

CBPeripheralManager वर्ग और CoreBluetooth.framework पर OSX मावेरिक्स IOBluetooth.framework (गहरी साँस) में एम्बेडेड के लिए CBPeripheralManagerDelegate प्रोटोकॉल के अलावा के साथ

, अब हम BLE रेडियो एक OSX डिवाइस पर लागू करने और ANCS विज्ञापित करने के लिए उपयोग कर सकते हैं।

इस प्रकार, इस टुकड़ा पर OSX एक CBPeripheralManager के अंतर्गत आता है:

- (void) advertiseANCS 
{ 
    NSLog(@"%s", __FUNCTION__); 

    // define the ANCS Characteristics 
    CBUUID *notificationSourceUUID = [CBUUID UUIDWithString:@"9FBF120D-6301-42D9-8C58-25E699A21DBD"]; 
    CBMutableCharacteristic *notificationSource = [[CBMutableCharacteristic alloc] initWithType:notificationSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired]; 
    CBUUID *controlPointUUID = [CBUUID UUIDWithString:@"69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9"]; 
    CBMutableCharacteristic *controlPoint = [[CBMutableCharacteristic alloc] initWithType:controlPointUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteEncryptionRequired]; 
    CBUUID *dataSourceUUID = [CBUUID UUIDWithString:@"22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB"]; 
    CBMutableCharacteristic *dataSource = [[CBMutableCharacteristic alloc] initWithType:dataSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired]; 

    // define the ANCS Service 
    CBUUID *ANCSUUID = [CBUUID UUIDWithString:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"]; 
    CBMutableService *ANCS = [[CBMutableService alloc] initWithType:ANCSUUID primary:YES]; 
    ANCS.characteristics = @[notificationSource, controlPoint, dataSource]; 

    // define the Advertisement data 
    NSMutableDictionary *advertisementData = [NSMutableDictionary dictionary]; 
    [advertisementData setValue:@"ANCS" forKey:CBAdvertisementDataLocalNameKey]; 
    [advertisementData setValue:@[ANCSUUID] forKey:CBAdvertisementDataServiceUUIDsKey]; 

    // publish the ANCS service 
    [self.peripheralManager addService:ANCS]; 
    [self.peripheralManager startAdvertising:advertisementData]; 
} 

जबकि इस टुकड़ा एक iOS डिवाइस पर एक CBCentralManager पर अंतर्गत आता है:

- (void) discoverANCS 
{ 
    NSLog(@"%s", __FUNCTION__); 

    NSMutableArray *services = [NSMutableArray array]; 
    [services addObject:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"]; 

    NSMutableDictionary *options = [NSMutableDictionary dictionary]; 
    [options setValue:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; 

    [self.centralManager scanForPeripheralsWithServices:services options:options]; 
} 

IOS डिवाइस अब देखते हैं और कनेक्ट कर सकते हैं ओएसएक्स रेडियो, जो ऐप्पल दस्तावेज में विस्तृत रूप से एएनसीएस विनिर्देश लागू करता है।

<CBCentralManager: 0x14e23280> <CBPeripheral: 0x14d27b40 identifier = 7231B80F-874E-DB5F-2AF9-7F376911E2B7, Name = "ANCS", state = disconnected> { 
    kCBAdvDataChannel = 39; 
    kCBAdvDataIsConnectable = 1; 
    kCBAdvDataLocalName = ANCS; 
} -60 

मुबारक शिकार

+0

पर कुछ अतिरिक्त जानकारी जोड़ दी है, मुझे अभी भी त्रुटि संदेश मिल रहा है "मैक ऐप में" इस ऑपरेशन के लिए निर्दिष्ट यूयूआईडी की अनुमति नहीं है "। आप कैसे कनेक्ट करने में सक्षम थे? – thandasoru

2

खैर कारण यह है कि आप विज्ञापन डेटा शब्दकोश एक स्ट्रिंग के रूप में और नहीं एक CBUUID के रूप में के लिए UUID सेट कर रहे हैं, यह भी मुझे लगता है कि कुंजी लेता है सीबीयूयूआईडीएस की एक सरणी

इसलिए इस यह काम करना चाहिए:

NSDictionary *advertisementData = @{ 
             CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"]], 
             CBAdvertisementDataLocalNameKey:@"ANCS", 
             }; 

संपादित करें: ओह, हाँ मेरा बुरा! मैं यह उल्लेख करना भूल गया था कि यदि आप किसी अन्य आईओएस डिवाइस से इस एएनसीएस सेवा को खोजने की कोशिश कर रहे हैं तो आप इसे देखने में सक्षम नहीं होंगे, आईओएस 7 के तहत नहीं। किसी भी तरह ओएस स्वयं ही उस सेवा को आरक्षित कर रहा है और आपके द्वारा किए गए प्रदर्शन को प्रदर्शित नहीं करेगा। आप इसे अपने विज्ञापन डेटा पर देख रहे हैं। हालांकि, यदि आपके पास बाहरी डिवाइस है, जैसे गैर-आईओएस डिवाइस, या कंकड़ जैसी डिवाइस है तो यह काम करेगा। इस प्रकार आप एएनसीएस कार्यक्षमता का पर्दाफाश करते हैं लेकिन शेष कार्यान्वयन सेवा के उपभोक्ता तक है।

+0

जवाब देने के लिए समय निकालने के लिए धन्यवाद देखते हुए प्रकट होता है। ग्रेट कैच, प्रलेखन कुंजी के प्रकार को निर्दिष्ट नहीं करता है, लेकिन CBAdvertisementData स्पष्ट रूप से 'एक या अधिक सीबीयूयूआईडी ऑब्जेक्ट्स की एक सूची' – 0xFADE

+0

बताता है हालांकि यह एनएसईआरआरआर को नहीं हटाता है, क्योंकि विज्ञापन डेटा को ध्यान में रखा जाता है बाद में कॉल '[self.peripheral प्रबंधक प्रारंभ विज्ञापन:] '.. यह एएनसीएस यूयूआईडी के साथ' [self.peripheralManager addService:] 'असंभव प्रतीत होता है। – 0xFADE

+0

@ 0xFADED मैंने अपने उत्तर – Dan1one

2

इस ब्लॉग पोस्ट के अनुसार:

http://blog.punchthrough.com/post/63658238857/the-apple-notification-center-service-or-wtf-is

आप सेवा लुभाने वाली 'जोड़ी और iPhone पर किसी भी कोड लिखने के बिना ANCS का उपयोग करने के साथ विज्ञापन कर सकते हैं!

मैंने कोशिश नहीं की है, लेकिन जल्द ही।

0

मैं "कंकड़ की तरह" प्रोटोटाइप हार्डवेयर का उपयोग कर iPhone पर किसी भी कोड के बिना ANCS का उपयोग करें। इस प्रश्न पर उपरोक्त दस्तावेजों का उपयोग करना। वीडियो एक प्रकार का मजाक दिखाने के लिए है और एक मजाक के रूप में "क्षेत्र-व्यापी अधिसूचनाओं" की अवधारणा है :-) और सभी तकनीकी पर नहीं। लेकिन कुछ हद तक जानकारीपूर्ण हो सकता है।

http://www.youtube.com/watch?v=O-YWMl7IS-g

मैं अपने यूट्यूब से पैसे नहीं बनाते हैं BTW

मैं iOS के साथ सफल नहीं हुए हैं - आईओएस प्रयास।

मेरे परिधीय उपकरण एक डमी सेवा है, जो विज्ञापित है का उपयोग करता है:

1

ANCS आईओएस पर विज्ञापित नहीं है, मैं ANCS साथ एक लंबे समय कनेक्शन प्राप्त करने के लिए एक निम्नलिखित तरीके से इस्तेमाल किया। इस सेवा के साथ डिवाइस बनाने और कनेक्शन बनाने के लिए एक आईओएस एप्लिकेशन का उपयोग किया जाता है। आप अपना खुद का आवेदन लिख सकते हैं, या मुफ्त में से एक का उपयोग कर सकते हैं (जैसे लाइटब्लू उदाहरण के लिए)।

एक बार कनेक्शन स्थापित होने के बाद, परिधीय डिवाइस कनेक्टेड आईओएस डिवाइस पर मौजूद सभी सेवाओं को दर्शाता है। दूसरों के अलावा, उन तीनों ने एएनसीएस दस्तावेज में उल्लेख किया है।

यदि आपके लिए उनके पंजीकरण अधिसूचनाएं हैं, तो आपको एएनसीएस डेटा मिलेगा।

यदि आप बॉन्ड डिवाइस (आईओएस और परिधीय) हैं, तो एएनसीएस किसी भी समय कनेक्शन (पुनः) स्थापना की देखभाल करेगा, अगर इसे बॉन्ड किए गए डिवाइस का विज्ञापन किया जाता है।

+0

क्या आपका परिधीय आईओएस डिवाइस था? – Yazid

2

किसी को भी वर्तमान में एक समान प्रश्न Googling के लिए: CoreBluetooth के माध्यम से ANCS अब आईओएस 9. विशेष रूप में काम करने के लिए,

This functionality was removed from OS X and iOS.

Neither platform can be used to consume the ANCS service anymore using CoreBluetooth.

द्वारा https://forums.developer.apple.com/thread/24336

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