Uygulamanız Bluetooth Düşük Enerji (BDE) işaretçi mesajlarına abone olabilir tarafından yayınlanan iletilere abone olmak için kullanılan mekanizmanın aynısını yakındaki diğer cihazlar.
Varsayılan olarak, işaretçi abonelikleri yalnızca uygulamanız ön plandayken çalışır. Uygulamanız arka plana gittiğinde abonelikler otomatik olarak durur mevcut bir sinyaldir. Şunları görmek için Arka Planda Tarama'ya bakın: arka planda taramanın nasıl etkinleştirileceğiyle ilgili ayrıntılara göz atın.
İşaretçilere abone olmak için deviceTypesToDiscover
parametresini
Abonelik parametrelerinde kGNSDeviceBLEBeacon
. Aşağıdaki snippet
Bunun nasıl yapılacağını gösterir:
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
})
Yukarıdaki abonelik yalnızca projenize ait işaretçileri bulur ve tüm mesajları hariç tutmanızı sağlar. adlı kullanıcıdan gelen iletileri almak istiyorsanız işaretçileri kullanıyorsanız, bir ad alanını abonelik parametreleri. Benzer şekilde, belirli bir mesaj türü istiyorsanız Ayrıca, filtreleme için bir mesaj türü de iletebilir. Aşağıdaki snippet'te şunu yap:
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"
})
Bir işaretçi aboneliği varsayılan olarak hem işaretçi hem Eddystone ve
iBeacon'a dokunun. iBeacon taraması etkinleştirildiğinde kullanıcılardan
uygulamanın konum verilerini kullanmasına izin vermesidir. Uygulamanızın Info.plist
kuralı,
şunun kısa açıklamasını içeren NSLocationWhenInUseUsageDescription
anahtarını ekleyin:
konum bilgisinin neden kullanıldığını gösterir. Görüntüleyin
Apple'ın belgeleri
inceleyebilirsiniz.
Yalnızca Eddystone işaretçilerini taramak istiyorsanız iBeacon'ı devre dışı bırakabilirsiniz
GNSBeaconStrategy
içinde taramayı sağlar. iOS de kullanıcıdan
konumunuzu kullanma iznidir. Aşağıdaki snippet'te iBeacon'ın nasıl devre dışı bırakılacağı gösterilmektedir
yukarıdaki orijinal abonelik için tarama:
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
})
})
Varsayılan olarak, düşük güçle tarama etkinleştirilir. Bu durum, bazen gecikmeleri yaşayabilirsiniz. Düşük güç modu devre dışı bırakıldığında iBeacon taraması, Eddystone işaretçilerinin bulunmasına yardımcı olmak için kullanılır. Bu işaretçiler, gecikmeleri telafi eder. Ancak bu, pil kullanımını artırır ve iOS, kullanıcıdan konumu kullanma izni almak istiyorum.
Aşağıdaki snippet'te, Eddystone işaretçileri.
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'ları tararken iOS konum izni iletişim kutusunun öncesinde
"Yakında" izni iletişim kutusu. Bu iletişim kutusunu geçersiz kılmak istiyorsanız (
kontrol etmek için konum izninin neden verildiğini açıklayan iletişim kutusu
(gerekli), permissionRequestHandler
öğesini blog'da özel bir bloka ayarlayın.
abonelik parametreleri. Aşağıdaki snippet'te bunun nasıl yapılacağı gösterilmektedir:
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);
}
})
Arka Planda Tarama
İşaretçi taraması BDE kullandığından arka planda çalışabilir. Aşağıda bazı örnekler verilmiştir: arka plan modunu kullanmaya karar verirken dikkat etmeniz gereken şeyler:
- Arka plan BDE için ek pil maliyeti vardır. Maliyet düşüktür ama arka plan modunu kullanmaya karar vermeden önce bunu ölçmeniz gerekir.
- iOS, aşağıdaki durumlarda arka planda konum kullanmak için kullanıcıdan izin ister iBeacon taraması etkin veya düşük güç modu devre dışı.
Arka planda işaretçi taramasını etkinleştirmek için şu ek adımları uygulayın:
Düzgün bir şekilde ileterek aboneliğiniz için arka plan modunu etkinleştirin
GNSBeaconStrategy
nesnesini yapılandırdı. Aşağıdaki snippet'te bu işlemi nasıl bu: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 }) })
Uygulamanızın
Info.plist
öğesine gerekli girişleri ekleyin:UIBackgroundModes
giriş:- Arka planda BDE taraması için
bluetooth-central
. - Yüksek güç modunu kullanarak arka planda iBeacon taraması için
location
. Eddystone için düşük güçle tarama yapıyorsanız bunu atlayabilirsiniz yalnızca işaretçiler için geçerlidir.
- Arka planda BDE taraması için
Neden izleyeceğinizi açıklayan
NSLocationAlwaysUsageDescription
dize arka planda kullanıcının konumu. Örneğin, "Konumunuz: arka planda işaretçileri taramamız gerekiyor." Görüntüleyin Apple'ın belgeleri inceleyebilirsiniz. Yalnızca Eddystone işaretçileri.
Kullanıcı, uygulamanızda arka plan taramasını etkinleştirebilir veya devre dışı bırakabilir mi? Yanıtınız evet ise iOS öldürülebileceği için arka plan modu değerini
NSUserDefaults
olarak kaydetmelidir arka planda çalışırken istediğiniz zaman uygulamanıza erişebilirsiniz. Uygulamanız şunları yapmalıdır: takip etmek için:- Kullanıcı her zaman arka plan modu değerini
NSUserDefaults
olarak kaydet anlamına gelir. - Başlangıçta,
NSUserDefaults
üzerinden okuyun ve işaretçiyi geri yükleyin abonelik satın alabilir.
- Kullanıcı her zaman arka plan modu değerini
Arka Plan Bildirimleri
Uygulamanızın, web'de işaretçiler keşfedildiğinde kullanıcıyı bilgilendirmesini istiyorsanız arka plan olarak kullanmak için yerel bildirimler. Ayrıntılar için bkz. arka plan bildirimleri gibi önemli özellikleri de kullanabilirsiniz.