Engage SDK Travel: 서드 파티 기술 통합 안내

Google에서는 사용자의 앱을 카테고리별로 정리하고 맞춤형 앱 콘텐츠 소비와 검색을 위한 새로운 몰입형 환경을 제공하는 기기 내 표시 경로를 구축하고 있습니다. 이 전체 화면 환경을 통해 개발자 파트너는 앱 외부의 전용 채널에서 최고의 리치 콘텐츠를 선보일 수 있습니다. 이 가이드에는 개발자 파트너가 Engage SDK를 사용하여 이 새로운 표시 경로 영역을 채우면서 여행 및 이벤트 콘텐츠를 통합하는 방법에 관한 안내가 포함되어 있습니다.

통합 세부정보

용어

이 통합에는 맞춤 콘텐츠, 추천, 연속이라는 세 가지 클러스터 유형이 포함되어 있습니다.

  • 맞춤 콘텐츠 클러스터에는 개별 개발자 파트너의 맞춤형 여행 및 이벤트 추천이 표시됩니다. 이러한 추천은 사용자에 맞게 맞춤설정하거나 일반화 (예: 인기 상품)할 수 있습니다. 이를 사용하여 기사, 이벤트, 숙박 시설 또는 관심 장소 추천을 표시합니다.

    • 맞춤 콘텐츠 클러스터는 ArticleEntity, EventEntity, LodgingEntity, PointOfInterestEntity 또는 StoreEntity 등록정보로 구성할 수 있지만 여러 항목 유형을 혼합하여 구성할 수는 없습니다.

    맞춤 콘텐츠의 구조는 다음과 같습니다.

    • 맞춤 콘텐츠 클러스터: 동일한 개발자 파트너의 맞춤 콘텐츠 그룹이 포함된 UI 뷰입니다.

    • 항목: 클러스터에 있는 단일 항목을 나타내는 객체입니다. 이 통합에서는 맞춤 콘텐츠 클러스터를 사용하여 표시되는 일부 항목을 제공합니다.

      • ArticleEntity: ArticleEntity는 여행 및 이벤트와 관련된 텍스트 기반 콘텐츠에 대한 추천을 나타냅니다. 기사, 블로그 게시물, 마케팅 콘텐츠, 뉴스 스니펫 등에 사용할 수 있습니다.

        그림 1: 맞춤 콘텐츠 클러스터 내의 단일 ArticleEntity를 보여주는 UI
      • EventEntity: EventEntity는 미래에 발생하는 이벤트를 나타냅니다. 이벤트 시작 시간은 사용자에게 전달해야 하는 중요한 정보입니다.

        그림 2: 맞춤 콘텐츠 클러스터 내의 단일 EventEntity를 보여주는 UI
      • LodgingEntity: LodgingEntity는 호텔, 아파트, 단기 및 장기 임대용 별장과 같은 숙박 시설을 나타냅니다.

        그림 3: 맞춤 콘텐츠 클러스터 내의 단일 LodgingEntity를 보여주는 UI
      • StoreEntity: StoreEntity는 상점, 식당, 카페 등을 나타냅니다. 사용자에게 전달해야 하는 중요한 정보인 식당 또는 상점이 있는 콘텐츠를 강조합니다.

        그림 4: 맞춤 콘텐츠 클러스터 내의 단일 StoreEntity를 보여주는 UI
      • PointOfInterestEntity: PointOfInterestEntity는 주유소, 이벤트 장소, 테마파크, 박물관, 관광 명소, 하이킹 코스 등 관심 장소를 나타냅니다. 위치 정보가 사용자에게 전달되어야 하는 중요한 정보인 콘텐츠를 강조 표시합니다. 숙박 시설, 상점 또는 음식점으로 사용해서는 안 됩니다.

        그림 5: 맞춤 콘텐츠 클러스터 내의 단일 PointOfInterestEntity를 보여주는 UI
  • 연속 클러스터에는 여러 개발자 파트너의 사용자가 최근에 참여한 콘텐츠가 단일 UI 그룹으로 표시됩니다. 각 개발자 파트너는 연속 클러스터에서 최대 10개의 항목을 브로드캐스트할 수 있습니다.

    연속 콘텐츠의 구조는 다음과 같습니다.

    • ArticleEntity: ArticleEntity는 여행 및 이벤트와 관련된 콘텐츠 추천을 나타냅니다. 이 항목은 사용자가 시청을 중단한 지점부터 계속 소비하려는 미완성 뉴스 기사 또는 기타 콘텐츠를 나타내는 데 사용할 수 있습니다. 예: 여행지나 이벤트에 관한 뉴스 스니펫, 블로그 게시물 스니펫

      그림 6. 연속 클러스터 내의 단일 ArticleEntity를 보여주는 UI입니다.
    • RestaurantBookingEntity: RestaurantBookingEntity는 식당이나 카페의 예약을 나타내며 사용자가 향후 또는 진행 중인 식당 예약을 추적하는 데 도움이 됩니다.

      그림 7. 연속 클러스터 내의 단일 RestaurantBookingEntity를 보여주는 UI입니다.
    • EventBookingEntity: EventBookingEntity는 이벤트의 예약을 나타내며 사용자가 예정된 이벤트 또는 진행 중인 이벤트 예약을 추적하는 데 도움이 됩니다. 이벤트에는 다음이 포함되나 이에 국한되지 않습니다.

      • 축구 경기 예약 등 스포츠 이벤트
      • e스포츠 예약 등 게임 이벤트
      • 영화관 영화 예약, 콘서트, 극장, 도서 사인 같은 엔터테인먼트 이벤트
      • 가이드 투어, 박물관 티켓 등의 여행 또는 관심 장소 예약
      • 소셜 / 세미나 / 콘퍼런스 예약
      • 교육 / 훈련 세션 예약
      그림 8. 연속 클러스터 내의 단일 EventBookingEntity를 보여주는 UI입니다.
    • LodgingBookingEntity: LodgingEntityBooking은 여행 숙박시설 예약을 나타내며 사용자가 예정되어 있거나 진행 중인 호텔이나 공유숙박 예약을 추적하는 데 도움을 줍니다.

      그림 9. 연속 클러스터 내의 단일 LodgingBookingEntity를 보여주는 UI입니다.
    • TransportationBookingEntity: TransportationBookingEntity는 모든 이동 수단별 예약을 나타내며, 사용자가 예정된 항공편, 페리, 기차, 버스, 차량 호출, 크루즈 예약을 추적하는 데 도움이 됩니다.

      그림 10. 연속 클러스터 내의 단일 TransportationBookingEntity를 보여주는 UI입니다.
    • VehicleRentalBookingEntity: VehicleRentalBookingEntity는 차량 대여 예약을 나타내며 사용자가 예정된 차량이나 진행 중인 차량 대여 예약을 추적하는 데 도움이 됩니다.

      그림 11. 연속 클러스터 내의 단일 VehicleRentalBookingEntity를 보여주는 UI입니다.
  • 추천 클러스터는 여러 개발자 파트너의 선택한 히어로 GenericFeaturedEntity를 하나의 UI 그룹으로 보여주는 UI 뷰입니다. 추천 클러스터는 1개가 표시되며 모든 맞춤 콘텐츠 클러스터보다 높은 우선순위로 UI 상단에 표시됩니다. 각 개발자 파트너는 추천 클러스터에 있는 여러 앱 개발자의 많은 항목 (다양한 유형일 수 있음)과 함께 추천 클러스터에서 지원되는 유형의 단일 항목을 브로드캐스트할 수 있습니다.

    • GenericFeaturedEntity: GenericFeaturedEntity는 추천 항목과는 다릅니다. 추천 항목은 개발자의 인기 콘텐츠 한 개에 사용해야 하며 사용자가 관심을 보이고 관련성이 있는 가장 중요한 단일 콘텐츠를 나타내야 합니다.

      그림 12: GenericFeaturedEntity 목록이 있는 FeaturedCluster를 보여주는 UI

