Share via


채팅 앱에서 푸시 알림 사용

이 자습서에서는 Azure Communication Chat SDK를 사용하여 IOS 앱에서 푸시 알림을 사용하도록 설정하는 방법을 안내합니다.
푸시 알림은 모바일 앱이 포그라운드에서 실행되고 있지 않은 상황에서 채팅 스레드에서 들어오는 메시지를 클라이언트에게 알립니다. Azure Communication Services는 두 가지 버전의 푸시 알림을 지원합니다.

  • Basic Version : 사용자는 앱 아이콘에서 배지 번호 1을 보고, 알림 소리를 수신하고, 팝업 경고 배너를 볼 수 있습니다.

  • Advanced Version: 기본 버전에서 지원되는 기능을 제외하고 Contoso는 경고 배너에서 제목 및 메시지 미리 보기 섹션을 사용자 지정할 수 있습니다.

    Screenshot of basic version of push notification.

    [기본 버전]

    Screenshot of advanced version of push notification.

    [고급 버전]

코드 다운로드

GitHub에 제공되는 이 자습서의 샘플 코드

필수 조건

  1. 채팅 빠른 시작의 모든 필수 구성 요소 단계 완료

  2. ANH 설정
    Communication Services 리소스와 동일한 구독 내에 Notification Hub를 만들고, Notification Hub를 Communication Services 리소스에 연결합니다. Notification Hub 프로비저닝을 참조하세요.

  3. APNS 인증서 구성
    여기서는 .p12 APNS 인증서를 만들고 Notification Hub에서 설정하는 것이 좋습니다.

    If you are not a Microsoft internal client, 1~9단계를 수행합니다.
    If you are a Microsoft internal client, 여기에서 티켓 제출하고 앱의 번들 ID를 제공하여 .p12 인증서를 받으세요. 유효한 인증서가 발급되면 9단계를 실행하세요.

  • 1단계: Apple 개발자 포털 로그인 Certificates, IDs & Profiles > Identifiers > App IDs로 이동하여 앱과 연결된 앱 ID를 클릭합니다.

    Screenshot of APNS Cert Configuration step 1.
  • 2단계: 앱 ID에 대한 화면에서 Capabilities > Push Notifications을 검사합니다. 저장을 클릭하고 표시되는 앱 기능 수정 대화 상자에 "확인"을 응답합니다.

    Screenshot of APNS Cert Configuration step 2-1.Screenshot of APNS Cert Configuration step 2-2.
  • 3단계: 같은 페이지에서 Capabilities > Push Notifications > Configure를 클릭합니다. 다음 단추 중 하나를 클릭합니다.

    • 개발 SSL 인증서 > 인증서 만들기(iOS 앱을 개발하는 동안 푸시 알림 테스트용)
    • 프로덕션 SSL 인증서 > 인증서 만들기(프로덕션에서 푸시 알림 보내기용)
    Screenshot of APNS Cert Configuration step 3.
  • 4단계: 아래 페이지로 이동합니다. 여기서는 CSR(인증서 서명 요청)을 업로드합니다. 다음 단계에 따라 CSR을 만듭니다.

    Screenshot of APNS Cert Configuration step 4.
  • 5단계: 새 브라우저 탭에서 이 도움말 페이지에 따라 CSR을 만들고 파일을 "App name.cer"로 저장합니다.

    Screenshot of APNS Cert Configuration step 5 - 1.Screenshot of APNS Cert Configuration step 5 - 2.
  • 6단계: .cer 파일을 "파일 선택" 영역으로 끕니다. 그런 다음 오른쪽 상단 모서리에서 "계속"을 누릅니다.

    Screenshot of APNS Cert Configuration step 6.
  • 7단계: "다운로드"를 클릭하고 파일을 로컬 디스크에 저장합니다.

    Screenshot of APNS Cert Configuration step 7.
  • 8단계: 다운로드한 .cer 파일을 엽니다. 키 집합 액세스가 열립니다. 인증서를 선택하고 마우스 오른쪽 단추를 클릭하고 .p12 형식으로 인증서를 내보냅니다.

    Screenshot of APNS Cert Configuration step 8.
  • 9단계: 알림 허브로 이동하여 설정에서 "Apple(APNS)"을 클릭하고 인증 모드에서 "인증서"를 선택합니다. 또한 필요에 따라 애플리케이션 모드를 선택합니다. 그런 다음 방금 만든 .p12 파일을 업로드합니다.

    Screenshot of APNS Cert Configuration step 9.
  1. XCode 구성
  • Xcode에서 Signing & Capabilities로 이동합니다. “+ 기능”을 선택하여 기능을 추가한 다음, “푸시 알림”을 선택합니다.

  • “+ 기능”을 선택하여 다른 기능을 추가한 다음, “백그라운드 모드”를 선택합니다. 또한 백그라운드 모드에서 "원격 알림"을 선택합니다.

Screenshot of Enable Push Notifications and Background modes in Xcode.
  • Pod 대상에 대해 "App-Extension-Safe API만 필요"를 "아니요"로 설정 - AzureCore

구현

1 - 기본 버전

