बीकन मैसेज पाएं

आपका ऐप्लिकेशन, ब्लूटूथ स्मार्ट (BLE) बीकन मैसेज की सदस्यता ले सकता है उसी तरीके का इस्तेमाल करेगा जिसका इस्तेमाल करके पब्लिश किए गए मैसेज की सदस्यता ली जाती है आस-पास के अन्य डिवाइस.

डिफ़ॉल्ट रूप से, बीकन सदस्यताएं सिर्फ़ तब काम करती हैं, जब आपका ऐप्लिकेशन फ़ोरग्राउंड में होता है. जब आपका ऐप्लिकेशन बैकग्राउंड में चला जाता है, तब सदस्यताएं अपने-आप बंद हो जाती हैं बीकन को स्कैन करना शुरू किया जाता है. इसके लिए बैकग्राउंड स्कैनिंग देखें बैकग्राउंड स्कैन करने की सुविधा चालू करने के तरीके की जानकारी.

बीकन की सदस्यता लेने के लिए, deviceTypesToDiscover पैरामीटर को इस पर सेट करें सदस्यता पैरामीटर में kGNSDeviceBLEBeacon. नीचे दिया गया स्निपेट में बताया गया है कि इसे कैसे किया जा सकता है:

Objective-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                            }];

Swift

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
    })

ऊपर दी गई सदस्यता सिर्फ़ आपके प्रोजेक्ट के मालिकाना हक वाले बीकन की खोज करती है और उन्हें उन बीकन से सभी संदेश. अगर आपको इनसे मैसेज पाना है किसी दूसरे नेमस्पेस के साथ रजिस्टर किए गए बीकन, आप सदस्यता पैरामीटर. इसी तरह, अगर आपको खास तरह का मैसेज चाहिए, तो फ़िल्टर करने के लिए, एक मैसेज टाइप भी भेजा जा सकता है. नीचे दिए गए स्निपेट में, यह करें:

Objective-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.messageNamespace = @"com.mycompany.mybeaconservice";
                              params.type = @"mybeacontype";
                            }];

Swift

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.messageNamespace = "com.mycompany.mybeaconservice"
      params.type = "mybeacontype"
    })

डिफ़ॉल्ट रूप से, बीकन सदस्यता दोनों तरह के बीकन, Eddystone और iBeacon. जब iBeacon स्कैनिंग की सुविधा चालू होती है, तो उपयोगकर्ताओं को यह कहा जाएगा कि वे ऐप्लिकेशन को उनकी जगह की जानकारी का डेटा इस्तेमाल करने की अनुमति दें. आपके ऐप्लिकेशन की Info.plist को यह ज़रूरी है कम शब्दों में जानकारी के साथ NSLocationWhenInUseUsageDescription कुंजी शामिल करें जगह की जानकारी का इस्तेमाल क्यों किया जा रहा है. यहां जाएं: Apple के दस्तावेज़ देखें.

अगर आप सिर्फ़ Eddystone बीकन के लिए स्कैन करना चाहते हैं, तो आप iBeacon को बंद कर सकते हैं GNSBeaconStrategy में स्कैन किया जा रहा है. iOS, उपयोगकर्ता से जगह की जानकारी का इस्तेमाल करने की अनुमति. नीचे दिया गया स्निपेट iBeacon को बंद करने का तरीका बताता है ऊपर दी गई मूल सदस्यता की स्कैन की जा रही है:

Objective-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.beaconStrategy =
                                  [GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
                                    params.includeIBeacons = NO;
                                  };
                            }];

Swift

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.beaconStrategy =
          GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
            params.includeIBeacons = false
          })
    })

कम पावर वाली स्कैनिंग की सुविधा डिफ़ॉल्ट रूप से चालू होती है. इस वजह से, कभी-कभी बड़ी गड़बड़ी हो सकती है इंतज़ार के समय का हिसाब लगा लेता है. कम पावर मोड बंद होने पर, iBeacon स्कैनिंग का इस्तेमाल एडीस्टोन बीकन को ढूंढने में किया जाता है, जो कि इंतज़ार का समय. हालांकि, इससे बैटरी ज़्यादा खर्च होती है और iOS, उपयोगकर्ता को जगह की जानकारी इस्तेमाल करने की अनुमति दें.

नीचे दिया गया स्निपेट, स्कैन करते समय लो पावर मोड को बंद करने का तरीका बताता है एडीस्टोन बीकन.

Objective-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.beaconStrategy =
                                  [GNSBeaconStrategy strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
                                    params.includeIBeacons = NO;
                                    params.lowPowerPreferred = NO;
                                  };
                            }];

Swift

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.beaconStrategy =
          GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
            params.includeIBeacons = false
            params.lowPowerPreferred = false
          })
    })

iBeacons के लिए स्कैन करते समय, iOS के लिए जगह की जानकारी की अनुमति वाला डायलॉग बॉक्स आता है आस-पास सुविधा की अनुमति वाला डायलॉग बॉक्स. अगर आपको इस डायलॉग बॉक्स को बदलना है (इसके लिए इंस्टेंस, "प्रीफ़्लाइट" देने के लिए जगह की जानकारी की अनुमति की वजह बताने वाला डायलॉग की ज़रूरत है), तो इसमें permissionRequestHandler को कस्टम ब्लॉक पर सेट करें सदस्यता पैरामीटर. नीचे दिए गए स्निपेट में ऐसा करने का तरीका बताया गया है:

Objective-C