사전 작업

최소 API 수준: 19

다음과 같이 com.google.android.play:engage 라이브러리를 앱에 추가합니다.

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.4.1'
}

요약

설계는 바인드된 서비스의 구현을 기반으로 합니다.

클라이언트가 게시할 수 있는 데이터에는 다음과 같은 다양한 클러스터 유형의 제한이 적용됩니다.

클러스터 유형 클러스터 제한 클러스터의 최소 항목 제한 클러스터의 최대 항목 제한
맞춤 콘텐츠 클러스터 최대 5개 5개 이상 최대 25개 (ArticleEntity, EventEntity, LodgingEntity, StoreEntity 또는 PointOfInterestEntity)
연속 클러스터 최대 1개 최소 1개 최대 10개 (ArticleEntity, RestaurantReservationEntity EventReservationEntity, LodgingReservationEntity, TransportationReservationEntity 또는 VehicleRentalReservationEntity)
추천 클러스터 최대 1개 최소 1개 최대 10개 (GenericFeaturedEntity)

1단계: 항목 데이터 제공

SDK는 각 항목 유형을 나타내는 여러 항목을 정의했습니다. 여행 및 이벤트 카테고리에는 다음 항목이 지원됩니다.

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. EventEntity
  4. LodgingEntity
  5. StoreEntity
  6. PointOfInterestEntity
  7. RestaurantReservationEntity
  8. EventReservationEntity
  9. LodgingReservationEntity
  10. TransportationReservationEntity
  11. VehicleRentalReservationEntity

아래 차트에는 각 유형에 사용 가능한 속성과 요구사항이 나와 있습니다.

GenericFeaturedEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
포스터 이미지 필수 항목

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

참고: 배지가 제공되는 경우 이미지 상단과 하단에 24dp의 안전한 공간을 두세요.

자세한 내용은 이미지 사양을 참고하세요.
제목 선택사항 항목의 제목입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 50자(영문 기준)

설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

배지 선택사항

각 배지는 자유 텍스트 (영문 기준 최대 15자) 또는 작은 이미지입니다.

이미지/동영상 상단에 특별한 UX 처리(예: 이미지의 배지 오버레이)

  • 예: '실시간 업데이트'
  • 예: 기사 읽기 시간

배지 - 텍스트 선택사항

배지 제목

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 15자(영문 기준)

배지 - 이미지 선택사항

Small image

특수한 UX 처리(예: 이미지/동영상 썸네일의 배지 오버레이)

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
카테고리 그룹 선택사항 항목의 콘텐츠 카테고리를 설명합니다.

Enum 목록

자세한 내용은 콘텐츠 카테고리 섹션을 참고하세요.

ArticleEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 50자(영문 기준)

포스터 이미지 선택사항

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

참고: 이미지를 사용하는 것이 좋습니다. 배지가 있는 경우 이미지 상단과 하단에서 모두 24dp의 안전한 공간을 확보하시기 바랍니다.

자세한 내용은 이미지 사양을 참고하세요.
소스 - 제목 선택사항 저자, 조직 또는 신고자의 이름

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 25자(영문 기준) 미만

소스 - 이미지 선택사항 저자, 조직, 기자 등 출처의 이미지 자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

배지 선택사항

각 배지는 자유 텍스트 (영문 기준 최대 15자) 또는 작은 이미지입니다.

이미지/동영상 상단에 특별한 UX 처리(예: 이미지의 배지 오버레이)

  • 예: '실시간 업데이트'
  • 예: 기사 읽기 시간

배지 - 텍스트 선택사항

배지 제목

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 15자(영문 기준)

배지 - 이미지 선택사항

Small image

특수한 UX 처리(예: 이미지/동영상 썸네일의 배지 오버레이)

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
콘텐츠 게시 시간 선택사항 앱에서 콘텐츠가 게시 / 업데이트된 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
최근 참여 시간 조건부 필수

사용자가 이 항목과 마지막으로 상호작용한 에포크 타임스탬프(밀리초)입니다.

참고: 항목이 연속 클러스터의 일부인 경우 이 필드가 필요합니다.

에포크 타임스탬프(밀리초)
진행률 조건부 필수

사용자가 지금까지 소비한 전체 콘텐츠의 비율입니다.

참고: 항목이 연속 클러스터의 일부인 경우 이 필드가 필요합니다.

0~100 사이의 int 값입니다.
카테고리 그룹 선택사항 항목의 콘텐츠 카테고리를 설명합니다.

Enum 목록

자세한 내용은 콘텐츠 카테고리 섹션을 참고하세요.

EventEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

문자열

권장 텍스트 크기: 최대 50자(영문 기준)

시작 시간 필수 항목

이벤트가 시작될 것으로 예상되는 에포크 타임스탬프입니다.

참고: 밀리초 단위로 표시됩니다.

에포크 타임스탬프(밀리초)
이벤트 모드 필수 항목

이벤트가 가상, 오프라인 또는 둘 다인지를 나타내는 필드입니다.

열거형: VIRTUAL, IN_PERSON 또는 HYBRID
포스터 이미지 필수 항목

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

참고: 이미지를 사용하는 것이 좋습니다. 배지가 있는 경우 이미지 상단과 하단에서 모두 24dp의 안전한 공간을 확보하시기 바랍니다.

자세한 내용은 이미지 사양을 참고하세요.
위치 - 국가 조건부 필수