기본 버전의 푸시 알림을 구현하려면 APNS(Apple 푸시 알림 서비스)를 사용하여 원격 알림을 등록해야 합니다. AppDelegate.swift에서 관련 구현을 보려면 샘플 코드를 참조하세요.

2 - 고급 버전

고급 버전의 푸시 알림을 구현하려면 앱에 다음 항목을 포함해야 합니다. 그 이유는 푸시 알림 페이로드에서 고객 콘텐츠(예: 채팅 메시지 콘텐츠, 보낸 사람 표시 이름 등)를 암호화하고 사용자 쪽에서 몇 가지 해결 방법이 필요하기 때문입니다.

  • 항목 1: 암호화 키용 데이터 스토리지

먼저 IOS 디바이스에서 영구 데이터 스토리지를 만들어야 합니다. 이 데이터 스토리지는 주 앱과 앱 확장 간에 데이터를 공유할 수 있어야 합니다(앱 확장 – Notification Service 확장에 대한 자세한 내용은 항목 2 참조).

샘플 코드에서는 데이터 스토리지로 "앱 그룹"을 선택합니다. 다음은 "앱 그룹"을 만들고 사용하는 권장 단계입니다.

기능 추가의 단계에 따라 앱의 대상(기본 앱 및 알림 서비스 확장 모두)에 앱 그룹 기능을 추가합니다(알림 서비스 확장을 만드는 방법에 대한 항목 2 참조).

또한 이 Apple 공식 문서의 단계에 따라 앱 그룹을 구성합니다. 기본 앱 및 앱 확장의 컨테이너 이름이 같은지 확인합니다.

  • 항목 2: 알림 서비스 확장

둘째, 기본 앱과 함께 번들로 제공되는 "알림 서비스 확장"을 구현해야 합니다. 수신 시 푸시 알림 페이로드의 암호를 해독하는 데 사용됩니다.

Apple 공식 문서로 이동합니다. "프로젝트에 서비스 앱 확장 추가" 및 "확장의 처리기 메서드 구현" 단계를 따릅니다.

"확장의 처리기 메서드 구현" 단계에서 Apple은 데이터 암호를 해독하는 샘플 코드를 제공하며 전체 구조를 따릅니다. 그러나 암호 해독을 위해 채팅 SDK를 사용하므로 “// Try to decode the encrypted message data.”부터 시작하는 부분을 사용자 지정 논리로 바꿔야 합니다. NotificationService.swift에서 관련 구현을 보려면 샘플 코드를 참조하세요.

  • 항목 3: PushNotificationKeyStorage 프로토콜 구현

셋째, PushNotificationKeyStorage는 고급 버전에 필요합니다. SDK 사용자는 채팅 SDK에서 제공하는 기본 AppGroupPushNotificationKeyStorage 클래스를 사용할 수 있습니다. App Group를 키 스토리지로 사용하지 않거나 키 스토리지 메서드를 사용자 지정하려는 경우 PushNotificationKeyStorage 프로토콜을 준수하는 고유한 클래스를 만듭니다.

PushNotificationKeyStorage의 경우 onPersistKey(encryptionKey:expiryTime)onRetrieveKeys() -> [String] 두 메서드를 정의합니다.

첫 번째 방법은 사용자의 IOS 디바이스 스토리지에 암호화 키를 유지하는 데 사용됩니다. 채팅 SDK는 암호화 키의 만료 시간으로 45분을 설정합니다. 푸시 알림이 45분 이상 적용되도록 하려면 이전 키가 만료되기 전에 새 암호화 키를 등록할 수 있도록 비교적 자주(예: 15분마다) chatClient.startPushNotifications(deviceToken:)을 호출하도록 예약해야 합니다.

두 번째 메서드는 이전에 저장된 유효한 키를 검색하는 데 사용됩니다. 선택한 데이터 스토리지(항목 1)를 기반으로 사용자 지정을 유연하게 제공할 수 있습니다.

프로토콜 확장에서 채팅 SDK는 활용할 수 있는 메서드의 decryptPayload(notification:) -> PushNotificationEvent 구현을 제공합니다. NotificationService.swift에서 관련 구현을 보려면 샘플 코드를 참조하세요.

테스팅

  1. 사용자 A 및 사용자 B를 사용하여 채팅 스레드를 만듭니다.

  2. 샘플 앱 리포지토리를 다운로드하고 필수 구성 요소 및 구현 섹션의 위의 단계를 따릅니다.

  3. 사용자 A의 <ACESS_TOEKN> 및 <ACS_RESOURCE_ENDPOINT>를 AppSettings.plist에 넣습니다.

  4. AzureCommunicationChat 및 Trouter라는 두 개의 Pod 대상에 대해 "비트코드 사용"을 "아니요"로 설정합니다.

  5. IOS 디바이스를 mac에 연결하고, 프로그램을 실행하고, 디바이스에서 푸시 알림에 권한을 부여하라는 메시지가 표시되면 "허용"을 클릭합니다.

  6. 사용자 B에서 채팅 메시지를 보냅니다. 사용자(사용자 A)는 IOS 디바이스에서 푸시 알림을 받을 수 있어야 합니다.