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