Notification Hubs 디버깅

이 섹션에서는 Azure Notification Hubs를 사용하는 솔루션을 디버그하는 방법에 대한 몇 가지 팁을 설명합니다.

푸시 알림 디버깅은 디바이스 앱, 백 엔드, 플랫폼 알림 시스템 및 Azure Notification Hubs와 같은 푸시 알림 서비스와 같은 많은 시스템이 관련되어 있기 때문에 어려울 수 있습니다. 일반적으로는 올바른 푸시 자격 증명을 사용하여 알림 허브를 설정하고, 플랫폼 알림 시스템 및 허브에 장치 앱을 등록한 다음 마지막으로 알림을 보내도록 백 엔드를 업데이트하는 작업을 수행해야 합니다. 이처럼 복잡한 아키텍처로 인해 작업 과정에서 실수나 오류가 발생하여 알림이 장치에서 수신되지 않을 가능성이 있습니다. 이러한 결과를 방지하기 위해 푸시 알림 구성을 디버그하는 데 효율적으로 사용할 수 있는 여러 도구가 있습니다.

  • Azure 관리 포털

  • Visual Studio 서버 Explorer

  • Service Bus 탐색기

Azure 관리 포털

Azure 관리 포털을 사용하면 알림과 등록 상태를 모니터링하고 테스트 알림을 보낼 수 있습니다. 아래 그림에 나와 있는 것처럼 알림 허브의 디버그 탭에서 이 기능에 액세스할 수 있습니다.

Portal

