يمكن لتطبيقك الاشتراك في رسائل إشارات منخفضة الطاقة للبلوتوث (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
})
لا يكتشف الاشتراك أعلاه سوى إشارات البلوتوث التي يملكها مشروعك، ويتلقّى جميع الرسائل من هذه الإشارات. إذا كنت تريد تلقّي رسائل من أجهزة Beacon مسجّلة في مساحة اسم مختلفة، يمكنك تمرير مساحة اسم في مَعلمات الاشتراك. وبالمثل، إذا كنت تريد نوعًا معيّنًا من الرسائل، يمكنك أيضًا تمرير نوع الرسالة للفلترة. يوضّح المقتطف التالي كيفية إجراء ذلك:
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
})
})
عند البحث عن إشارات iBeacon، يسبق مربّع حوار إذن تحديد الموقع الجغرافي على نظام التشغيل 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)، يمكن أن تعمل في الخلفية. في ما يلي بعض الأمور التي يجب مراعاتها عند اتّخاذ قرار بشأن استخدام وضع الخلفية:
- هناك تكلفة إضافية للبطارية عند استخدام تقنية البلوتوث المنخفض الطاقة في الخلفية. التكلفة منخفضة، ولكن عليك قياسها قبل اتخاذ قرار بشأن استخدام وضع الخلفية.
- سيطلب نظام التشغيل 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
واستعادة اشتراك Beacon إذا كان وضع الخلفية مفعّلاً.
- احفظ قيمة وضع الخلفية في
الإشعارات في الخلفية
إذا أردت أن يرسل تطبيقك إشعارًا إلى المستخدم عند رصد إشارات البلوتوث المنخفض الطاقة أثناء تشغيل التطبيق في الخلفية، يمكنك استخدام الإشعارات المحلية. لمعرفة التفاصيل، يُرجى الاطّلاع على الإشعارات في الخلفية.