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