ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Adding Support for Background Tag Reading
    iOS Swift 2023. 6. 6. 16:33

    Article

    백그라운드 태그 읽기 지원 추가하기 

    사용자가 백그라운드 태그 읽기를 통해 앱 없이 NFC 태그를 스캔할 수 있도록 합니다. 

     

    Overview 

    백그라운드 태그 읽기를 지원하는 iPhone에서 시스템은 사용자가 앱을 사용하여 태그를 스캔할 필요 없이 NFC 데이터를 스캔하고 읽을 수 있습니다. 시스템은 새 태그를 읽을 때마다 팝업 알림을 표시합니다. 사용자가 알림을 탭하면 시스템이 태그 데이터를 적절한 앱에 전달합니다. iPhone이 잠겨 있으면 태그 데이터를 앱에 제공하기 전에 시스템에서 사용자에게 폰 잠금을 해제하라는 메시지를 표시합니다.

    Note
    iPhone XS 이상에서 백그라운드 태그 읽기를 지원합니다.

    의도하지 않은 태그 읽기를 방지하기 위해 시스템은 사용자의 iPhone이 사용 중일 때만 백그라운드에서 태그를 읽습니다. 또한 다음과 같이 디스플레이가 켜져 있어도 백그라운드에서 태그 읽기를 사용할 수 없는 경우가 있습니다. 

    • 장치가 잠금해제 된 적이 없을 때
    • Core NFC 리더 세션이 진행 중 일 때
    • Apple 페이 월렛이 사용 중 일 때
    • 카메라가 사용 중 일 때
    • 비행기 모드가 활성화 되었을 때

    스캔한 태그 처리 

    장치가 백그라운드 태그 읽기 모드에서 NFC 태그를 스캔한 경우 시스템은 태그의 NDEF 메시지를 검사해 다음과 같은 프로퍼티 값이 있는 NFCNDEFPayload 객체를 찾습니다.

    • typeNameFormat 이 NFCTypeNameFormat.nfcWellKnown 일 때
    • type 이 "U" 일 때

    (주) NDEF의 NFC 중 잘 알려진 페이로드 타입인 URI인 레코드를 찾습니다. NDEF에 대한 내용은 아래 링크를 참고 하세요.

    2023.06.06 - [iOS Swift] - NDEF(NFC Data Exchage Format) 메시지 구조

     

    NDEF 메시지에 둘 이상의 URI 레코드가 포함된 경우 시스템은 첫 번째 레코드를 사용합니다. URI 레코드에는 범용 링크 또는 지원되는 URL 스키마가 포함되어야 합니다.

    Universal Links 사용

    범용 링크(Univeral Link)의 경우 시스템은 사용자가 알림을 탭한 후 범용 링크와 연결된 앱을 실행(또는 포그라운드로 가져옴)합니다. 시스템은 NDEF 메시지를 NSUserActivity 개체로 앱에 보냅니다. 범용 링크와 연결된 앱이 설치되어 있지 않으면 시스템이 Safari에서 링크를 엽니다.

    URL schemes 사용 

    시스템은 범용 링크와 동일한 방식으로 URL 체계에 대한 URI를 포함하는 NDEF 페이로드를 처리합니다. 시스템은 태그를 읽은 후 알림을 표시합니다. 사용자가 알림을 탭하면 시스템에서 URL 체계를 지원하는 앱을 실행합니다.

    URL Scheme Example
    Website URL (HTTP/HTTPS) https://www.example.com
    Email mailto:user@example.com
    SMS sms:+14085551212
    Telephone tel:+14085551212
    FaceTime facetime://user@example.com
    FaceTime Audio facetime-audio://user@example.com
    Maps http://maps.apple.com/?address=Apple%20Park,Cupertino,California

    URL 체계에 대한 자세한 내용은 Apple URL Scheme Reference.  참조하십시오.

    Note
    백그라운드 태그 읽기는 사용자 지정 URL 체계를 지원하지 않습니다. 대신 범용 링크를 사용하십시오.

    앱 설정 

    프로젝트의 Capabilities 탭에서 Associated Domains 켜서 백그라운드 태그 읽기를 사용하게 할 수 있습니다. 단계에서는 Associated Domains Entitlement 프로젝트의 자격 파일과 ID 추가합니다. 이 후 앱에서 지원하는 범용 링크의 도메인을 입력합니다.

     

    태그 전달 처리 

    태그에서 읽은 NDEF 메시지를 처리하려면 딜리게이트에 application(_:continue:restorationHandler:) 메서드를 구현하세요. 시스템은 메서드를 호출하여 NSUserActivity 개체를 이용해 앱에 태그 데이터를 전달합니다. NSUserActivity에는 NSUserActivityTypeBrowsingWeb activityType 있으며 태그 데이터는 ndefMessagePayload 속성에서 사용할 있습니다.

     

    백그라운드 태그 읽기로 생성되지 않은 user activities 경우 ndefMessagePayload NFCNDEFPayload 레코드가 하나만 포함된 메시지를 반환합니다. 해당 레코드에는 NFCTypeNameFormat.empty typeNameFormat 있습니다.

    func application(_ application: UIApplication,
                     continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    
    
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb else {
            return false
        }
    
    
        // Confirm that the NSUserActivity object contains a valid NDEF message.
        let ndefMessage = userActivity.ndefMessagePayload
        guard ndefMessage.records.count > 0,
            ndefMessage.records[0].typeNameFormat != .empty else {
                return false
        }
    
    
        // Send the message to `MessagesTableViewController` for processing.
        guard let navigationController = window?.rootViewController as? UINavigationController else {
            return false
        }
    
    
        navigationController.popToRootViewController(animated: true)
        let messageTableViewController = navigationController.topViewController as? MessagesTableViewController
        messageTableViewController?.addMessage(fromUserActivity: ndefMessage)
    
    
        return true
    }

     

    모든 기기가 백그라운드 태그 읽기를 지원하는 것은 아니므로 앱에서 직접 태그를 읽을 있는 옵션을 사용자에게 제공해야 합니다. 자세한 내용은  Building an NFC Tag-Reader App 를 참고하세요.

     

     

     

     

    댓글

Designed by Tistory.