id<GNSSubscription> beaconSubscription = [messageManager
    subscriptionWithMessageFoundHandler:myMessageFoundHandler
                     messageLostHandler:myMessageLostHandler
                            paramsBlock:^(GNSSubscriptionParams *params) {
                              params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                              params.permissionRequestHandler = ^(GNSPermissionHandler permissionHandler) {
                                // Show your custom dialog here, and don't forget to call permissionHandler after it is dismissed
                                permissionHandler(userGavePermission);
                              };
                            }];

Swift

let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
    myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
    paramsBlock: { (params: GNSSubscriptionParams!) in
      params.deviceTypesToDiscover = .BLEBeacon
      params.permissionRequestHandler = { (permissionHandler: GNSPermissionHandler!) in
        // Show your custom dialog here, and don't forget to call permissionHandler after it is dismissed
        permissionHandler(userGavePermission);
      }
    })

बैकग्राउंड स्कैन करने की सुविधा

बीकन स्कैनिंग में BLE का इस्तेमाल होता है, इसलिए यह बैकग्राउंड में भी काम कर सकती है. यहां कुछ बैकग्राउंड मोड का इस्तेमाल करते समय इन बातों का ध्यान रखें:

  • बैकग्राउंड BLE के लिए अतिरिक्त बैटरी लागत. इसमें कम खर्च आता है, लेकिन बैकग्राउंड मोड का इस्तेमाल करने का फ़ैसला लेने से पहले, इसे मापना चाहिए.
  • iOS, बैकग्राउंड में जगह की जानकारी इस्तेमाल करने के लिए उपयोगकर्ता से अनुमति मांगेगा, अगर iBeacon स्कैनिंग की सुविधा चालू है या कम पावर वाला मोड बंद है.

पृष्ठभूमि में बीकन स्कैनिंग सक्षम करने के लिए, इन अतिरिक्त चरणों का पालन करें:

  • अपनी सदस्यता के लिए बैकग्राउंड मोड चालू करें. इसके लिए, सही तरीके से पास करना होगा कॉन्फ़िगर किया गया GNSBeaconStrategy ऑब्जेक्ट. नीचे दिए गए स्निपेट में, शामिल करें:

    Objective-C

    id<GNSSubscription> beaconSubscription = [messageManager
        subscriptionWithMessageFoundHandler:myMessageFoundHandler
                         messageLostHandler:myMessageLostHandler
                                paramsBlock:^(GNSSubscriptionParams *params) {
                                  params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
                                  params.beaconStrategy = [GNSBeaconStrategy
                                      strategyWithParamsBlock:^(GNSBeaconStrategyParams *params) {
                                        params.allowInBackground = YES;
                                      }];
                                }];
    

    Swift

    let beaconSubscription = messageManager.subscriptionWithMessageFoundHandler(
        myMessageFoundHandler, messageLostHandler: myMessageLostHandler,
        paramsBlock: { (params: GNSSubscriptionParams!) in
          params.deviceTypesToDiscover = .BLEBeacon
          params.beaconStrategy =
              GNSBeaconStrategy(paramsBlock: { (params: GNSBeaconStrategyParams!) in
                params.allowInBackground = true
              })
        })
    

  • अपने ऐप्लिकेशन के Info.plist में ज़रूरी एंट्री जोड़ें:

    • UIBackgroundModes एंट्री:

      • बैकग्राउंड में BLE स्कैन करने के लिए bluetooth-central.
      • हाई पावर मोड का इस्तेमाल करके, बैकग्राउंड में iBeacon स्कैन करने के लिए location. अगर आप Eddystone के लिए कम पावर स्कैनिंग कर रहे हैं, तो आप इसे छोड़ सकते हैं सिर्फ़ बीकन के लिए.
    • NSLocationAlwaysUsageDescription स्ट्रिंग, जिसमें बताया गया है कि ट्रैकिंग की वजह क्या है बैकग्राउंड में उपयोगकर्ता की जगह की जानकारी ऐक्सेस करें. उदाहरण के लिए, "आपकी जगह बैकग्राउंड में बीकन को स्कैन करना ज़रूरी है." यहां जाएं: Apple के दस्तावेज़ देखें. यदि आप निम्न के लिए कम पावर स्कैनिंग कर रहे हैं, तो आप इसे छोड़ सकते हैं सिर्फ़ एडीस्टोन बीकन.

  • क्या उपयोगकर्ता आपके ऐप्लिकेशन में बैकग्राउंड स्कैन करने की सुविधा को चालू या बंद कर सकते हैं? अगर ऐसा है, तो को बैकग्राउंड मोड की वैल्यू को NSUserDefaults में सेव करना चाहिए, क्योंकि iOS बंद कर सकता है को ऐक्सेस करने की सुविधा मिलती है. आपके ऐप्लिकेशन को यह करना चाहिए फ़ॉलो किया जा रहा है:

    • जब भी उपयोगकर्ता, बैकग्राउंड मोड की वैल्यू को NSUserDefaults पर सेट करे इसे बदल देता है.
    • स्टार्टअप पर, इसे NSUserDefaults से पढ़ें और बीकन को पहले जैसा करें बैकग्राउंड मोड चालू होने पर सदस्यता.

बैकग्राउंड में मिलने वाली सूचनाएं

अगर आपको ऐप्लिकेशन में बीकन के बारे में पता चलने पर, अपना ऐप्लिकेशन उपयोगकर्ता को इसकी सूचना देनी है बैकग्राउंड, तो आपके पास स्थानीय सूचनाएं. जानकारी के लिए, यह देखें बैकग्राउंड में मिलने वाली सूचनाएं पर टैप करें.