2013-12-18 8 views
5

के माध्यम से सूचना केंद्र सेवा मुझे पता है तुम iOS उपकरणों से स्मार्ट घड़ियों अवरोधन सूचनाएं जैसे उपकरणों के लिए इस सेवा का उपयोग कर सकते हैं। लेकिन क्या आप ओएस एक्स के माध्यम से मैक पर इन आईओएस नोटिफिकेशन प्राप्त कर सकते हैं?एप्पल ओएस एक्स

मैं अपने ओएस एक्स कार्यक्रम है कि आईओएस में प्राप्त होता है एक विशिष्ट सूचना प्रकार का पता लगाने के लिए सक्षम होना चाहता हूँ। मैंने अपने मैक पर एएनसीएस डिवाइस के लिए ब्राउज़ करने का प्रयास किया, लेकिन यह दिखाई नहीं दिया। मुझे पता है कि आप आईओएस उपकरणों के बीच ऐसा नहीं कर सकते हैं, इसलिए मैं सोच रहा था कि शायद आईओएस और ओएस एक्स के बीच यह सच था या नहीं? धन्यवाद!

उत्तर

9

यह निश्चित रूप से संभव है!

यहाँ आप क्या जरूरत है:

  1. कोई एप्लिकेशन अपने iOS डिवाइस जो CoreBluetooth आयात करता है और कुछ कस्टम UUID के साथ एक डमी सेवा को विज्ञापित करने CBPeripheralManager का उपयोग करता है पर (नहीं ANCS UUID, यह काम नहीं करेगा)। आपके मैक के लिए एएनसीएस सेवा को "देखने" के लिए यह डमी सेवा आवश्यक है। *
  2. IOBluetooth आयात करने वाले आपके मैक पर एक ऐप CBCentralManager ऑब्जेक्ट शुरू करता है, और स्कैन शुरू करता है। आप के रूप में तो यह कर सकते हैं:

    [self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:YOUR_CUSTOM_SERVICE_UUID]] options:@{CBCentralManagerScanOptionSolicitedServiceUUIDsKey:@[[CBUUID UUIDWithString:ANCS_SERVICE_UUID]]]; 
    

    आप अपने आप को CBCentralManager करने के लिए सेट अप एक प्रतिनिधि के रूप प्रतिनिधि कॉलबैक प्राप्त करने के लिए सुनिश्चित करें।

  3. अपने मैक didDiscoverPeripheral में अपने डिवाइस को पता चलता है है, यह करने के लिए कनेक्ट: [self.centralManager connectPeripheral:peripheral options:nil];

    1 बहुत महत्वपूर्ण यहाँ ध्यान देने योग्य बात यह है कि आप अगर आप इसे कनेक्ट करना चाहते हैं एक संपत्ति के लिए अपने परिधीय बनाए रखने की आवश्यकता है, अन्यथा इसे हटा दिया जाएगा। अधिक विस्तृत चर्चा के लिए this answer देखें। आगे इस बिंदु से

    [peripheral discoverServices:nil];

    (सभी कॉलबैक CBPeripheral के लिए कर रहे हैं:

  4. didConnectPeripheral में, आप अपने आप को स्थापित करने के लिए CBPeripheral आप कनेक्ट हैं के एक प्रतिनिधि के जरूरत है तो सेवाओं का पता चलने शुरू)

  5. didDiscoverServices में, आप उपलब्ध सेवाओं की एक सूची मिलना चाहिए।उन के माध्यम से के रूप में तो लूप और पता चलता है प्रत्येक सेवा की विशेषताओं:

    • ANCS अधिसूचना स्रोत:: UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD (लिख लेना पड़ा हुआ)
    • ANCS नियंत्रण

      for (CBService *service in peripheral.services) { 
          if ([service.UUID isEqual:[CBUUID UUIDWithString:YOUR_CUSTOM_SERVICE_UUID]]) { 
           NSLog(@"Found your Custom Service"); 
          } 
          if ([service.UUID isEqual:[CBUUID UUIDWithString:ANCS_UUID]]) { 
           NSLog(@"Found ANCS Service"); 
          } 
      
          [peripheral discoverCharacteristics:nil forService:service]; 
      } 
      
    • didDiscoverCharacteristicsForService में, आप 3 विशेषताओं देखने के लिए चाहते हैं प्वाइंट: यूयूआईडी 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9 (प्रतिक्रिया के साथ लिखने योग्य)

    • एएनसीएस डेटा स्रोत: यूयूआईडी 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB (नोटिफ़ाइबल)

    उन लिख लेना पड़ा हुआ विशेषताओं के लिए, अद्यतन के लिए उनकी सदस्यता ले:

    if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:ANCS_CHARACTERISTIC_UUID]]) { 
        [peripheral setNotifyValue:YES forCharacteristic:characteristic]; 
    } 
    
  6. आप अगर उन विशेषताओं को अधिसूचित करने शुरू कर दिया है कर रहे हैं, didUpdateNotificationStateForCharacteristic में एक if(characteristic.isNotifying) कर जाँच करना चाहते हैं।

  7. आप characteristic.value साथ didUpdateValueForCharacteristic में वास्तविक NSData अपडेट प्राप्त होंगे। यहां ध्यान देने योग्य महत्वपूर्ण बात यह है कि अधिसूचना स्रोत विशेषता द्वारा आपको अधिसूचना घटनाओं की जानकारी मिलेगी, लेकिन इसमें अधिक जानकारी नहीं होगी। यदि आप चाहते हैं कि आपका मैक ध्वनि बजाए या कुछ ह्यू रोशनी या प्रत्येक आईओएस अधिसूचना के लिए ऐसा कुछ फ्लैश करें, तो यह पर्याप्त होगा। हालांकि, वास्तविक अधिसूचना विवरण के लिए, इसे डेटा स्रोत विशेषता से आना होगा, लेकिन आपको नियंत्रण बिंदु विशेषता के लिए बहुत विशिष्ट कॉल करके उनके लिए अनुरोध करने की आवश्यकता है। यह वह जगह है जहां यह वास्तव में जटिल हो जाता है, और आप आधिकारिक ANCS Specification document में अधिक जानकारी प्राप्त करने में सक्षम होंगे।

  8. आप किसी शॉर्टकट या कैसे दूसरों को यह किया है पर एक नज़र चाहते हैं, बाहर इन Github रेपोस की जाँच करें:

    बस सावधान रहना होगा क्योंकि आप इनमें से कुछ कार्यान्वयन में बग पा सकते हैं, मुख्य रूप से एएनसीएस डेटा स्रोत द्वारा भेजे गए डेटा की प्रसंस्करण में (मुझे जी होना था और अपने स्वयं के त्रुटि हैंडलिंग के साथ रचनात्मक)।

*** कुछ लोगों का तर्क हो सकता है कि आप "Service Solicitation" उपयोग कर सकते हैं (चरण 2 में options पैरामीटर देखें) और/या एक डमी सेवा विज्ञापन के बिना किसी ऐप iOS डिवाइस पर चल रहे बिना ANCS बेनकाब करने के लिए है, लेकिन मैं हेवन इसके साथ इतना सफलता नहीं थी इसलिए शायद कुछ ऐसा है जो मुझे याद आ रही है।