이벤트가 열리는 국가입니다.

참고: 이는 IN_PERSON 또는 HYBRID인 이벤트에 필수입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 도시 조건부 필수

이벤트가 열리는 도시입니다.

참고: 이는 IN_PERSON 또는 HYBRID인 이벤트에 필수입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 표시 주소 조건부 필수

사용자에게 표시되어야 하는 이벤트가 열리는 주소 또는 장소 이름입니다.

참고: 이는 IN_PERSON 또는 HYBRID인 이벤트에 필수입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상세 주소 선택사항 이벤트가 호스팅되는 위치의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상태 선택사항 이벤트가 열리는 주/도입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 우편번호 선택사항 이벤트가 호스팅되는 위치의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 인근 지역 선택사항 이벤트가 열리는 주변 지역 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

종료 시간 선택사항

이벤트가 종료될 것으로 예상되는 에포크 타임스탬프입니다.

참고: 밀리초 단위로 표시됩니다.

에포크 타임스탬프(밀리초)
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

배지 선택사항

각 배지는 자유 텍스트 (영문 기준 최대 15자) 또는 작은 이미지입니다.

배지 - 텍스트 선택사항

배지 제목

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 15자(영문 기준)

배지 - 이미지 선택사항

Small image

특수한 UX 처리(예: 이미지/동영상 썸네일의 배지 오버레이)

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
가격 - 현재 가격 조건부 필수

이벤트 티켓/패스의 현재 가격입니다.

취소선 가격이 제공된 경우 제공해야 합니다.

자유 형식의 텍스트로 표시합니다.
가격 - StrikethroughPrice 선택사항 이벤트 티켓/패스의 원래 가격입니다. 자유 형식의 텍스트로 표시합니다.
가격 콜아웃 선택사항 가능한 경우 프로모션, 이벤트, 회원 할인이 표시된 가격 콜아웃입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

카테고리 그룹 선택사항 항목의 콘텐츠 카테고리를 설명합니다.

사용 가능한 Enum 목록

  • TYPE_MOVIES_AND_TV_SHOWS (예: 영화)
  • TYPE_DIGITAL_GAMES (예: e스포츠)
  • TYPE_MUSIC (예: 콘서트)
  • TYPE_TRAVEL_AND_LOCAL (예: 투어, 축제)
  • TYPE_HEALTH_AND_FITENESS (예: 요가 수업)
  • TYPE_EDUCATION (예: 수업)
  • TYPE_SPORTS (예: 미식축구 경기)
  • TYPE_DATING (예: Meetup)

자세한 내용은 콘텐츠 카테고리 섹션을 참고하세요.

LodgingEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

문자열

권장 텍스트 크기: 최대 50자(영문 기준)

포스터 이미지 필수 항목

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

참고: 배지가 제공되는 경우 이미지 상단과 하단에 24dp의 안전한 공간을 두세요.

자세한 내용은 이미지 사양을 참고하세요.
위치 - 국가 필수 항목 숙박이 열리는 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 도시 필수 항목 숙박이 열리는 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 표시 주소 필수 항목 사용자에게 표시될 숙박 시설의 주소입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상세 주소 선택사항 숙박 시설의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상태 선택사항 숙박 시설이 위치한 주/도 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 우편번호 선택사항 숙박 시설의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 인근 지역 선택사항 숙박 시설의 동네입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

배지 선택사항

각 배지는 자유 텍스트 (영문 기준 최대 15자) 또는 작은 이미지입니다.

배지 - 텍스트 선택사항

배지 제목

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 15자(영문 기준)

배지 - 이미지 선택사항

Small image

특수한 UX 처리(예: 이미지/동영상 썸네일의 배지 오버레이)

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

이용 가능 기간 - 시작 시간 선택사항 숙박 시설이 열려/이용 가능할 것으로 예상되는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
이용 가능 기간 - 종료 시간 선택사항 숙박 시설이 열려/이용 가능할 것으로 예상되는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
평점 - 최댓값 선택사항

평가 척도의 최댓값입니다.

현재 평점 값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 현재 값 선택사항

평가 척도의 현재 값입니다.

평점 최댓값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 개수 선택사항

숙박 시설의 평점 수입니다.

참고: 앱에서 사용자에게 표시되는 방식을 제어하려는 경우 이 필드를 제공하세요. 사용자에게 표시할 수 있는 간결한 문자열을 제공하세요. 예를 들어 개수가 1,000,000개인 경우 작은 디스플레이 크기에서 잘리지 않도록 1M과 같은 약어를 사용하는 것이 좋습니다.

문자열
평점 - 개수 값 선택사항

숙박 시설의 평점 수입니다.

참고: 디스플레이 약어 로직을 직접 처리하지 않으려면 이 필드를 제공하세요. 개수와 개수 값이 모두 있는 경우 개수를 사용하여 사용자에게 표시합니다.

Long
가격 - 현재 가격 조건부 필수

숙박 시설의 현재 가격입니다.

취소선 가격이 제공되는 경우 제공해야 합니다.

자유 형식의 텍스트로 표시합니다.
가격 - StrikethroughPrice 선택사항 숙박 시설의 원래 가격으로, UI에서 취소선 처리됩니다. 자유 형식의 텍스트로 표시합니다.
가격 콜아웃 선택사항 가능한 경우 프로모션, 이벤트, 회원 할인이 표시된 가격 콜아웃입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

StoreEntity

StoreEntity 객체는 개발자 파트너가 게시하려는 개별 매장(예: 레스토랑 또는 식료품점)을 나타냅니다.

속성 요구사항 설명 형식
포스터 이미지 필수 항목 이미지를 하나 이상 제공해야 합니다. 자세한 내용은 이미지 사양을 참고하세요.
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 선택사항 매장의 이름입니다.

자유 텍스트

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

위치 선택사항 매장의 위치입니다.

자유 텍스트

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

콜아웃 선택사항 매장에 관한 프로모션, 이벤트 또는 업데이트가 있는 경우 이를 표시하는 콜아웃입니다.

자유 텍스트

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

콜아웃 세부사항 선택사항 콜아웃의 세부 텍스트입니다.

자유 텍스트

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

설명 선택사항 매장에 관한 설명입니다.

자유 텍스트

권장 텍스트 크기: 90자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

평점 - 최댓값 선택사항

평가 척도의 최댓값입니다.

현재 평점 값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 현재 값 선택사항

평가 척도의 현재 값입니다.

평점 최댓값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 개수 선택사항

숙박 시설의 평점 수입니다.

