표지 메시지 받기

앱에서 저전력 블루투스 (BLE) 비콘 메시지를 구독할 수 있습니다. Google이 게시한 메시지를 구독하는 데 사용되는 것과 동일한 기타 근처 기기에서 작동합니다.

기본적으로, 비콘 구독은 앱이 포그라운드에 있을 때만 작동합니다. 앱이 백그라운드로 이동하면 정기 결제가 자동으로 중지됩니다. 비콘을 스캔하고 있습니다. 자세한 내용은 백그라운드 검색을 참고하세요. 자세한 내용은 백그라운드 검사를 사용 설정하는 방법을 확인하세요.

비콘을 구독하려면 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
          })
    })

기본적으로 저전력 스캔이 사용 설정되어 있으므로 지연 시간을 단축할 수 있습니다. 저전력 모드가 사용 중지되면 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 위치 정보 액세스 권한 대화상자 앞에 Nearby 권한 대화상자 이 대화상자를 재정의하고 싶은 경우( '프리플라이트'를 제공하기 위해 위치 정보 액세스 권한이 필요한 이유를 설명하는 대화상자 필요) 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: 백그라운드에서 BLE 검색을 수행합니다.
      • location: 고전력 모드를 사용하여 백그라운드에서 iBeacon 스캔 Eddystone을 저전력 스캔을 하는 경우에는 이 단계를 생략해도 됩니다. 비콘만 사용할 수 있습니다.
    • 추적하는 이유를 설명하는 NSLocationAlwaysUsageDescription 문자열 백그라운드에서 사용자의 위치 예: '내 위치는 스캔해야 했습니다."라고 말합니다. 자세한 내용은 Apple 문서 참조하세요. Eddystone 비콘만 해당됩니다.

  • 사용자가 앱에서 백그라운드 검사를 사용 설정 또는 중지할 수 있나요? 그렇다면 iOS가 종료할 수 있으므로 백그라운드 모드 값을 NSUserDefaults에 저장해야 합니다. 할 수 있습니다. 앱은 다음 작업을 해야 합니다. 있습니다.

    • 사용자가 앱을 호출할 때마다 백그라운드 모드 값을 NSUserDefaults에 저장합니다. 변경할 수 있습니다
    • 시작 시 NSUserDefaults에서 읽고 비콘을 복원합니다. 정기 결제를 신청할 수 있습니다.

백그라운드 알림

방에 있는 동안 비콘이 발견될 때 앱이 사용자에게 알리도록 하려면 배경의 경우에는 로컬 알림에 액세스할 수 있습니다. 자세한 내용은 백그라운드 알림.