템플릿

템플릿을 사용하여 클라이언트 애플리케이션이 받고자 하는 알림의 정확한 형식을 지정할 수 있습니다. 템플릿을 사용하면 앱이 다음을 포함한 여러 가지 이점을 얻을 수 있습니다.

  • 플랫폼에 구애받지 않은 백 엔드입니다.

  • 개인 설정된 알림입니다.

  • 클라이언트 버전 독립성.

  • 쉽게 지역화할 수 있습니다.

이 섹션에서는 템플릿을 사용해 플랫폼 전체의 모든 디바이스를 대상으로 지정하여 플랫폼 제약 없는 알림을 보내고 각 디바이스에 대한 브로드캐스트 알림을 개인화하는 방법에 대한 심층 예제 두 가지를 제공합니다.

플랫폼 간 템플릿 사용

푸시 알림을 보내는 표준 방법은 보낼 각 알림에 대해 특정 페이로드를 플랫폼 알림 서비스(WNS, APNS)에 보내는 것입니다. 예를 들어 APNS에 경고를 보내려면 페이로드는 다음과 같은 형식의 Json 개체입니다.

{“aps”: {“alert” : “Hello!” }}

Windows Microsoft Store 애플리케이션에서 비슷한 알림 메시지를 보내려면 페이로드는 다음과 같습니다.

<toast>
  <visual>
    <binding template=\"ToastText01\">
      <text id=\"1\">Hello!</text>
    </binding>
  </visual>
</toast>

MPNS(Windows Phone) 및 GCM(Android) 플랫폼에 대해 유사한 페이로드를 만들 수 있습니다.

이 요구 사항 때문에 앱 백 엔드가 각 플랫폼에 대해 서로 다른 페이로드를 생성하며 결국 백 엔드는 앱의 프레젠테이션 계층의 일부를 담당합니다. 이 경우 지역화 및 그래픽 레이아웃(특히 여러 유형의 타일에 대한 알림을 포함하는 Windows 스토어 앱의 경우)을 포함한 몇 가지 문제가 있습니다.

Notification Hubs 템플릿 기능을 사용하여 클라이언트 앱은 태그 집합 외에 템플릿도 포함하는 템플릿 등록이라는 특수 등록을 만들 수 있습니다. 앞의 페이로드 예제를 가정할 때 유일한 플랫폼 독립적인 정보는 실제 경고 메시지(Hello! )입니다. 템플릿은 특정 클라이언트 앱을 등록하기 위해 플랫폼 독립적인 메시지의 형식을 지정하는 방법에 관한 알림 허브에 대한 지침의 집합입니다. 앞의 예제에서 플랫폼 독립적 메시지는 단일 속성 message = Hello!입니다.

다음 그림은 위의 과정을 보여 줍니다.

Templates

iOS 클라이언트 앱 등록에 대한 템플릿은 다음과 같습니다.

{“aps”:{“alert”:”$(message)”}}

Windows Microsoft Store 클라이언트 앱에 대한 유사한 템플릿은 다음과 같습니다.

<toast>
  <visual>
    <binding template=\"ToastText01\">
      <text id=\"1\">$(message)</text>
    </binding>
  </visual>
</toast>

실제 메시지는 식 $(message)으로 대체됩니다. 이 식은 이 특정 등록에 메시지를 보낼 때마다 Notification Hub에 이 템플릿을 따르는 메시지를 작성하도록 지시합니다.

클라이언트 애플리케이션은 여러 템플릿을 사용하기 위해 여러 등록을 만들 수 있습니다. 예를 들어 경고 메시지용 템플릿 및 타일 업데이트용 템플릿입니다. 또한 클라이언트 애플리케이션은 기본 등록(템플릿이 없는 등록)과 템플릿 등록을 혼합할 수 있습니다.

참고

Notification Hub는 동일한 클라이언트 앱에 속하는지 여부를 고려하지 않고 각 등록에 대해 하나의 알림을 보냅니다. 이 동작을 사용하면 플랫폼 독립적인 알림을 더 많은 알림으로 변환할 수 있습니다. 예를 들어 알림 허브에 대한 동일한 플랫폼 독립적 메시지를 백 엔드에서 해당 메시지를 인식하도록 요구하지 않고 토스트 경고와 타일 업데이트로 완벽하게 변환할 수 있습니다. 참고로 알림을 짧은 기간에 보내는 경우 일부 플랫폼(예: iOS)은 여러 알림을 동일한 디바이스로 축소할 수 있습니다.

개인 설정에 템플릿 사용