참고: 앱에서 사용자에게 표시되는 방식을 제어하려는 경우 이 필드를 제공하세요. 사용자에게 표시할 수 있는 간결한 문자열을 제공하세요. 예를 들어 개수가 1,000,000개인 경우 작은 디스플레이 크기에서 잘리지 않도록 1M과 같은 약어를 사용하는 것이 좋습니다.

문자열
평점 - 개수 값 선택사항

숙박 시설의 평점 수입니다.

참고: 디스플레이 약어 로직을 직접 처리하지 않으려면 이 필드를 제공하세요. 개수와 개수 값이 모두 있는 경우 개수를 사용하여 사용자에게 표시합니다.

Long

PointOfInterestEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

문자열

권장 텍스트 크기: 최대 50자(영문 기준)

포스터 이미지 필수 항목

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

참고: 이미지를 사용하는 것이 좋습니다. 배지가 있는 경우 이미지 상단과 하단에서 모두 24dp의 안전한 공간을 확보하시기 바랍니다.

자세한 내용은 이미지 사양을 참고하세요.
위치 - 국가 필수 항목 관심 장소가 발생하는 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 도시 필수 항목 관심 장소가 열리는 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 표시 주소 필수 항목 사용자에게 표시되는 관심 장소의 주소입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상세 주소 선택사항 관심 장소의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상태 선택사항 관심 장소가 위치한 시/도 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 우편번호 선택사항 관심 장소의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 인근 지역 선택사항 관심가는 장소의 동네입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

이용 가능 기간 - 시작 시간 선택사항 관심 장소가 열려 있거나 사용 가능할 것으로 예상되는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
이용 가능 기간 - 종료 시간 선택사항 관심 장소가 열리고 사용 가능할 것으로 예상되는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
배지 선택사항

각 배지는 자유 텍스트 (영문 기준 최대 15자) 또는 작은 이미지입니다.

배지 - 텍스트 선택사항

배지 제목

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 15자(영문 기준)

배지 - 이미지 선택사항

Small image

특수한 UX 처리(예: 이미지/동영상 썸네일의 배지 오버레이)

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

평점 - 최댓값 선택사항

평가 척도의 최댓값입니다.

현재 평점 값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 현재 값 선택사항

평가 척도의 현재 값입니다.

평점 최댓값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 개수 선택사항

관심 장소의 평점 수입니다.

참고: 앱에서 사용자에게 표시되는 방식을 제어하려는 경우 이 필드를 제공하세요. 사용자에게 표시할 수 있는 간결한 문자열을 제공하세요. 예를 들어 개수가 1,000,000개인 경우 작은 디스플레이 크기에서 잘리지 않도록 1M과 같은 약어를 사용하는 것이 좋습니다.

문자열
평점 - 개수 값 선택사항

관심 장소의 평점 수입니다.

참고: 디스플레이 약어 로직을 직접 처리하지 않으려면 이 필드를 제공하세요. 개수와 개수 값이 모두 있는 경우 개수를 사용하여 사용자에게 표시합니다.

Long
가격 - 현재 가격 조건부 필수

관심 장소 티켓/입장권의 현재 가격입니다.

취소선 가격이 제공된 경우 제공해야 합니다.

자유 형식의 텍스트로 표시합니다.
가격 - StrikethroughPrice 선택사항 관심 장소 티켓/입장권의 원래 가격입니다. 자유 형식의 텍스트로 표시합니다.
가격 콜아웃 선택사항 가능한 경우 프로모션, 이벤트, 회원 할인이 표시된 가격 콜아웃입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

카테고리 그룹 선택사항 항목의 콘텐츠 카테고리를 설명합니다.

사용 가능한 Enum 목록

  • 유형_여행_및_지역
  • TYPE_MOVIES_AND_TV_SHOWS (예: 극장)
  • TYPE_MEDIC (예: 병원)
  • TYPE_EDUCATION (예: 학교)
  • TYPE_SPORTS (예: 경기장)

자세한 내용은 콘텐츠 카테고리 섹션을 참고하세요.

RestaurantReservationEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

문자열

권장 텍스트 크기: 최대 50자(영문 기준)

예약 시작 시간 필수 항목 예약이 시작될 것으로 예상되는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
위치 - 국가 필수 항목 레스토랑이 열리는 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 도시 필수 항목 레스토랑이 열리는 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 표시 주소 필수 항목 사용자에게 표시될 레스토랑의 주소입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상세 주소 선택사항 식당의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상태 선택사항 레스토랑이 위치한 주/도입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 우편번호 선택사항 음식점의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 인근 지역 선택사항 음식점의 동네입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

포스터 이미지 선택사항 여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다. 자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

테이블 크기 선택사항 예약 그룹의 사용자 수입니다. 0보다 큰 정수

EventReservationEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

문자열

권장 텍스트 크기: 최대 50자(영문 기준)

시작 시간 필수 항목

이벤트가 시작될 것으로 예상되는 에포크 타임스탬프입니다.

참고: 밀리초 단위로 표시됩니다.

에포크 타임스탬프(밀리초)
이벤트 모드 필수 항목

이벤트가 가상, 오프라인 또는 둘 다인지를 나타내는 필드입니다.

열거형: VIRTUAL, IN_PERSON 또는 HYBRID
위치 - 국가 조건부 필수

이벤트가 열리는 국가입니다.

참고: 이는 IN_PERSON 또는 HYBRID인 이벤트에 필수입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 도시 조건부 필수

이벤트가 열리는 도시입니다.

참고: 이는 IN_PERSON 또는 HYBRID인 이벤트에 필수입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 표시 주소 조건부 필수

사용자에게 표시되어야 하는 이벤트가 열리는 주소 또는 장소 이름입니다.

참고: 이는 IN_PERSON 또는 HYBRID인 이벤트에 필수입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상세 주소 선택사항 이벤트가 호스팅되는 위치의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상태 선택사항 이벤트가 열리는 주/도입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 우편번호 선택사항 이벤트가 호스팅되는 위치의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 인근 지역 선택사항 이벤트가 열리는 주변 지역 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

포스터 이미지 선택사항

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

참고: 이미지를 사용하는 것이 좋습니다. 배지가 있는 경우 이미지 상단과 하단에서 모두 24dp의 안전한 공간을 확보하시기 바랍니다.

자세한 내용은 이미지 사양을 참고하세요.
종료 시간 선택사항

이벤트가 종료될 것으로 예상되는 에포크 타임스탬프입니다.

참고: 밀리초 단위로 표시됩니다.

에포크 타임스탬프(밀리초)
서비스 제공업체 - 이름 선택사항

서비스 제공업체의 이름입니다.

참고: 서비스 제공업체에는 텍스트 또는 이미지가 필요합니다.

