आपका ऐप्लिकेशन, ब्लूटूथ स्मार्ट (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 के लिए कम पावर स्कैनिंग कर रहे हैं, तो आप इसे छोड़ सकते हैं सिर्फ़ बीकन के लिए.
- बैकग्राउंड में BLE स्कैन करने के लिए
NSLocationAlwaysUsageDescription
स्ट्रिंग, जिसमें बताया गया है कि ट्रैकिंग की वजह क्या है बैकग्राउंड में उपयोगकर्ता की जगह की जानकारी ऐक्सेस करें. उदाहरण के लिए, "आपकी जगह बैकग्राउंड में बीकन को स्कैन करना ज़रूरी है." यहां जाएं: Apple के दस्तावेज़ देखें. यदि आप निम्न के लिए कम पावर स्कैनिंग कर रहे हैं, तो आप इसे छोड़ सकते हैं सिर्फ़ एडीस्टोन बीकन.
क्या उपयोगकर्ता आपके ऐप्लिकेशन में बैकग्राउंड स्कैन करने की सुविधा को चालू या बंद कर सकते हैं? अगर ऐसा है, तो को बैकग्राउंड मोड की वैल्यू को
NSUserDefaults
में सेव करना चाहिए, क्योंकि iOS बंद कर सकता है को ऐक्सेस करने की सुविधा मिलती है. आपके ऐप्लिकेशन को यह करना चाहिए फ़ॉलो किया जा रहा है:- जब भी उपयोगकर्ता, बैकग्राउंड मोड की वैल्यू को
NSUserDefaults
पर सेट करे इसे बदल देता है. - स्टार्टअप पर, इसे
NSUserDefaults
से पढ़ें और बीकन को पहले जैसा करें बैकग्राउंड मोड चालू होने पर सदस्यता.
- जब भी उपयोगकर्ता, बैकग्राउंड मोड की वैल्यू को
बैकग्राउंड में मिलने वाली सूचनाएं
अगर आपको ऐप्लिकेशन में बीकन के बारे में पता चलने पर, अपना ऐप्लिकेशन उपयोगकर्ता को इसकी सूचना देनी है बैकग्राउंड, तो आपके पास स्थानीय सूचनाएं. जानकारी के लिए, यह देखें बैकग्राउंड में मिलने वाली सूचनाएं पर टैप करें.