2015-07-23 10 views
5

मैं एक आईओएस एप्लिकेशन बना रहा हूं जो ब्लूटूथ हेडसेट (बीएलई) से जुड़ता है।आईओएस ब्लूटूथ - जोड़ी अब पॉपअप

  • मैं खोज & अपने iPhone करने के लिए हेडसेट कनेक्ट
  • मैं अपने iPhone
  • मैं अपने आवेदन को खोलने के साथ डिवाइस को युग्मित, यह ब्लूटूथ डिवाइस
  • आवेदन मेरे डिवाइस पाता है, यह अनुरोध करता है की खोज करता है इससे जुड़ने के लिए।
  • आईओएस संदेश है कि उपयोगकर्ता पूछता बटन दबाने की पॉप अप होता है "जोड़ी अब" डिवाइस

के बाद से मैं पहले से ही अपने आवेदन उपयोग करने से पहले उपकरण युग्मित है से कनेक्ट करने के लिए, वहाँ किसी भी तरह से कनेक्ट करने के लिए है आवेदन के भीतर "जोड़ी अब" पॉपअप के बिना?

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

मैं अपने कोड थोड़ा बदल दिया है। जब मैं पहली बार उससे कनेक्ट होता हूं तो मैं अपने डिवाइस के यूयूआईडी को सहेजता हूं और जब मैं अपने डिवाइस को दोबारा जोड़ता हूं तो एप्लिकेशन को सहेजा गया यूयूआईडी मिल जाता है और "ज्ञात परिधीय" ढूंढने और इसे फिर से कनेक्ट करने का प्रयास करता है। कोड वास्तव में "ज्ञात परिधीय" पाता है लेकिन जब मैं इसे फिर से कनेक्ट करने का प्रयास करता हूं, तो यह फिर से जुड़ने के लिए कहता है। डिवाइस रीकनेक्ट होने पर "जोड़ी अब" पॉपअप से बचने का कोई तरीका है?

स्निपेट्स:

-(void) connectToPeripheral : (CBPeripheral*) peripheral { 
    [self.centralManager stopScan]; 
    self.peripheral = peripheral; 
    peripheral.delegate = self; 
    [self.centralManager connectPeripheral:peripheral options:nil]; 
    self.peripheral = peripheral; 
} 

-(void) searchForDevices { 
    // Scan for all available CoreBluetooth LE devices 
    if (self.centralManager == nil) { 
     CBCentralManager *centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; 
     self.centralManager = centralManager; 
    } 

    //check if previous peripheral exists 
    NSArray *knownPeripherals = nil; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString* knownPeripheralID = [defaults stringForKey:@"knownPeripheralID"]; 
    if (knownPeripheralID != nil) { 
     self.connectedPeripheralUUID = [[NSUUID alloc] initWithUUIDString:knownPeripheralID]; 
     knownPeripherals = [self.centralManager retrievePeripheralsWithIdentifiers:[NSArray arrayWithObjects:self.connectedPeripheralUUID, nil]]; 
    } 


    if (knownPeripherals != nil && [knownPeripherals count] > 0) { 
     NSLog(@"knownPeripherals Peripherals"); 
     CBPeripheral *foundPeripheral = [knownPeripherals objectAtIndex:0]; 
     [self connectToPeripheral:foundPeripheral]; 
    } else { 

     NSArray *connectedPeripherals = [self.centralManager retrieveConnectedPeripheralsWithServices:[NSArray arrayWithObjects:UUID_SERIAL_SERVICE_STR, nil]]; 
     NSLog(@"Connected Peripherals"); 

     if (connectedPeripherals != nil && [connectedPeripherals count] > 0) { 

     } else { 
      [self.centralManager scanForPeripheralsWithServices:nil options:nil]; 
     } 

    } 
} 
+0

आप कोड आप अपने आवेदन में उपयोग कर रहे हैं खोजने के लिए और डिवाइस से कनेक्ट करने दिखा सकते हैं? – Paulw11

+0

@ Paulw11 कृपया अभी जांचें – Panos

+0

मेरे पास ब्लूटूथ ऐप है लेकिन मैंने कभी भी इस जोड़े को पॉपअप नहीं देखा है? क्या आप अनजाने में एक चेतावनी फेंक रहे हैं? हो सकता है कि अगर आपने किसी उदाहरण या कुछ से कुछ कोड कॉपी किया है? – Braains

उत्तर

1

इस समस्या के कुछ शोध करने के बाद मुझे नहीं लगता कि यह कुछ ऐसा है आप के आसपास पाने के लिए सक्षम हो जाएगा है (जैसा कि मैंने जो किया जाना चाहिए कस्टम अलर्ट टिप्पणी की, जब तक यह है चेतावनी उत्पन्न करने वाले किसी भी कोड की तलाश करके ट्रैक करना आसान है!)। जो भी हेडसेट यह है कि आप कनेक्ट करने का प्रयास कर रहे हैं, एक सुरक्षित कनेक्शन मांग रहा है और CoreBluetooth इस चेतावनी को उत्पन्न कर रहा है। और जहां तक ​​मुझे पता है कि कोड में अलर्ट का उपभोग करने का कोई तरीका नहीं है।