자유 텍스트입니다. 예: 이벤트 주최자/투어 이름
서비스 제공업체 - 이미지 선택사항

서비스 제공업체의 로고/이미지

참고: 서비스 제공업체에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

배지 선택사항

각 배지는 자유 텍스트 (영문 기준 최대 15자) 또는 작은 이미지입니다.

배지 - 텍스트 선택사항

배지 제목

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 15자(영문 기준)

배지 - 이미지 선택사항

Small image

특수한 UX 처리(예: 이미지/동영상 썸네일의 배지 오버레이)

참고: 배지에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
예약 ID 선택사항 이벤트 예약의 예약 ID입니다. 자유 형식의 텍스트로 표시합니다.
가격 - 현재 가격 조건부 필수

이벤트 티켓/패스의 현재 가격입니다.

취소선 가격이 제공된 경우 제공해야 합니다.

자유 형식의 텍스트로 표시합니다.
가격 - StrikethroughPrice 선택사항 이벤트 티켓/패스의 원래 가격입니다. 자유 형식의 텍스트로 표시합니다.
가격 콜아웃 선택사항 가능한 경우 프로모션, 이벤트, 회원 할인이 표시된 가격 콜아웃입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

평점 - 최댓값 선택사항

평가 척도의 최댓값입니다.

현재 평점 값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 현재 값 선택사항

평가 척도의 현재 값입니다.

평점 최댓값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 개수 선택사항

이벤트 평점의 수입니다.

참고: 앱에서 사용자에게 표시되는 방식을 제어하려는 경우 이 필드를 제공하세요. 사용자에게 표시할 수 있는 간결한 문자열을 제공하세요. 예를 들어 개수가 1,000,000개인 경우 작은 디스플레이 크기에서 잘리지 않도록 1M과 같은 약어를 사용하는 것이 좋습니다.

문자열
평점 - 개수 값 선택사항

이벤트 평점의 수입니다.

참고: 디스플레이 약어 로직을 직접 처리하지 않으려면 이 필드를 제공하세요. 개수와 개수 값이 모두 있는 경우 개수를 사용하여 사용자에게 표시합니다.

Long
카테고리 그룹 선택사항 항목의 콘텐츠 카테고리를 설명합니다.

사용 가능한 Enum 목록

  • TYPE_MOVIES_AND_TV_SHOWS (예: 영화)
  • TYPE_DIGITAL_GAMES (예: e스포츠)
  • TYPE_MUSIC (예: 콘서트)
  • TYPE_TRAVEL_AND_LOCAL (예: 투어, 축제)
  • TYPE_HEALTH_AND_FITENESS (예: 요가 수업)
  • TYPE_EDUCATION (예: 수업)
  • TYPE_SPORTS (예: 미식축구 경기)
  • TYPE_DATING (예: Meetup)

자세한 내용은 콘텐츠 카테고리 섹션을 참고하세요.

LodgingReservationEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

자유 텍스트입니다. 예: '12월 12일의 숙박'

권장 텍스트 크기: 최대 50자(영문 기준)

체크인 시간 필수 항목 예약 확인 시간을 나타내는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
체크아웃 시간 필수 항목 예약의 체크아웃 시간을 나타내는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
위치 - 국가 필수 항목 숙박 시설이 위치한 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 도시 필수 항목 숙박 시설이 위치한 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 표시 주소 필수 항목 사용자에게 표시될 숙박 시설의 주소입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상세 주소 선택사항 숙박 시설의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 상태 선택사항 숙박 시설이 위치한 주/도 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 우편번호 선택사항 숙박 시설의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

위치 - 인근 지역 선택사항 숙박 시설의 동네입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

포스터 이미지 선택사항

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

참고: 배지가 제공되는 경우 이미지 상단과 하단에 24dp의 안전한 공간을 두세요.

자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

예약 ID 선택사항 숙박 시설 예약의 예약 ID입니다. 자유 형식의 텍스트로 표시합니다.
평점 - 최댓값 선택사항

평가 척도의 최댓값입니다.

현재 평점 값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 현재 값 선택사항

평가 척도의 현재 값입니다.

평점 최댓값도 제공되는 경우 제공해야 합니다.

0.0보다 크거나 같은 숫자
평점 - 개수 선택사항

숙박 시설의 평점 수입니다.

참고: 앱에서 사용자에게 표시되는 방식을 제어하려는 경우 이 필드를 제공하세요. 사용자에게 표시할 수 있는 간결한 문자열을 제공하세요. 예를 들어 개수가 1,000,000개인 경우 작은 디스플레이 크기에서 잘리지 않도록 1M과 같은 약어를 사용하는 것이 좋습니다.

문자열
평점 - 개수 값 선택사항

숙박 시설의 평점 수입니다.

참고: 디스플레이 약어 로직을 직접 처리하지 않으려면 이 필드를 제공하세요. 개수와 개수 값이 모두 있는 경우 개수를 사용하여 사용자에게 표시합니다.

Long
가격 - 현재 가격 조건부 필수

숙박 시설의 현재 가격입니다.

취소선 가격이 제공되는 경우 제공해야 합니다.

자유 형식의 텍스트로 표시합니다.
가격 - StrikethroughPrice 선택사항 숙박 시설의 원래 가격으로, UI에서 취소선 처리됩니다. 자유 형식의 텍스트로 표시합니다.
가격 콜아웃 선택사항 가능한 경우 프로모션, 이벤트, 회원 할인이 표시된 가격 콜아웃입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

TransportationReservationEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

자유 텍스트입니다. 예: 'SFO에서 SAN으로'

권장 텍스트 크기: 최대 50자(영문 기준)

운송 유형 필수 항목 예약의 교통수단/유형입니다. 열거형: FLIGHT, TRAIN, BUS 또는 FERRY
출발 시간 필수 항목 출발 시간을 나타내는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
도착 시간 필수 항목 도착 시간을 나타내는 에포크 타임스탬프(밀리초)입니다. 에포크 타임스탬프(밀리초)
출발 위치 - 국가 선택사항 출발 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

출발 위치 - 도시 선택사항 출발 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

출발 위치 - 표시 주소 선택사항 사용자에게 표시되는 출발 위치입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

출발 위치 - 상세 주소 선택사항 출발 위치의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

출발 위치 - 주 선택사항 출발 위치의 시/도입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

출발 위치 - 우편번호 선택사항 출발 위치의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

출발 위치 - 인근 지역 선택사항 출발 위치의 인근 지역 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

도착 위치 - 국가 선택사항 도착 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

도착 위치 - 도시 선택사항 도착 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

도착 위치 - 표시 주소 선택사항 사용자에게 표시되는 도착 위치입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

도착 위치 - 상세 주소 선택사항 도착 위치의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

