İşaretçi Mesajları Alın

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.
    • 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.

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.