ब्लूटूथ ( https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForSettingUpYourIOSDeviceAsAPeripheral/BestPracticesForSettingUpYourIOSDeviceAsAPeripheral.html#//apple_ref/doc/uid/TP40013257-CH5-SW7)

उपयोग के मामले पर निर्भर करता है पर सेब डॉक्स से

, आप एक सेवा एक या अधिक विशेषता जिसका मान सुरक्षित होने की जरूरत है है कि बेच देना चाहते हो सकता है। उदाहरण के लिए, कल्पना करें कि आप सोशल मीडिया प्रोफ़ाइल सेवा को वेंड करना चाहते हैं। यह सेवा में ऐसी विशेषताएं हो सकती हैं जिनके मान किसी सदस्य की प्रोफ़ाइल जानकारी, जैसे पहला नाम, अंतिम नाम और ईमेल पता दर्शाते हैं। संभावना से अधिक, आप केवल विश्वसनीय डिवाइसों को सदस्य का ईमेल पता पुनर्प्राप्त करने की अनुमति देना चाहते हैं।

आप यह सुनिश्चित कर सकते हैं कि केवल विश्वसनीय डिवाइसों को उचित विशिष्ट मूल्यों को उचित विशेषता गुणों और अनुमतियों को सेट करके विशिष्ट मूल्यों तक पहुंच हो। ऊपर केवल विश्वसनीय उपकरणों एक सदस्य का ईमेल पता पुनः प्राप्त करने की अनुमति के लिए उदाहरण के जारी रखने के लिए, इस तरह उचित विशेषता के गुण और अनुमतियाँ, सेट करें:

emailCharacteristic = [[CBMutableCharacteristic alloc] 
    initWithType:emailCharacteristicUUID 
    properties:CBCharacteristicPropertyRead 
    | CBCharacteristicPropertyNotifyEncryptionRequired 
    value:nil permissions:CBAttributePermissionsReadEncryptionRequired]; In this 

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

उदाहरण के लिए, यदि मध्य और परिधीय IOS उपकरणों, दोनों उपकरणों एक चेतावनी का संकेत है कि अन्य डिवाइस युग्मन करना चाहता है प्राप्त करते हैं। केंद्रीय डिवाइस पर अलर्ट में एक कोड है जिसमें आपको जोड़ना प्रक्रिया पूर्ण करने के लिए परिधीय डिवाइस की चेतावनी पर एक टेक्स्ट फ़ील्ड में प्रवेश करना होगा।

युग्मन प्रक्रिया पूरी होने के बाद, परिधीय केंद्रीय संघ को एक विश्वसनीय डिवाइस मानता है और इसकी एन्क्रिप्टेड विशेषता मानों तक केंद्रीय पहुंच की अनुमति देता है।

यदि आपको यह चेतावनी मिल रही है तो ब्लू टूथ हेडसेट जिसे आप कनेक्ट करने का प्रयास कर रहे हैं, उस विशेषताओं में से एक के लिए एक सुरक्षित कनेक्शन की आवश्यकता है जिसे आप एक्सेस करने का प्रयास कर रहे हैं। अधिक जानकारी @koshyyyk के उत्तर से stackoverflow.com/a/18226632/1112794 पर मिल सकती है। ब्लू टूथ के बारे में एक ऐप्पल डेवलपर टॉक और टिप्पणियों में जुड़ी जोड़ी की अवधारणा भी है जो मैं यहां डुप्लिकेट करूंगा: http://adcdownload.apple.com//videos/wwdc_2012__hd/session_705__advanced_core_bluetooth.mov

यदि आपके पास डिवाइस पर डेवलपर पहुंच है तो आप इसे बंद कर सकते हैं। यदि नहीं तो आप या तो विशेषता का उपयोग नहीं करना चुन सकते हैं या आप अपने ऐप में अलर्ट काम करने का कोई तरीका समझ सकते हैं।

बीएलई के लिए मेरा कोड संपादित करें जो अलर्ट फेंक नहीं देता है (यदि यह प्रासंगिक है)। इस परियोजना के लाल भालू लैब का ओपन सोर्स BLE कोड से अनुकूलित किया जा रहा है यहां मिली: https://github.com/RedBearLab/iOS

- (void) connectPeripheral:(CBPeripheral *)peripheral 
{ 
    NSLog(@"Connecting to peripheral with UUID : %@", peripheral.identifier.UUIDString); 

    [self.activePeripherals addObject:peripheral]; 
    [self.CM connectPeripheral:peripheral 
         options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBConnectPeripheralOptionNotifyOnDisconnectionKey]]; 
} 

- (int) findBLEPeripherals:(int)timeout 
{   
    if (self.CM.state != CBCentralManagerStatePoweredOn) 
    { 
     NSLog(@"CoreBluetooth not correctly initialized !"); 
     return -1; 
    } 

    [NSTimer scheduledTimerWithTimeInterval:(float)timeout target:self selector:@selector(scanTimer:) userInfo:nil repeats:NO]; 

    [self.CM scanForPeripheralsWithServices:nil options:nil];    
    return 0; // Started scanning OK ! 
} 
+1

दरअसल, हमने बीटी डिवाइस के सॉफ़्टवेयर को बदल दिया और यह जोड़ी को अब हर बार पॉपअप के लिए पूछना बंद कर दिया। कुछ समय लगे जब तक कि मुझे यह सत्यापित करने के लिए मेरे हाथों में डिवाइस नहीं मिला। बहुत बहुत धन्यवाद। – Panos

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