테스트 알림을 보낼 때 사용할 푸시 알림 서비스(Windows Phone, Windows, iOS, Android 또는 사용자 지정(템플릿 사용)를 지정할 수 있습니다. 무작위 테스트 알림을 보낼 수도 있고 특정 등록 집합에 테스트 알림을 보낼 수도 있습니다. 테스트 푸시 알림을 보내려면 디버그 탭에 필요한 매개 변수를 설정한 다음 화면 아래에서 보내기를 클릭합니다.

Visual Studio 서버 Explorer

Visual Studio의 서버 탐색기는 Microsoft Azure 구독에 연결되므로 Visual Studio IDE에서 직접 Azure 서비스를 사용할 수 있습니다. 구독에 연결되면 몇 가지 제한적인 알림 허브 테스트 및 디버깅을 수행할 수 있습니다. 특히 Visual Studio에서 앱을 테스트할 때는 Visual Studio의 디버깅 기능을 사용하면 편리합니다. Visual Studio에서 지정된 알림 허브의 기존 푸시 알림 등록을 검토할 수 있습니다. 등록된 장치에 테스트 메시지를 보내 알림 허브 구성을 테스트할 수도 있습니다.

Visual Studio에서 알림 허브를 진단하려면 서버 탐색기의 Azure 아래에서 알림 허브 노드를 확장한 다음 허브 이름을 마우스 오른쪽 단추로 클릭하고 진단을 클릭합니다.

Visual Studio에서 Azure 관리 포털로 직접 이동하려면 서버 탐색기에서 허브 이름을 마우스 오른쪽 단추로 클릭하고 관리 포털에서 열기를 클릭합니다.

아래에는 기존 등록이 표시되는 장치 등록 진단 탭이 나와 있습니다.

Existing notification hub registrations

등록 수가 많은 경우 태그를 기준으로 목록을 필터링하고 열을 기준으로 목록을 정렬할 수 있습니다. 기존 등록을 선택한 다음 태그 편집 아이콘을 클릭하여 기존 등록의 태그를 편집할 수도 있습니다.

아래에는 기존 등록에 테스트 메시지를 보낼 수 있는 테스트 보내기 진단 탭이 나와 있습니다.

Visual Studio Notification Hubs test send

클라이언트 등록에 무작위로, 즉 브로드캐스트 방식으로 알림을 보낼 수도 있고 특정 태그가 지정된 등록에만 알림을 보낼 수도 있습니다. 이 테스트 기능을 사용할 때 Visual Studio에서는 10개를 초과하는 클라이언트가 테스트 알림을 받지 않도록 보장하며 테스트 결과는 메시지 결과 테이블에 표시됩니다. NotificationHubClient API에서 EnableTestSendtrue로 설정하는 것과 동일한 동작입니다.

메시지 유형을 선택하면 선택한 플랫폼과 푸시 알림 유형에 맞는 형식으로 테스트 메시지가 생성됩니다.

구성 상태, 연결 문자열 정보, 등록 TTL(Time to Live)을 비롯한 알림 허브 관련 추가 정보는 속성 창에 표시됩니다. TTL은 PxxDTyyH의 직렬화된 일 및 시간 형식으로 표시됩니다. 여기서 xx 는 일이고 yy 는 시간이며 기본 90일 등록은 P90D입니다.

Service Bus 탐색기

디버깅 프로세스를 손쉽게 수행하기 위해 서비스 버스 탐색기를 사용할 수도 있습니다. 여기에서 Service Bus Explorer를 다운로드할 수 있습니다. 이 도구를 사용하면 현재 알림 허브에 등록되어 있는 장치를 탐색할 수 있습니다. 서비스 버스 탐색기를 사용하여 테스트 알림을 전송할 수도 있습니다. 이러한 모든 작업은 Azure SDK 및 .NET 클라이언트 라이브러리를 사용하여 수행할 수 있으며 REST를 통해 수행할 수도 있지만, 이 도구를 사용하면 디버깅 프로세스가 훨씬 쉬워집니다. Service Bus 탐색기에 대한 빠른 소개는 이 비디오를 참조하세요.

서비스 버스 탐색기를 시작할 때는 앱과 백 엔드에 사용하는 허브 연결 문자열이 아닌 ACS 연결 문자열을 사용하여 네임스페이스에 서비스 버스 탐색기를 연결합니다. 예를 들면 다음과 같습니다.

Connection String

알림 허브를 사용하는 솔루션을 디버그할 때는 다음 작업을 수행하면 유용합니다.

  1. 장치가 허브에 올바르게 등록되어 있는지 확인합니다. 이렇게 하려면 허브의 모든 등록을 가져온 다음 올바른 PNSHandle(예: ChannelURI, 장치 토큰 또는 registrationId)과 태그 집합이 포함된 등록이 있는지 확인합니다. 서비스 버스 탐색기의 왼쪽에서 알림 허브를 선택한 다음 아래쪽의 등록 단추를 사용하여 등록을 쿼리합니다. 그러면 클라이언트 앱의 코드에 등록이 표시됩니다. 예를 들면 다음과 같습니다.

    Service Bus Explorer

  2. 등록이 있는 경우 메시지 전송 시 결과가 "success"로 표시되는지 확인합니다. 포털 대시보드가 업데이트될 때까지 기다리지 않아도 서비스 버스 탐색기에 해당 결과가 즉시 표시됩니다. 다른 결과를 받는 경우 이 MSDN 항목을 참조하여 발생한 일을 이해합니다(여기서 대부분의 문제는 허브 및/또는 클라이언트 앱의 자격 증명 구성과 관련됨).

    Service Bus Explorer 결과에 대한 플랫폼별 설명은 메트릭 항목을 참조하세요.

  3. 플랫폼 알림 서비스에서 success를 반환하는 경우 알림 허브가 알림을 플랫폼 알림 시스템에 정상적으로 배달한 것입니다. success가 계속 표시되지 않는 경우 대개 각 플랫폼과 관련된 비정상적인 현상이 발생한 것입니다. 예를 들어:

    • iOS에서는 앱이 실행 중이면(백그라운드에서 실행 중인 경우도 포함됨) 알림이 catch됩니다. 알림을 표시하려면 application:didReceivePushNotification: 클래스에서 AppDelegate 메서드를 구현해야 합니다. 또한 json 페이로드가 잘못된 경우 APNS에서 알림을 수락하기는 하지만 장치에는 아무 내용도 표시되지 않습니다.

    • Windows Phone에서는 앱이 포그라운드에서 실행 중이면 알림이 표시되지 않습니다.

    • Android에서는 브로드캐스트 수신기가 올바르게 구성되어 있으며 해당 패키지에 대해 매니페스트에 사용 권한이 설정되어 있는지 확인합니다.

마지막으로 같은 종류의 알림을 알림 허브에 등록하고 전송하는지 확인합니다. 템플릿을 등록하는 경우에는 템플릿 알림을 보내야 하며 기본 알림을 등록하는 경우에는 올바른 플랫폼에 대해 기본 알림을 보내야 합니다.

결과 코드

포털 또는 서비스 버스 탐색기에서 테스트 알림을 보내면 결과가 success 또는 failure로 반환됩니다. 아래 표에는 발생 가능한 결과와 해당 의미가 나와 있습니다.

결과 클래스 설명

Success

알림이 PNS에 정상적으로 배달되었습니다.

정체됨

연결된 자격 증명이 제한되어 PNS에서 알림을 수락하지 않았습니다.

ChannelThrottled

ChannelUri, 장치 토큰 등의 대상 채널이 제한되어 PNS에서 알림을 수락하지 않았습니다.

ChannelDisconnected

현재 채널의 연결이 끊겨 있어 PNS에서 알림을 수락하지 않았습니다.

Dropped

채널 대기열이 가득 차서 PNS에서 알림을 수락하지 않았습니다.

PNS 문제

PnsUnreachable

PNS에 대한 연결을 설정할 수 없습니다.

PnsInterfaceError

PNS와 Service Bus 인터페이스의 오류입니다.

PnsServerError

PNS에서 내부 오류가 보고되었습니다.

PnsUnavailable

PNS에서 서비스를 사용할 수 없음을 보고했습니다.

PNS 인증 문제

TokenProviderUnreachable

WNS 등의 PNS에 연결하기 전에 권한 부여 토큰을 받아야 하는 경우 해당 토큰을 가져오기 위해 서비스에 연결할 수 없으면 이 오류가 발생합니다.

참고: 자격 증명이 잘못된 경우 결과는 아닙니다.

TokenProviderInterfaceError

토큰 공급자 서비스와 Service Bus 인터페이스의 오류입니다.

InvalidCredentials

등록에 지정된 자격 증명이 없거나, 자격 증명이 차단되었거나, Service Bus 성공적으로 사용할 수 없습니다(예: PNS가 이를 거부했거나 권한 부여 토큰을 제공하는 서비스에서 이를 거부함).

InvalidToken

WNS 등의 PNS에 연결하기 전에 권한 부여 토큰을 받아야 하는 경우 PNS에서 토큰을 거부하면 이 오류가 발생합니다.

WrongToken

PNS에 제공된 토큰은 유효하기는 하지만 지정된 PNSHandle에 아무 권한도 부여하지 않습니다.

PNSHandle 문제

BadChannel

제공된 PNSHandle을 PNS가 유효한 PNSHandle로 인식하지 않습니다.

ExpiredChannel

PNS가 PNSHandle을 인식하기는 하지만 PNSHandle이 더 이상 유효하지 않습니다.

WrongChannel

PNS가 핸들을 인식하기는 하지만 핸들이 현재 알림에 대해 유효하지 않습니다.

요청 문제

InvalidNotificationFormat

PNS에서 알림의 형식과 관련한 오류가 발생했습니다.

참고: 제공된 템플릿의 형식이 잘못되었거나 들어오는 메시지에 템플릿을 적용하면 잘못된 형식의 알림이 발생할 수 있습니다.

InvalidNotificationSize

PNS에서 알림의 크기와 관련한 오류가 발생했습니다.

참고: 위와 같이.