도착 위치 - 주 선택사항 도착 위치의 시/도입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

도착 위치 - 우편번호 선택사항 도착 위치의 우편번호입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

도착 위치 - 인근 지역 선택사항 도착 위치의 인근 지역 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

서비스 제공업체 - 이름 선택사항

서비스 제공업체의 이름입니다.

참고: 서비스 제공업체에는 텍스트 또는 이미지가 필요합니다.

자유 텍스트입니다. 예: 항공사 이름
서비스 제공업체 - 이미지 선택사항

서비스 제공업체의 로고/이미지

참고: 서비스 제공업체에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
포스터 이미지 선택사항

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

예약 ID 선택사항 교통수단 예약의 예약 ID입니다. 자유 형식의 텍스트로 표시합니다.
가격 - 현재 가격 조건부 필수

예약의 현재 가격입니다.

취소선 가격이 제공되는 경우 제공해야 합니다.

자유 형식의 텍스트로 표시합니다.
가격 - StrikethroughPrice 선택사항 예약의 원래 가격으로, UI에서 취소선 처리됩니다. 자유 형식의 텍스트로 표시합니다.
가격 콜아웃 선택사항 가능한 경우 프로모션, 이벤트, 회원 할인이 표시된 가격 콜아웃입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

운송 번호 필수 항공편 번호, 버스 번호, 기차 번호 또는 페리/크루즈 번호 자유 형식의 텍스트로 표시합니다.
탑승 시간 필수 예약의 탑승 시간을 나타내는 에포크 타임스탬프입니다(해당하는 경우). 에포크 타임스탬프(밀리초)

VehicleRentalReservationEntity

속성 요구사항 설명 형식
작업 URI 필수 항목

제공업체 앱의 항목으로 연결되는 딥 링크입니다.

참고: 기여 분석에 딥 링크를 사용할 수 있습니다. 이 FAQ 참고

URI
제목 필수 항목 항목의 제목입니다.

자유 텍스트입니다. 예: '에이비스 유니온 스퀘어 SF'

권장 텍스트 크기: 최대 50자(영문 기준)

수령 시간 필수 항목 예약의 수령 시간을 나타내는 에포크 타임스탬프입니다. 에포크 타임스탬프(밀리초)
반납 시간 선택사항 예약의 체크아웃 시간을 나타내는 에포크 타임스탬프입니다. 에포크 타임스탬프(밀리초)
수령 주소 - 국가 선택사항 픽업 위치의 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

픽업 주소 - 도시 선택사항 승차 위치의 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

수령 주소 - 표시 주소 선택사항 사용자에게 표시될 승차 위치입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

수령 주소 - 상세 주소 선택사항 픽업 위치의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

수령 주소 - 주/도 선택사항 승차 위치의 주/도 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

픽업 주소 - 우편번호 선택사항 승차 위치의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

수령 주소 - 인근 지역 선택사항 승차 위치의 인근 지역입니다 (해당하는 경우).

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

반품 주소 - 국가 선택사항 반품 위치의 국가입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

반품 주소 - 도시 선택사항 반품 위치의 도시입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

반품 주소 - 표시 주소 선택사항 사용자에게 표시될 반품 위치입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

반품 주소 - 상세 주소 선택사항 반품 위치의 상세 주소 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

반품 주소 - 주/도 선택사항 반품 위치의 주/도 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

반품 주소 - 우편번호 선택사항 반품 위치의 우편번호 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

반품 주소 - 인근 지역 선택사항 반품 위치의 인근 지역 (해당하는 경우)입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 최대 20자(영문 기준)

서비스 제공업체 - 이름 선택사항

서비스 제공업체의 이름입니다.

참고: 서비스 제공업체에는 텍스트 또는 이미지가 필요합니다.

자유 텍스트입니다. 예: 'Avis Car Rental'
서비스 제공업체 - 이미지 선택사항

서비스 제공업체의 로고/이미지

참고: 서비스 제공업체에는 텍스트 또는 이미지가 필요합니다.

자세한 내용은 이미지 사양을 참고하세요.
포스터 이미지 선택사항

여러 이미지가 제공된 경우 1개의 이미지만 표시됩니다. 권장 가로세로 비율은 16:9입니다.

자세한 내용은 이미지 사양을 참고하세요.
설명 선택사항

항목을 설명하는 단일 텍스트 단락입니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 180자(영문 기준)

자막 목록 선택사항

최대 3개의 자막, 각 자막에는 한 줄의 텍스트가 포함됩니다.

참고: 설명 또는 자막 목록 중 하나만 사용자에게 표시됩니다.

자유 형식의 텍스트로 표시합니다.

각 부제목의 권장 텍스트 크기: 최대 50자(영문 기준)

확인 ID 선택사항 차량 렌탈 예약의 확인 ID입니다. 자유 형식의 텍스트로 표시합니다.
가격 - 현재 가격 조건부 필수

예약의 현재 가격입니다.

취소선 가격이 제공되는 경우 제공해야 합니다.

자유 형식의 텍스트로 표시합니다.
가격 - StrikethroughPrice 선택사항 예약의 원래 가격으로, UI에서 취소선 처리됩니다. 자유 형식의 텍스트로 표시합니다.
가격 콜아웃 선택사항 가능한 경우 프로모션, 이벤트, 회원 할인이 표시된 가격 콜아웃입니다.

자유 형식의 텍스트로 표시합니다.

권장 텍스트 크기: 45자(영문 기준) 미만(텍스트가 너무 길면 생략 부호가 표시될 수 있음)

이미지 사양

이미지 확장 소재의 필수 사양은 다음 표에 나와 있습니다.

가로세로 비율 최소 픽셀 권장 픽셀

정사각형(1x1)

기본

300x300 1200x1200
가로 모드(1.91x1) 600x314 1200x628
세로 모드(4x5) 480x600 960x1200

Google이 액세스할 수 있도록 공개 CDN에 이미지를 호스팅해야 합니다.

파일 형식

PNG, JPG, 정적 GIF, WebP

최대 파일 크기

5120KB

추가 권장사항

  • 이미지 안전 영역: 중요한 콘텐츠를 이미지의 중앙 80%에 배치합니다.
  • 이미지가 어두운 테마 설정과 밝은 테마 설정에서 제대로 표시될 수 있도록 투명한 배경을 사용합니다.

콘텐츠 카테고리

콘텐츠 카테고리를 사용하면 앱이 여러 카테고리에 속한 콘텐츠를 게시할 수 있습니다. 이렇게 하면 다음과 같이 사전 정의된 일부 카테고리로 콘텐츠가 매핑됩니다.

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