템플릿 사용의 또 다른 장점은 Notification Hubs를 사용하여 알림의 등록별 개인 설정을 수행할 수 있다는 것입니다. 예를 들어 특정 지역의 기상 조건이 포함된 타일을 표시하는 날씨 앱을 생각해 보겠습니다. 사용자는 섭씨 또는 화씨 온도 및 1일 또는 5일 예보 중에서 선택할 수 있습니다. 템플릿을 사용하여 각 클라이언트 앱 설치에서 필요한 형식(1일 섭씨, 1일 화씨, 5일 섭씨, 5일 화씨)에 대해 등록하고 템플릿을 채우는 데 필요한 모든 정보가 포함된 단일 메시지(예를 들어 섭씨 및 화씨 도가 포함된 5일 예보)를 백 엔드가 보내도록 합니다.

섭씨 온도가 포함된 1일 예보용 템플릿은 다음과 같습니다.

<tile>
  <visual>
    <binding template="TileWideSmallImageAndText04">
      <image id="1" src="$(day1_image)" alt="alt text"/>
      <text id="1">Seattle, WA</text>
      <text id="2">$(day1_tempC)</text>
    </binding>  
  </visual>
</tile>

Notification Hub로 전송된 메시지에는 다음 속성이 포함됩니다.

  • Day1_image

  • Day1_tempC

  • Day1_tempF

  • Day2_image

  • Day2_tempC

이 패턴을 사용하면 백 엔드는 앱 사용자에 대한 특정 개인 설정 옵션을 저장할 필요 없이 단일 메시지만 보냅니다. 다음 그림은 이 시나리오를 보여 줍니다.

Templates

템플릿에 등록하는 방법

템플릿에 등록하는 방법에 대한 자세한 내용은 등록 관리를 참조하세요.

템플릿 식 언어

템플릿은 문자열을 포함할 수 없습니다. XML 또는 JSON 문서로 제한됩니다. 또한 식을 특정 장소에만 배치할 수 있습니다. 예를 들어 XML은 노드 속성 또는 값에, JSON은 문자열 속성 값에 배치할 수 있습니다.

예를 들어, 다음은 올바른 XML 템플릿이 아닙니다.

<tile>
  <visual>
    <binding $(property)>
      <text id="1">Seattle, WA</text>
    </binding>  
  </visual>
</tile>

다음 섹션에서 설명한 대로 연결을 사용하는 경우 식은 중괄호로 래핑되어야 합니다. 예를 들어:

<tile>
  <visual>
    <binding template="ToastText01">
      <text id="1">{'Hi, ' + $(name)}</text>
    </binding>  
  </visual>
</tile>

JSON의 유사한 코드는 다음과 같이 표시됩니다.

{"aps":{"alert":"{'Hi, ' + $(name)}"}}

다음 표는 템플릿에 허용되는 언어를 보여 줍니다.

설명

$(prop)

지정한 이름을 가진 이벤트 속성에 대한 참조입니다. 속성 이름은 대/소문자를 구분하지 않습니다. 이 식은 속성이 없으면 속성의 텍스트 값 또는 빈 문자열로 확인됩니다.

$(prop, n)

위와 같이 텍스트는 n자에서 명시적으로 잘립니다. 예를 들어 $(title, 20) 제목 속성의 내용을 20자로 클리핑합니다.

.(prop, n)

위와 같지만 잘릴 때 뒤에 점 세 개가 붙습니다. 잘린 문자열과 접미사의 총 크기는 n 문자를 초과하지 않습니다. .(title, 20) 입력 속성이 "This is the title line"인 경우 이 값은 제목입니다.....

%(prop)

$(name) 출력이 URI로 인코딩된다는 점을 제외하면 비슷합니다.

#(prop)

JSON 템플릿(예: iOS 및 Android 템플릿)에 사용됩니다.

이 함수는 JSON 템플릿(예: Apple 템플릿)에서 사용되는 경우를 제외하고 이전에 지정한 것과 정확히 동일하게 $(prop) 작동합니다. 이 경우 이 함수가 "{','}"로 묶이지 않고 Javascript 형식의 숫자로 계산되는 경우( ‘myJsonProperty’ : ‘#(name)’)regexp: (0|([1-9][0-9]*))(\.[0-9]+)?((e|E)(+|-)?[0-9]+)?: 출력 JSON은 숫자)입니다.

예를 들어 , ‘badge : ‘#(name)’‘badge’ : 40 됩니다 (및 하지 ‘40‘).

‘text’ or “text”

리터럴입니다. 리터럴에는 작은따옴표 또는 큰따옴표로 묶인 임의의 텍스트가 포함됩니다.

expr1 + expr2

두 개의 식을 단일 문자열로 합치는 연결 연산자입니다.

위의 모든 형태가 식이 될 수 있습니다.

연결을 사용할 경우 전체 식을 {}로 묶어야 합니다. 예들 들어 {$(prop) + ‘ - ’ + $(prop2)}입니다.