يمكن لتطبيقك الاشتراك في رسائل إشارات البلوتوث المنخفض الطاقة (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
})
})
يتم تفعيل البحث عن الطاقة المنخفضة بشكل تلقائي، ما قد يؤدي في بعض الأحيان إلى حدوث وقت استجابة طويل عند العثور على إشارات Eddystone. عند إيقاف وضع الطاقة المنخفضة، يتم استخدام فحص iBeacon للمساعدة في العثور على إشارات Eddystone التي يمكنها تقليل أوقات الاستجابة هذه. ومع ذلك، يؤدي هذا إلى زيادة استهلاك البطارية، وسيطلب iOS من المستخدم الإذن لاستخدام الموقع الجغرافي.
يوضح المقتطف التالي كيفية إيقاف وضع الطاقة المنخفضة عند البحث عن إشارات Eddystone.
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
:bluetooth-central
لفحص تقنية BLE في الخلفيةlocation
لفحص iBeacon في الخلفية باستخدام وضع الطاقة العالية. يمكنك حذف هذا الخيار إذا كنت تجري بحثًا منخفض الطاقة عن إشارات Eddystone فقط.
NSLocationAlwaysUsageDescription
تصف سبب تتبُّعك لموقع المستخدم في الخلفية. على سبيل المثال، "يجب أن يبحث موقعك الجغرافي عن إشارات مرجعية في الخلفية". اطّلِع على مستندات Apple لمعرفة التفاصيل. يمكنك حذف هذا الخيار إذا كنت تجري بحثًا منخفض الطاقة عن إشارات Eddystone فقط.
هل يمكن للمستخدم تفعيل الفحص في الخلفية أو إيقافه في تطبيقك؟ إذا كان الأمر كذلك، عليك حفظ قيمة وضع الخلفية على
NSUserDefaults
لأنّ نظام iOS يمكنه إغلاق تطبيقك في أي وقت أثناء تشغيله في الخلفية. يجب على تطبيقك تنفيذ ما يلي:- احفظ قيمة وضع الخلفية على
NSUserDefaults
عندما يغيرها المستخدم. - عند بدء التشغيل، يمكنك قراءته من
NSUserDefaults
واستعادة اشتراك المرشد إذا كان وضع الخلفية مفعَّلاً.
- احفظ قيمة وضع الخلفية على
الإشعارات في الخلفية
إذا كنت تريد أن يُعلم تطبيقك المستخدم عند اكتشاف إشارات مرجعية أثناء رصدها في الخلفية، يمكنك استخدام الإشعارات المحلية. للحصول على التفاصيل، راجِع الإشعارات في الخلفية