Google이 액세스할 수 있도록 공개 CDN에 이미지를 호스팅해야 합니다.

콘텐츠 카테고리 사용 가이드라인

  1. ArticleEntityGenericFeaturedEntity와 같은 일부 항목은 콘텐츠 카테고리를 사용할 수 있습니다. EventEntity, EventBookingEntity, PointOfInterestEntity와 같은 다른 항목의 경우 이러한 카테고리 중 하위 집합만 적용할 수 있습니다. 목록을 채우기 전에 항목 유형에 적합한 카테고리 목록을 확인하세요.
  2. 일부 콘텐츠 카테고리에는 일반 항목과 ContentCategory의 조합 대신 특정 항목 유형을 사용하세요.

    • TYPE_MOVIES_AND_TV_SHOWS - 일반 항목을 사용하기 전에 시계 통합 가이드의 항목을 확인합니다.
    • TYPE_BOOKS - 일반 항목을 사용하기 전에 EbookEntity를 확인하세요.
    • TYPE_AUDIOBOOKS - 일반 항목을 사용하기 전에 AudiobookEntity를 확인하세요.
    • TYPE_SHOPPING - 일반 항목을 사용하기 전에 ShoppingEntity를 확인하세요.
    • TYPE_FOOD_AND_DRINK - 일반 항목을 사용하기 전에 음식 통합 가이드의 항목을 확인합니다.
  3. ContentCategory 필드는 선택사항이며, 콘텐츠가 앞에서 언급한 카테고리에 속하지 않는 경우 비워 두어야 합니다.

  4. 콘텐츠 카테고리가 여러 개 제공된 경우 가장 관련성 높은 콘텐츠 카테고리가 목록의 첫 번째 위치에 있는 콘텐츠와의 관련성 순서대로 제공합니다.

2단계: 클러스터 데이터 제공

콘텐츠 게시 작업을 백그라운드에서 실행하고(예: WorkManager 사용) 정기적으로 또는 이벤트를 기반으로 예약하는 것이 좋습니다(예: 사용자가 앱을 열 때마다 또는 사용자가 장바구니에 상품을 추가했을 때).

AppEngagePublishClient는 클러스터 게시를 담당합니다.

클라이언트에서 클러스터를 게시하는 API는 다음과 같습니다.

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

이 API는 서비스를 통합에 사용할 수 있는지, 콘텐츠를 기기에 표시할 수 있는지 확인하는 데 사용됩니다.

Kotlin


client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Java


client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

이 API는 RecommendationCluster 객체 목록을 게시하는 데 사용됩니다.

Kotlin


client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

서비스가 요청을 수신하면 다음 작업이 한 트랜잭션 내에서 발생합니다.

  • 개발자 파트너의 기존 RecommendationCluster 데이터가 삭제됩니다.
  • 요청 데이터가 파싱되어, 업데이트된 맞춤 콘텐츠 클러스터에 저장됩니다.

오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

publishFeaturedCluster

이 API는 FeaturedCluster 객체 목록을 게시하는 데 사용됩니다.

Kotlin


client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java


client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

서비스가 요청을 수신하면 다음 작업이 한 트랜잭션 내에서 발생합니다.

  • 개발자 파트너의 기존 FeaturedCluster 데이터가 삭제됩니다.
  • 요청 데이터가 파싱되어, 업데이트된 추천 클러스터에 저장됩니다.

오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

publishContinuationCluster

이 API는 ContinuationCluster 객체를 게시하는 데 사용됩니다.

Kotlin


client.publishContinuationCluster(
    PublishContinuationClusterRequest.Builder()
      .setContinuationCluster(
        ContinuationCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java


client.publishContinuationCluster(
            new PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    new ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

서비스가 요청을 수신하면 다음 작업이 한 트랜잭션 내에서 발생합니다.

  • 개발자 파트너의 기존 ContinuationCluster 데이터가 삭제됩니다.
  • 요청 데이터가 파싱되어, 업데이트된 연속 클러스터에 저장됩니다.

오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

publishUserAccountManagementRequest

이 API는 로그인 카드를 게시하는 데 사용됩니다. 로그인 작업은 앱이 콘텐츠를 게시하거나 더 맞춤설정된 콘텐츠를 제공할 수 있도록 사용자를 앱의 로그인 페이지로 안내합니다.

다음 메타데이터는 로그인 카드의 일부입니다.

속성 요구사항 설명
작업 URI 필수 작업으로 연결되는 딥 링크(앱 로그인 페이지로 이동)
이미지 선택사항 - 제공되지 않은 경우 제목을 입력해야 합니다.

카드에 표시된 이미지

해상도 1264x712의 16x9 가로세로 비율 이미지

제목 선택사항 - 제공되지 않은 경우 이미지를 제공해야 합니다. 카드상의 제목
작업 텍스트 선택사항 CTA에 표시된 텍스트(로그인)
부제 선택사항 카드의 부제목(선택사항)

Kotlin


var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java


SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

서비스가 요청을 수신하면 다음 작업이 한 트랜잭션 내에서 발생합니다.

  • 개발자 파트너의 기존 UserAccountManagementCluster 데이터가 삭제됩니다.
  • 요청 데이터가 파싱되어, 업데이트된 UserAccountManagementCluster 클러스터에 저장됩니다.

오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

updatePublishStatus

내부적인 이유로 어떤 클러스터도 게시되지 않는 경우 updatePublishStatus API를 사용하여 게시 상태를 업데이트할 것을 적극 권장합니다. 이는 다음과 같은 이유로 중요합니다.

  • 콘텐츠가 게시되는 경우에도(STATUS == PUBLISHED) 모든 시나리오에서 상태를 제공하는 것은 이 명시적 상태를 사용하여 통합의 상태 및 기타 측정항목을 전달하는 대시보드를 채우는 데 중요합니다.
  • 게시된 콘텐츠는 없지만 통합 상태가 손상되지 않은 경우(STATUS == NOT_PUBLISHED) Google은 앱 상태 대시보드에서 알림을 트리거하지 않을 수 있습니다. 이는 제공업체의 관점에서 예상되는 상황으로 인해 콘텐츠가 게시되지 않음을 확인합니다.
  • 이를 통해 개발자는 데이터가 게시되는 시점과 게시되지 않는 시점에 관한 유용한 정보를 제공할 수 있습니다.
  • Google에서는 상태 코드를 사용하여 사용자가 앱에서 특정 작업을 하도록 유도하여 사용자가 앱 콘텐츠를 보거나 극복할 수 있습니다.

적합한 게시 상태 코드 목록은 다음과 같습니다.

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

로그인하지 않은 사용자로 인해 콘텐츠가 게시되지 않은 경우 로그인 카드를 게시하는 것이 좋습니다. 어떠한 이유로든 제공업체가 로그인 카드를 게시할 수 없는 경우 상태 코드 NOT_PUBLISHED_REQUIRES_SIGN_IN을 사용하여 updatePublishStatus API를 호출하는 것이 좋습니다.

Kotlin


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

이 API는 맞춤 콘텐츠 클러스터의 콘텐츠를 삭제하는 데 사용됩니다.

Kotlin


client.deleteRecommendationClusters()

Java


client.deleteRecommendationClusters();

서비스가 요청을 수신하면 맞춤 콘텐츠 클러스터에서 기존 데이터를 삭제합니다. 오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

deleteFeaturedCluster

이 API는 추천 클러스터의 콘텐츠를 삭제하는 데 사용됩니다.

Kotlin


client.deleteFeaturedCluster()

Java


client.deleteFeaturedCluster();

서비스가 요청을 수신하면 추천 클러스터에서 기존 데이터를 삭제합니다. 오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

deleteContinuationCluster

이 API는 연속 클러스터의 콘텐츠를 삭제하는 데 사용됩니다.

Kotlin


client.deleteContinuationCluster()

Java


client.deleteContinuationCluster();

서비스가 요청을 수신하면 연속 클러스터에서 기존 데이터를 삭제합니다. 오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

deleteUserManagementCluster

이 API는 UserAccountManagement 클러스터의 콘텐츠를 삭제하는 데 사용됩니다.

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

서비스가 요청을 수신하면 UserAccountManagement 클러스터에서 기존 데이터를 삭제합니다. 오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

deleteClusters

이 API는 특정 클러스터 유형의 콘텐츠를 삭제하는 데 사용됩니다.

Kotlin


client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_CONTINUATION)
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      .build())

Java


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_CONTINUATION)
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                .build());

서비스가 요청을 수신하면 지정된 클러스터 유형과 일치하는 모든 클러스터에서 기존 데이터가 삭제됩니다. 클라이언트는 하나 이상의 클러스터 유형을 전달하도록 선택할 수 있습니다. 오류가 발생하면 전체 요청이 거부되고 기존 상태가 유지됩니다.

오류 처리

후속 작업을 실행하여 성공적인 작업을 복구하고 다시 제출할 수 있도록 게시 API의 작업 결과를 수신 대기하는 것이 좋습니다.

Kotlin


client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

Java


client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

오류는 AppEngageException으로 반환되며 원인은 오류 코드로 포함됩니다.

오류 코드 참고
SERVICE_NOT_FOUND 지정된 기기에서 서비스를 사용할 수 없습니다.
SERVICE_NOT_AVAILABLE 서비스는 특정 기기에서 사용할 수 있지만 호출 시점에는 사용할 수 없습니다(예: 명시적으로 사용 중지됨).
SERVICE_CALL_EXECUTION_FAILURE 스레딩 문제로 인해 작업을 실행할 수 없습니다. 이 경우 재시도할 수 있습니다.
SERVICE_CALL_PERMISSION_DENIED 호출자가 서비스를 호출할 수 없습니다.
SERVICE_CALL_INVALID_ARGUMENT 요청에 잘못된 데이터가 포함되어 있습니다(예: 허용된 클러스터 수를 초과함).
SERVICE_CALL_INTERNAL 서비스 측에 오류가 있습니다.
SERVICE_CALL_RESOURCE_EXHAUSTED 서비스 호출이 너무 자주 이루어집니다.

3단계: 브로드캐스트 인텐트 처리

작업을 통해 게시 콘텐츠 API를 호출하는 것 외에도 콘텐츠 게시 요청을 수신하도록 BroadcastReceiver를 설정해야 합니다.

브로드캐스트 인텐트의 목표는 주로 앱 재활성화 및 데이터 동기화 강제입니다. 브로드캐스트 인텐트는 자주 전송되지 않도록 설계되었습니다. 이는 참여 서비스에서 콘텐츠가 오래되었을 수 있다고 판단할 때만(예: 1주일) 트리거됩니다. 이렇게 하면 애플리케이션이 장기간 실행되지 않은 경우에도 사용자에게 새로운 콘텐츠 환경을 제공할 수 있습니다.

BroadcastReceiver는 다음 두 가지 방법으로 설정해야 합니다.

  • Context.registerReceiver()를 사용하여 BroadcastReceiver 클래스의 인스턴스를 동적으로 등록합니다. 이렇게 하면 여전히 메모리에 있는 애플리케이션의 통신이 가능해집니다.

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
  // received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION))

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED))

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION))
}

Java

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION));

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • AndroidManifest.xml 파일에서 <receiver> 태그를 사용하여 구현을 정적으로 선언합니다. 이를 통해 애플리케이션이 실행 중이 아닐 때 브로드캐스트 인텐트를 수신할 수 있고, 애플리케이션이 콘텐츠를 게시할 수 있습니다.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

다음 인텐트가 서비스에서 전송됩니다.

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION 이 인텐트를 수신할 때 publishRecommendationClusters 호출을 시작하는 것이 좋습니다.
  • com.google.android.engage.action.PUBLISH_FEATURED 이 인텐트를 수신할 때 publishFeaturedCluster 호출을 시작하는 것이 좋습니다.
  • com.google.android.engage.action.PUBLISH_CONTINUATION 이 인텐트를 수신할 때 publishContinuationCluster 호출을 시작하는 것이 좋습니다.

통합 워크플로

통합 완료 후 통합 확인에 관한 단계별 안내는 Engage 개발자 통합 워크플로를 참고하세요.

FAQ

FAQ에 관해서는 Engage SDK 관련 자주 묻는 질문(FAQ)을 참고하세요.

문의

통합 과정에서 궁금한 점이 있으면 engage-developers@google.com으로 문의해 주세요.

다음 단계

이 통합을 완료한 후 단계는 다음과 같습니다.

  • engage-developers@google.com으로 이메일을 보내 Google에서 테스트할 준비가 된 통합 APK를 첨부하세요.
  • Google은 내부적으로 인증 및 검토를 실행하여 통합이 예상대로 작동하는지 확인합니다. 변경이 필요한 경우 Google에서는 필요한 세부정보와 함께 연락을 드립니다.
  • 테스트가 완료되고 아무것도 변경할 필요가 없으면 Google에서는 업데이트된 통합 APK를 Play 스토어에 게시할 수 있음을 알려 드립니다.
  • 업데이트된 APK가 Play 스토어에 게시되었음을 Google에서 확인한 후에는 맞춤 콘텐츠, 추천, 연속 클러스터가 게시되고 사용자에게 표시될 수 있습니다.