Skip to content

Braze 로고 Braze 소프트웨어 개발 키트 통합

Braze SDK를 통합하는 방법을 알아보세요. 각 SDK는 자체 공개 GitHub 리포지토리에서 호스팅되며, 여기에는 Braze 기능을 테스트하거나 자체 애플리케이션과 함께 구현하는 데 사용할 수 있는 완전히 빌드 가능한 샘플 앱이 포함되어 있습니다. 자세히 알아보려면 참조, 리포지토리 및 샘플 앱을 참조하세요. SDK에 대한 자세한 내용은 시작하기를 참조하세요: 통합 개요.

웹 Braze SDK에 대하여

웹 Braze SDK를 사용하면 분석을 수집하고 웹 사용자에게 풍부한 인앱 메시지, 푸시 및 콘텐츠 카드 메시지를 표시할 수 있습니다. 자세한 내용은 Braze JavaScript 참조 설명서를 참조하십시오.

웹 SDK 통합

다음 방법을 사용하여 웹 Braze SDK를 통합할 수 있습니다. 추가 옵션은 기타 통합 방법을 참조하십시오.

  • 코드 기반 통합: 선호하는 패키지 관리자 또는 Braze CDN을 사용하여 코드베이스에 웹 Braze SDK를 직접 통합하십시오. 이렇게 하면 SDK가 로드되고 구성되는 방식을 완전히 제어할 수 있습니다.
  • Google 태그 관리자: 사이트의 코드를 수정하지 않고 웹 Braze SDK를 통합할 수 있는 코드 없는 솔루션입니다. 자세한 내용은 Braze SDK와 함께하는 Google 태그 관리자를 참조하십시오.

1단계: Braze 라이브러리 설치

다음 방법 중 하나를 사용하여 Braze 라이브러리를 설치할 수 있습니다. 그러나 웹사이트가 Content-Security-Policy을 사용하는 경우 계속하기 전에 콘텐츠 보안 정책을 검토하십시오.

사이트에서 NPM 또는 Yarn 패키지 관리자를 사용하는 경우 Braze NPM 패키지를 종속성으로 추가할 수 있습니다.

이제 v3.0.0부터 Typescript 정의가 포함됩니다. 2.x에서 3.x로 업그레이드할 때 참고할 사항은 체인지로그를 참조하세요.

1
2
3
npm install --save @braze/web-sdk
# or, using yarn:
# yarn add @braze/web-sdk

설치가 완료되면 일반적인 방법으로 라이브러리의 import 또는 require 작업을 수행할 수 있습니다.

1
2
3
import * as braze from "@braze/web-sdk";
// or, using `require`
const braze = require("@braze/web-sdk");

라이브러리를 비동기적으로 로드하는 CDN 호스팅 스크립트를 참조하여 Braze 웹 SDK를 HTML에 직접 추가합니다.

2단계: SDK 초기화

Braze 웹 SDK가 웹사이트에 추가된 후, Braze 대시보드 내의 설정 > 앱 설정에서 찾은 API 키 및 SDK 엔드포인트 URL로 라이브러리를 초기화하십시오. braze.initialize()에 대한 옵션의 전체 목록과 다른 JavaScript 방법은 Braze JavaScript 설명서를 참조하십시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// initialize the SDK
braze.initialize('YOUR-API-KEY-HERE', {
    baseUrl: "YOUR-SDK-ENDPOINT-HERE",
    enableLogging: false, // set to `true` for debugging
    allowUserSuppliedJavascript: false, // set to `true` to support custom HTML messages
});

// Enable automatic display of in-app messages
// Required if you want in-app messages to display automatically when triggered
braze.automaticallyShowInAppMessages();

// if you use Content Cards
braze.subscribeToContentCardsUpdates(function(cards){
    // cards have been updated
});

// optionally set the current user's external ID before starting a new session
// you can also call `changeUser` later in the session after the user logs in
if (isLoggedIn){
    braze.changeUser(userIdentifier);
}

// `openSession` should be called last - after `changeUser` and `automaticallyShowInAppMessages`
braze.openSession();

익명 사용자의 세션 누락 문제 해결

“세션 누락” 동작이 보이거나 웹에서 익명으로 남아 있는 사용자의 세션을 추적할 수 없는 경우, 초기화 중에 braze.openSession()을 호출하는지 확인하십시오.

  • 시나리오: 익명 사용자는 Braze ID를 반환할 수 있지만 세션 데이터는 비어 있거나 누락됩니다.
  • 원인: 구현이 braze.openSession()를 호출하지 않습니다.
  • 해결: 항상 초기화 후 braze.openSession()를 호출하십시오(외부 ID를 설정한 경우 braze.changeUser() 후에 호출).

자세한 정보는 단계 2: SDK 초기화.

필수 조건

이 통합 방법을 사용하기 전에 Google Tag Manager에 대한 계정과 컨테이너를 생성해야 합니다.

1단계: 태그 템플릿 갤러리를 엽니다

Google Tag Manager에서 작업 공간을 선택한 다음 템플릿을 선택합니다. 태그 템플릿 창에서 갤러리 검색을 선택합니다.

Google Tag Manager의 예제 작업 공간에 대한 템플릿 페이지입니다.

2단계: 초기화 태그 템플릿을 추가합니다

템플릿 갤러리에서 braze-inc을 검색한 다음 Braze 초기화 태그를 선택합니다.

다양한 'braze-inc' 템플릿을 보여주는 템플릿 갤러리입니다.

작업 공간에 추가 > 추가를 선택합니다.

Google Tag Manager의 'Braze 초기화 태그' 페이지입니다.

3단계: 태그를 구성합니다

템플릿 섹션에서 새로 추가한 템플릿을 선택합니다.

Braze 초기화 태그 템플릿을 보여주는 Google Tag Manager의 "템플릿" 페이지입니다.

연필 아이콘을 선택하여 태그 구성 드롭다운을 엽니다.

연필 아이콘이 표시된 태그 구성 타일입니다.

필수 최소 정보를 입력하세요:

추가 초기화 설정을 위해 Braze 초기화 옵션을 선택하고 필요한 옵션을 선택하십시오.

태그 구성 아래의 Braze 초기화 옵션 목록입니다.

4단계: 초기화 옵션 선택

Braze 초기화 태그는 다음 옵션을 노출합니다. 이들 대부분은 웹 SDK InitializationOptions에 직접 매핑되며, 일부는 초기화 중 태그가 호출할 웹 SDK 메서드에 해당합니다. 통합 요구 사항에 맞는 옵션을 선택하십시오:

GTM 옵션 웹 SDK 구성 또는 메서드 설명
HTML 인앱 메시지 허용 allowUserSuppliedJavascript HTML 인앱 메시지, 배너 및 사용자 제공 JavaScript 클릭 작업을 활성화합니다. 사용자 정의 HTML을 사용하는 HTML 인앱 메시지배너에 필요합니다. HTML 및 JavaScript 콘텐츠를 신뢰할 때만 이 기능을 활성화하십시오. 사용자 제공 JavaScript 실행을 허용합니다.
앱 버전 번호 appVersion, appVersionNumber 세분화를 위한 앱 버전(예: 1.2.3.4).
새 세션 자동 열기 braze.openSession() SDK가 초기화된 후 이 메서드를 호출하여 새 세션을 엽니다.
새 인앱 메시지 자동 표시 braze.automaticallyShowInAppMessages() 초기화 후 이 메서드를 호출하여 서버에서 도착한 새 인앱 메시지를 자동으로 표시합니다.
자동 푸시 토큰 유지 관리 비활성화 disablePushTokenMaintenance 새 세션에서 Braze 백엔드와 푸시 토큰을 동기화하지 않도록 SDK를 중지합니다.
자동 서비스 종사자 등록 비활성화 manageServiceWorkerExternally 서비스 종사자를 직접 등록하고 제어하는 경우 사용하십시오.
쿠키 비활성화 noCookies 사용자/세션 데이터에 쿠키 대신 localStorage를 사용합니다. 교차 서브도메인 인식을 방지합니다.
폰트 어썸 비활성화 doNotLoadFontAwesome SDK가 CDN에서 Font Awesome을 로드하지 않도록 방지합니다. 사이트에 자체 Font Awesome이 있는 경우 사용하십시오.
SDK 인증 활성화 enableSdkAuthentication SDK 인증을 활성화합니다.
웹 SDK 로깅 활성화 enableLogging 디버깅을 위한 콘솔 로깅을 활성화합니다. 프로덕션 전에 제거하십시오.
트리거된 메시지 간 최소 간격 minimumIntervalBetweenTriggerActionsInSeconds 트리거 작업 간 최소 초(기본값: 30).
새 탭에서 카드 열기 openCardsInNewTab 기본 피드 UI를 사용할 때 콘텐츠 카드 링크를 새 탭에서 엽니다.
서비스 종사자 위치 serviceWorkerLocation 서비스 종사자 파일의 사용자 지정 경로(기본값: /service-worker.js).
세션 타임아웃 (초) sessionTimeoutInSeconds 세션 타임아웃(초) (기본값: 1800).

GTM 템플릿에서 노출되지 않은 옵션(예: contentSecurityNonce, localization 또는 devicePropertyAllowlist)의 경우 런타임 초기화를 대신 사용하세요.

5단계: 모든 페이지에서 트리거로 설정

초기화 태그는 사이트의 모든 페이지에서 실행되어야 합니다. 이것은 Braze SDK 메서드를 사용하고 웹 푸시 분석을 기록할 수 있게 해줍니다.

Step 6: 통합을 확인하세요

다음 옵션 중 하나를 사용하여 통합을 확인할 수 있습니다:

  • Option 1: Google Tag Manager의 디버깅 툴를 사용하여 Braze 초기화 태그가 구성된 페이지나 이벤트에서 올바르게 트리거되는지 확인할 수 있습니다.
  • Option 2: 웹 페이지에서 Braze로 전송된 네트워크 요청을 확인하세요. 추가로, 전역 window.braze 라이브러리가 이제 정의되어야 합니다.

봇 트래픽 필터링

MAU는 봇 사용자의 비율을 포함할 수 있으며, 이는 월간 활성 사용자 수를 부풀립니다. Braze 웹 SDK는 일부 일반 웹 크롤러(예: 검색 엔진 봇 및 소셜 미디어 미리보기 봇)에 대한 내장 감지를 포함하지만, SDK 업데이트만으로는 모든 새로운 봇을 일관되게 감지할 수 없으므로 강력한 솔루션으로 봇을 감지하는 데 적극적으로 대처하는 것이 특히 중요합니다.

SDK 측의 봇 감지의 한계

웹 SDK는 알려진 크롤러를 필터링하는 기본 사용자 에이전트 기반 봇 감지를 포함합니다. 그러나 이 접근 방식에는 한계가 있습니다:

  • 새로운 봇이 지속적으로 등장합니다: AI 회사 및 기타 행위자들은 감지를 피하기 위해 자신을 위장할 수 있는 새로운 봇을 정기적으로 생성합니다.
  • 사용자 에이전트 스푸핑: 정교한 봇은 합법적인 브라우저 사용자 에이전트를 모방할 수 있습니다.
  • 커스텀 봇: 비기술적 사용자는 이제 대규모 언어 모델(LLM)을 사용하여 쉽게 봇을 생성할 수 있어 봇 행동이 예측 불가능해집니다.

봇 필터링 구현

가장 강력한 솔루션은 Braze SDK를 초기화하기 전에 자체 봇 필터링 로직을 구현하는 것입니다. 일반적인 접근 방식에는 다음이 포함됩니다:

사용자 상호작용 요구

사용자가 쿠키 동의 배너를 수락하거나 스크롤하거나 클릭하는 등의 의미 있는 상호작용을 수행할 때까지 SDK 초기화를 지연하는 것을 고려하십시오. 이 접근 방식은 구현이 더 쉽고 봇 트래픽을 필터링하는 데 매우 효과적일 수 있습니다.

커스텀 봇 감지

특정 봇 트래픽 패턴에 기반한 커스텀 감지를 구현하세요, 예를 들어:

  • 트래픽에서 식별한 패턴에 대한 사용자 에이전트 문자열 분석
  • 헤드리스 브라우저 지표 확인
  • 서드파티 봇 감지 서비스 사용
  • 귀하의 사이트에 특정한 행동 신호 모니터링

조건부 초기화 예시:

1
2
3
4
5
6
7
8
// Only initialize Braze if your custom bot detection determines this is not a bot
if (!isLikelyBot()) {
  braze.initialize('YOUR-API-KEY-HERE', {
    baseUrl: "YOUR-SDK-ENDPOINT-HERE"
  });
  braze.automaticallyShowInAppMessages();
  braze.openSession();
}

Best practices

  • MAU 데이터와 웹 트래픽 패턴을 정기적으로 분석하여 새로운 봇 행동을 식별하세요.
  • 정상 사용자가 추적되지 않도록 봇 필터링을 철저히 테스트하세요.
  • 환경에서 관찰한 봇 트래픽 패턴에 따라 필터링 로직을 업데이트하세요.

선택적 구성

로깅

로깅을 빠르게 활성화하려면 웹사이트 URL에 ?brazeLogging=true를 매개변수로 추가하면 됩니다. 또는 기본 또는 사용자 지정 로깅을 사용 설정할 수 있습니다. 모든 플랫폼에 대한 중앙 집중식 개요는 상세 로깅를 참조하세요.

기본 로깅

SDK가 초기화되기 전에 기본 디버깅 메시지를 JavaScript 콘솔에 기록하려면 enableLogging를 사용하세요.

1
enableLogging: true

방법은 다음과 유사해야 합니다:

1
2
3
4
5
braze.initialize('API-KEY', {
    baseUrl: 'API-ENDPOINT',
    enableLogging: true
});
braze.openSession();

SDK가 초기화된 후 기본 디버깅 메시지를 JavaScript 콘솔에 기록하려면 braze.toggleLogging()를 사용하세요. 방법은 다음과 유사해야 합니다:

1
2
3
4
5
6
braze.initialize('API-KEY', {
    baseUrl: 'API-ENDPOINT',
});
braze.openSession();
...
braze.toggleLogging();

사용자 지정 로깅

JavaScript 콘솔에 커스텀 디버깅 메시지를 기록하려면 setLogger을 사용하세요. 기본 로그와 달리 이러한 로그는 사용자에게 표시되지 않습니다.

1
setLogger(loggerFunction: (message: STRING) => void): void

STRING 를 단일 문자열 매개변수로 메시지로 바꿉니다. 방법은 다음과 유사해야 합니다:

1
2
3
4
5
braze.initialize('API-KEY');
braze.setLogger(function(message) {
    console.log("Braze Custom Logger: " + message);
});
braze.openSession();

SDK 업그레이드하기

예를 들어, 콘텐츠 전송 네트워크에서 Braze Web SDK를 참조할 때, https://js.appboycdn.com/web-sdk/a.a/braze.min.js (기본 통합 지침에서 권장하는 대로) 사용자는 사이트를 새로 고칠 때 자동으로 소규모 업데이트(버그 수정 및 하위 호환 기능, 위의 예에서 a.a.a에서 a.a.z 버전)를 받습니다.

그러나 주요 변경 사항을 출시할 때는 통합에 영향을 미치지 않도록 Braze Web SDK를 수동으로 업그레이드해야 합니다. 또한, SDK를 다운로드하여 직접 호스팅하는 경우 자동으로 버전 업데이트를 받지 않으며 최신 기능과 버그 수정을 받으려면 수동으로 업그레이드해야 합니다.

RSS 리더 또는 원하는 서비스를 사용하여 릴리스 피드를 따라 최신 릴리스를 최신 상태로 유지할 수 있습니다. 웹 SDK 릴리스 내역에 대한 전체 설명은 체인지로그를 참조하세요. Braze 웹 SDK를 업그레이드하려면:

  • https://js.appboycdn.com/web-sdk/[OLD VERSION NUMBER]/braze.min.js의 버전 번호를 변경하거나 패키지 매니저의 종속성에서 Braze 라이브러리 버전을 업데이트합니다.
  • 웹 푸시가 통합된 경우 사이트의 서비스 종사자 파일을 업데이트합니다. 기본적으로 사이트의 루트 디렉토리 내 /service-worker.js에 있지만 일부 통합에서는 위치를 사용자 지정할 수 있습니다. 서비스 워커 파일을 호스팅하려면 루트 디렉터리에 액세스해야 합니다.

적절한 기능을 위해 이 두 파일을 서로 조정하여 업데이트해야 합니다.

기타 통합 방법

가속 모바일 페이지 (AMP)

See more

1단계: AMP 웹 푸시 스크립트 포함

다음 비동기 스크립트 태그를 기억합니다.

1
<script async custom-element="amp-web-push" src="https://cdn.ampproject.org/v0/amp-web-push-0.1.js"></script>

2단계: 구독 위젯 추가

사용자가 푸시를 구독하고 탈퇴할 수 있도록 하는 HTML 본문에 위젯을 추가하세요.

1
2
3
4
5
6
7
8
9
<!-- A subscription widget -->
<amp-web-push-widget visibility="unsubscribed" layout="fixed" width="250" height="80">
  <button on="tap:amp-web-push.subscribe">Subscribe to Notifications</button>
</amp-web-push-widget>

<!-- An unsubscription widget -->
<amp-web-push-widget visibility="subscribed" layout="fixed" width="250" height="80">
  <button on="tap:amp-web-push.unsubscribe">Unsubscribe from Notifications</button>
</amp-web-push-widget>

3단계: helper-iframepermission-dialog 추가

AMP 웹 푸시 구성 요소는 푸시 구독을 처리하기 위해 팝업을 생성하므로, 이 기능을 활성화하려면 다음 도우미 파일을 프로젝트에 추가해야 합니다:

4단계: 서비스 워커 파일 만들기

웹사이트의 루트 디렉토리에 service-worker.js 파일을 생성하고 다음 스니펫을 추가하세요:

5단계: AMP 웹 푸시 HTML 요소 구성

다음 amp-web-push HTML 요소를 HTML 본문에 추가하세요. apiKeybaseUrl를 쿼리 매개변수로 service-worker-URL에 추가해야 한다는 점을 염두에 두세요.

1
2
3
4
5
6
7
<amp-web-push
layout="nodisplay"
id="amp-web-push"
helper-iframe-url="FILE_PATH_TO_YOUR_HELPER_IFRAME"
permission-dialog-url="FILE_PATH_TO_YOUR_PERMISSION_DIALOG"
service-worker-url="FILE_PATH_TO_YOUR_SERVICE_WORKER?apiKey={YOUR_API_KEY}&baseUrl={YOUR_BASE_URL}"
>

비동기 모듈 정의 (AMD)

지원 비활성화

사이트에서 RequireJS 또는 다른 AMD 모듈 로더를 사용하는 경우, 이 목록의 다른 옵션 중 하나를 통해 Braze 웹 SDK를 로드하려는 경우, AMD 지원이 포함되지 않은 라이브러리 버전을 로드할 수 있습니다. 이 라이브러리 버전은 다음 CDN 위치에서 로드할 수 있습니다:

모듈 로더

RequireJS 또는 기타 AMD module-loaders를 사용하는 경우 라이브러리 사본을 자체 호스팅하고 다른 리소스와 마찬가지로 참조하는 것이 좋습니다.

1
2
3
4
5
6
require(['path/to/braze.min.js'], function(braze) {
  braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT' });
  // Required if you want in-app messages to display automatically
  braze.automaticallyShowInAppMessages();
  braze.openSession();
});

Electron

Electron은 웹 푸시 알림을 공식적으로 지원하지 않습니다(이 GitHub 이슈 참조). Braze에서 테스트하지 않은 다른 오픈 소스 해결 방법을 시도해 볼 수 있습니다.

Jest 프레임워크

Jest를 사용할 때 SyntaxError: Unexpected token 'export' 와 유사한 오류가 표시될 수 있습니다. 이 문제를 해결하려면 Braze SDK를 무시하도록 package.json에서 구성을 조정합니다.

1
2
3
4
5
"jest": {
  "transformIgnorePatterns": [
    "/node_modules/(?!@braze)"
  ]
}

SSR 프레임워크

Next.js과 같은 서버 사이드 렌더링 (SSR) 프레임워크를 사용하는 경우, SDK는 브라우저 환경에서 실행되도록 설계되었기 때문에 오류가 발생할 수 있습니다. SDK를 동적으로 가져오면 이러한 문제를 해결할 수 있습니다.

SDK에서 필요한 부분을 별도의 파일로 내보낸 다음, 해당 파일을 구성요소에 동적으로 가져오는 방식으로 트리 셰이킹의 이점을 유지할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// MyComponent/braze-exports.js
// export the parts of the SDK you need here
export { initialize, openSession } from "@braze/web-sdk";

// MyComponent/MyComponent.js
// import the functions you need from the braze exports file
useEffect(() => {
    import("./braze-exports.js").then(({ initialize, openSession }) => {
        initialize("YOUR-API-KEY-HERE", {
            baseUrl: "YOUR-SDK-ENDPOINT",
            enableLogging: true,
        });
        openSession();
    });
}, []);

또는 웹팩을 사용하여 앱을 번들링하는 경우 매직 코멘트를 활용하여 SDK의 필요한 부분만 동적으로 가져올 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
// MyComponent.js
useEffect(() => {
    import(
        /* webpackExports: ["initialize", "openSession"] */
        "@braze/web-sdk"
    ).then(({ initialize, openSession }) => {
        initialize("YOUR-API-KEY-HERE", {
            baseUrl: "YOUR-SDK-ENDPOINT",
            enableLogging: true,
        });
        openSession();
    });
}, []);

Tealium iQ

Tealium iQ는 기본적인 턴키 방식의 Braze 통합을 제공합니다. 통합을 구성하려면 Tealium 태그 관리 인터페이스에서 Braze를 검색하고 대시보드에서 웹 SDK API 키를 제공합니다.

자세한 내용이나 심층적인 Tealium 구성 지원이 필요하면, 통합 설명서를 확인하거나 Tealium 계정 매니저에게 문의하세요.

Vite

Vite를 사용할 때 순환 종속성 또는 Uncaught TypeError: Class extends value undefined is not a constructor or null에 대한 경고가 표시되는 경우 Braze SDK를 종속성 검색에서 제외해야 할 수 있습니다.

1
2
3
optimizeDeps: {
    exclude: ['@braze/web-sdk']
},

기타 태그 관리자

Braze는 사용자 지정 HTML 태그 내의 통합 지침에 따라 다른 태그 관리 솔루션과도 호환될 수 있습니다. 이 솔루션을 평가하는 데 도움이 필요하면 Braze 담당자에게 문의하세요.

안드로이드 SDK 통합

1단계: Gradle 빌드 구성 업데이트

프로젝트의 리포지토리 구성(예: settings.gradle, settings.gradle.kts 또는 최상위 build.gradle)에서 mavenCentral()를 리포지토리 목록에 추가하세요. 이 구문은 Groovy와 Kotlin DSL 모두에 동일합니다.

1
2
3
repositories {
  mavenCentral()
}

다음으로, Braze를 종속성에 추가하세요. 다음 예제에서 SDK_VERSION을 현재 버전의 Android Braze SDK로 교체하세요. 전체 버전 목록은 변경 로그를 참조하세요.

Braze UI 구성 요소를 사용할 계획이 없다면, 종속성에 다음을 추가하세요.

1
2
3
4
dependencies {
    implementation 'com.braze:android-sdk-base:SDK_VERSION' // (Required) Adds dependencies for the base Braze SDK.
    implementation 'com.braze:android-sdk-location:SDK_VERSION' // (Optional) Adds dependencies for Braze location services.
}
1
2
3
4
dependencies {
    implementation("com.braze:android-sdk-base:SDK_VERSION") // (Required) Adds dependencies for the base Braze SDK.
    implementation("com.braze:android-sdk-location:SDK_VERSION") // (Optional) Adds dependencies for Braze location services.
}

당신의 gradle/libs.versions.toml 파일에서:

1
2
3
4
5
6
[versions]
braze = "SDK_VERSION"

[libraries]
braze-android-sdk-base = { group = "com.braze", name = "android-sdk-base", version.ref = "braze" }
braze-android-sdk-location = { group = "com.braze", name = "android-sdk-location", version.ref = "braze" }

그런 다음, build.gradle 또는 build.gradle.kts 파일에 다음 종속성을 추가하세요. 이 구문은 Groovy와 Kotlin DSL 모두에 동일합니다.

1
2
3
4
dependencies {
    implementation(libs.braze.android.sdk.base) // (Required) Adds dependencies for the base Braze SDK.
    implementation(libs.braze.android.sdk.location) // (Optional) Adds dependencies for Braze location services.
}

Braze UI 구성 요소를 사용할 계획이라면, 종속성에 다음을 추가하세요.

1
2
3
4
dependencies {
    implementation 'com.braze:android-sdk-ui:SDK_VERSION' // (Required) Adds dependencies for the Braze SDK and Braze UI components.
    implementation 'com.braze:android-sdk-location:SDK_VERSION' // (Optional) Adds dependencies for Braze location services.
}
1
2
3
4
dependencies {
    implementation("com.braze:android-sdk-ui:SDK_VERSION") // (Required) Adds dependencies for the Braze SDK and Braze UI components.
    implementation("com.braze:android-sdk-location:SDK_VERSION") // (Optional) Adds dependencies for Braze location services.
}

당신의 gradle/libs.versions.toml 파일에서:

1
2
3
4
5
6
[versions]
braze = "SDK_VERSION"

[libraries]
braze-android-sdk-ui = { group = "com.braze", name = "android-sdk-ui", version.ref = "braze" }
braze-android-sdk-location = { group = "com.braze", name = "android-sdk-location", version.ref = "braze" }

그런 다음, build.gradle 또는 build.gradle.kts 파일에 다음 종속성을 추가하세요. 이 구문은 Groovy와 Kotlin DSL 모두에 동일합니다.

1
2
3
4
dependencies {
    implementation(libs.braze.android.sdk.ui) // (Required) Adds dependencies for the Braze SDK and Braze UI components.
    implementation(libs.braze.android.sdk.location) // (Optional) Adds dependencies for Braze location services.
}

2단계: 당신의 braze.xml을 구성하세요.

프로젝트의 res/values 폴더에 braze.xml 파일을 생성하세요. 특정 데이터 클러스터에 있거나 기존 커스텀 엔드포인트가 있는 경우 braze.xml 파일에서도 엔드포인트를 지정해야 합니다.

해당 파일의 내용은 다음 코드 스니펫과 유사해야 합니다. Braze 대시보드의 설정 관리 페이지에서 식별자로 YOUR_APP_IDENTIFIER_API_KEY을(를) 대체하십시오. dashboard.braze.com에 로그인하여 클러스터 주소를 찾으십시오.

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string translatable="false" name="com_braze_api_key">YOUR_APP_IDENTIFIER_API_KEY</string>
  <string translatable="false" name="com_braze_custom_endpoint">YOUR_CUSTOM_ENDPOINT_OR_CLUSTER</string>
</resources>

3단계: AndroidManifest.xml에 권한 추가

다음으로, AndroidManifest.xml에 다음 권한을 추가하세요:

1
2
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

4단계: 지연 초기화 활성화(선택 사항)

지연 초기화를 사용하려면 최소 Braze SDK 버전이 필요합니다:

Step 4.1: braze.xml 업데이트

지연 초기화는 기본적으로 비활성화되어 있습니다. 활성화하려면 다음 옵션 중 하나를 사용하십시오:

프로젝트의 braze.xml 파일에서 com_braze_enable_delayed_initializationtrue로 설정하십시오.

1
<bool name="com_braze_enable_delayed_initialization">true</bool>

런타임에서 지연 초기화를 활성화하려면 다음 메서드를 사용하십시오.

1
Braze.enableDelayedInitialization(context);
1
Braze.enableDelayedInitialization(context)

Step 4.2: 푸시 분석 구성(선택 사항)

지연 초기화가 활성화되면 푸시 분석이 기본적으로 대기열에 추가됩니다. 그러나 푸시 분석을 명시적으로 대기열에 추가하거나 버리기를 선택할 수 있습니다.

명시적으로 대기열에 추가

푸시 분석을 명시적으로 대기열에 추가하려면 다음 옵션 중 하나를 선택하십시오:

당신의 braze.xml 파일에서 com_braze_delayed_initialization_analytics_behaviorQUEUE로 설정하십시오:

1
<string name="com_braze_delayed_initialization_analytics_behavior">QUEUE</string>

당신의 Braze.enableDelayedInitialization() 메서드에 QUEUE를 추가하십시오:

1
Braze.enableDelayedInitialization(context, DelayedInitializationAnalyticsBehavior.QUEUE);
1
Braze.enableDelayedInitialization(context, DelayedInitializationAnalyticsBehavior.QUEUE)
버리기

푸시 분석을 버리려면 다음 옵션 중 하나를 선택하십시오:

당신의 braze.xml 파일에서 com_braze_delayed_initialization_analytics_behaviorDROP로 설정하십시오:

1
<string name="com_braze_delayed_initialization_analytics_behavior">DROP</string>

Braze.enableDelayedInitialization() 메서드에 DROP를 추가하십시오:

1
Braze.enableDelayedInitialization(context, DelayedInitializationAnalyticsBehavior.DROP);
1
Braze.enableDelayedInitialization(context, DelayedInitializationAnalyticsBehavior.DROP)

Step 4.3: SDK를 수동으로 초기화하십시오

선택한 지연 기간 후, Braze.disableDelayedInitialization() 메서드를 사용하여 SDK를 수동으로 초기화하십시오.

1
Braze.disableDelayedInitialization(context);
1
Braze.disableDelayedInitialization(context)

5단계: 사용자 세션 추적 활성화

사용자 세션 추적을 활성화하면 openSession(), closeSession(), ensureSubscribedToInAppMessageEvents(), 및 InAppMessageManager 등록에 대한 호출이 자동으로 처리될 수 있습니다.

활동 생명주기 콜백을 등록하려면 onCreate() 클래스의 Application 메서드에 다음 코드를 추가하세요.

1
2
3
4
5
6
7
public class MyApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    registerActivityLifecycleCallbacks(new BrazeActivityLifecycleCallbackListener());
  }
}
1
2
3
4
5
6
class MyApplication : Application() {
  override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(BrazeActivityLifecycleCallbackListener())
  }
}

사용 가능한 매개변수 목록은 BrazeActivityLifecycleCallbackListener을 참조하세요.

테스트 세션 추적

테스트 중 문제가 발생하면 상세 로깅을 활성화한 다음 logcat을 사용하여 활동에서 누락된 openSessioncloseSession 호출을 감지하세요.

  1. Braze에서 개요로 이동하여 앱을 선택한 다음 데이터 표시 드롭다운에서 오늘을 선택하세요. Braze의 "개요" 페이지로, "데이터 표시" 필드가 "오늘"으로 설정되어 있습니다.
  2. 앱을 열고 Braze 대시보드를 새로고침하세요. 측정기준이 1만큼 증가했는지 확인하세요.
  3. 앱을 탐색하고 Braze에 단 하나의 세션만 기록되었는지 확인하세요.
  4. 앱을 최소 10초 동안 백그라운드로 보내고, 다시 포그라운드로 가져오세요. 새 세션이 기록되었는지 확인하세요.

선택적 구성

런타임 구성

코드에서 Braze 옵션을 설정하려면 braze.xml 파일 대신 런타임 구성을 사용하세요. 두 곳에 값이 존재하는 경우 런타임 값이 대신 사용됩니다. 런타임에 모든 필수 설정이 제공된 후에는 braze.xml 파일을 삭제할 수 있습니다.

다음 예제에서는 빌더 객체가 생성된 후 Braze.configure()에 전달됩니다. 사용 가능한 런타임 옵션 중 일부만 표시됩니다—전체 목록은 KDoc를 참조하세요.

1
2
3
4
5
6
7
8
BrazeConfig brazeConfig = new BrazeConfig.Builder()
        .setApiKey("api-key-here")
        .setCustomEndpoint("YOUR_CUSTOM_ENDPOINT_OR_CLUSTER")
        .setSessionTimeout(60)
        .setHandlePushDeepLinksAutomatically(true)
        .setGreatNetworkDataFlushInterval(10)
        .build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
6
7
8
val brazeConfig = BrazeConfig.Builder()
        .setApiKey("api-key-here")
        .setCustomEndpoint("YOUR_CUSTOM_ENDPOINT_OR_CLUSTER")
        .setSessionTimeout(60)
        .setHandlePushDeepLinksAutomatically(true)
        .setGreatNetworkDataFlushInterval(10)
        .build()
Braze.configure(this, brazeConfig)

구글 광고 ID

[구글 광고 ID (GAID)<1>는 구글 플레이 서비스에서 제공하는 광고를 위한 선택적 사용자 특정, 익명, 고유 및 재설정 가능한 ID입니다. GAID를 통해 사용자는 자신의 식별자를 재설정하고 Google Play 앱 내에서 관심 기반 광고를 옵트아웃할 수 있으며, 개발자는 간단한 표준 시스템으로 앱에서 지속적으로 수익을 창출할 수 있습니다.

Google 광고 ID는 Braze SDK에서 자동으로 수집되지 않으며, Braze.setGoogleAdvertisingId() 메서드를 통해 수동으로 설정해야 합니다.

1
2
3
4
5
6
7
8
9
10
11
new Thread(new Runnable() {
  @Override
  public void run() {
    try {
      AdvertisingIdClient.Info idInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
      Braze.getInstance(getApplicationContext()).setGoogleAdvertisingId(idInfo.getId(), idInfo.isLimitAdTrackingEnabled());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}).start();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
suspend fun fetchAndSetAdvertisingId(
  context: Context,
  scope: CoroutineScope = GlobalScope
) {
  scope.launch(Dispatchers.IO) {
    try {
      val idInfo = AdvertisingIdClient.getAdvertisingIdInfo(context)
      Braze.getInstance(context).setGoogleAdvertisingId(
        idInfo.id,
        idInfo.isLimitAdTrackingEnabled
      )
    } catch (e: Exception) {
      e.printStackTrace()
    }
  }
}

위치 추적

Braze 위치 수집을 활성화하려면 com_braze_enable_location_collectiontrue로 설정하십시오 braze.xml 파일에서:

1
<bool name="com_braze_enable_location_collection">true</bool>

로깅

기본적으로 Braze Android SDK 로그 수준은 INFO로 설정되어 있습니다. 이러한 로그를 억제하거나 VERBOSE, DEBUG 또는 WARN과 같은 여러 로그 수준을 설정할 수 있습니다 .

로그 활성화

앱의 문제를 해결하거나 Braze 지원과의 처리 시간을 단축하려면 SDK에 대한 자세한 로그를 활성화할 수 있습니다. 상세 로그를 Braze 지원팀에 보낼 때 애플리케이션을 실행하자마자 로깅을 시작하여 문제가 발생하고 한참 후에 종료해야 합니다. 중앙 집중식 개요를 보려면 자세한 로깅을 참조하십시오. 로그 출력을 해석하는 방법을 배우려면 자세한 로그 읽기를 참조하십시오.

상세 로그는 개발 환경 전용이므로 앱을 출시하기 전에 비활성화하는 것이 좋습니다.

앱에서 직접 로그를 활성화하려면 다른 메서드보다 먼저 애플리케이션의 onCreate() 메서드에 다음을 추가합니다.

1
BrazeLogger.setLogLevel(Log.MIN_LOG_LEVEL);
1
BrazeLogger.logLevel = Log.MIN_LOG_LEVEL

MIN_LOG_LEVEL을 최소 로그 수준으로 설정하려는 로그 수준의 상수로 바꿉니다. 설정된 MIN_LOG_LEVEL 이상(>=) 수준의 모든 로그는 Android의 기본 Log 메서드로 전달됩니다. 설정된 MIN_LOG_LEVEL 수준 아래(<)의 모든 로그는 삭제됩니다.

예를 들어 다음 코드는 2, 3, 4, 5, 6, 7의 로그 수준을 Log 메서드에 전달합니다.

1
BrazeLogger.setLogLevel(Log.VERBOSE);
1
BrazeLogger.logLevel = Log.VERBOSE

braze.xml에서 로그를 활성화하려면 파일에 다음을 추가합니다.

1
<integer name="com_braze_logger_initial_log_level">MIN_LOG_LEVEL</integer>

MIN_LOG_LEVEL을 최소 로그 수준으로 설정하려는 로그 수준의 으로 바꿉니다. 설정된 MIN_LOG_LEVEL 이상(>=) 수준의 모든 로그는 Android의 기본 Log 메서드로 전달됩니다. 설정된 MIN_LOG_LEVEL 수준 아래(<)의 모든 로그는 삭제됩니다.

예를 들어 다음 코드는 2, 3, 4, 5, 6, 7의 로그 수준을 Log 메서드에 전달합니다.

1
<integer name="com_braze_logger_initial_log_level">2</integer>

상세 로그 확인

로그가 VERBOSE로 설정되어 있는지 확인하려면 로그의 어딘가에 V/Braze가 있는지 확인합니다. 그러면 상세 로그가 활성화된 것입니다. 예를 들어, 다음과 같습니다.

1
2077-11-19 16:22:49.591 ? V/Braze v9.0.01 .bo.app.d3: Request started

로그 억제

Braze Android SDK에 대한 모든 로그를 억제하려면 애플리케이션의 onCreate() 메서드에서 로그 수준을 BrazeLogger.SUPPRESS로 설정하십시오 _다른 메서드_보다 먼저.

1
BrazeLogger.setLogLevel(BrazeLogger.SUPPRESS);
1
BrazeLogger.setLogLevel(BrazeLogger.SUPPRESS)

여러 API 키

여러 API 키의 가장 일반적인 사용 사례는 디버그 및 릴리스 빌드 배리언트에 대한 API 키를 분리하는 것입니다.

빌드에서 여러 API 키 사이를 쉽게 전환하려면 각 관련 빌드 배리언트에 대해 별도의 braze.xml 파일을 만드는 것이 좋습니다. 빌드 배리언트는 빌드 유형과 제품 버전의 조합입니다. 기본적으로 새로운 Android 프로젝트는 debugrelease 빌드 유형으로 구성되며 제품 맛이 없습니다.

각 관련 빌드 변형에 대해 braze.xmlsrc/<build variant name>/res/values/ 디렉토리에 새로 만드십시오. 빌드 변형이 컴파일되면 새 API 키를 사용합니다.

1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="com_braze_api_key">REPLACE_WITH_YOUR_BUILD_VARIANT_API_KEY</string>
</resources>

독점 인앱 메시지 TalkBack

Android 접근성 가이드라인을 준수하여 Braze Android SDK는 기본적으로 Android Talkback을 제공합니다. 인앱 메시지의 내용만 소리 내어 읽도록 하려면—앱 제목 표시줄이나 탐색과 같은 다른 화면 요소를 포함하지 않고—TalkBack에 대한 독점 모드를 활성화할 수 있습니다.

인앱 메시지에 대한 독점 모드를 활성화하려면:

1
<bool name="com_braze_device_in_app_message_accessibility_exclusive_mode_enabled">true</bool>
1
2
3
val brazeConfigBuilder = BrazeConfig.Builder()
brazeConfigBuilder.setIsInAppMessageAccessibilityExclusiveModeEnabled(true)
Braze.configure(this, brazeConfigBuilder.build())
1
2
3
BrazeConfig.Builder brazeConfigBuilder = new BrazeConfig.Builder()
brazeConfigBuilder.setIsInAppMessageAccessibilityExclusiveModeEnabled(true);
Braze.configure(this, brazeConfigBuilder.build());

R8 및 ProGuard

코드 축소 구성은 Braze 통합에 자동으로 포함됩니다.

Braze 코드를 난독화하는 클라이언트 앱은 Braze가 스택 추적을 해석할 수 있도록 릴리스 매핑 파일을 저장해야 합니다. 모든 Braze 코드를 계속 유지하려면 ProGuard 파일에 다음을 추가합니다.

1
2
-keep class bo.app.** { *; }
-keep class com.braze.** { *; }

스위프트 SDK 통합

스위프트 패키지 매니저(SPM), CocoaPods 또는 수동 통합 방법을 사용하여 Braze 스위프트 SDK를 통합하고 사용자 정의할 수 있습니다. 다양한 SDK 기호에 대한 자세한 정보는 Braze Swift 참조 설명서를 참조하십시오.

필수 조건

시작하기 전에, 최신 Braze Swift SDK 버전이 지원되는지 확인하십시오.

1단계: Braze 스위프트 SDK 설치

Braze 스위프트 SDK를 설치하기 위해 스위프트 패키지 매니저(SwiftPM) 또는 CocoaPods를 사용하는 것을 권장합니다. 대안으로, SDK를 수동으로 설치할 수 있습니다.

1.1단계: SDK 버전 가져오기

프로젝트를 열고 프로젝트 설정으로 이동합니다. Swift 패키지 탭을 선택하고 패키지 목록 아래에 있는 추가 버튼을 클릭합니다.

텍스트 필드에 iOS Swift SDK 리포지토리 URL(https://github.com/braze-inc/braze-swift-sdk)을 입력합니다. 종속성 규칙 섹션에서 SDK 버전을 선택합니다. 마지막으로 패키지 추가를 클릭합니다.

1.2단계: 패키지를 선택하십시오

Braze Swift SDK는 기능을 독립형 라이브러리로 분리하여 개발자가 프로젝트에 가져올 기능을 더 잘 제어할 수 있도록 합니다.

패키지 세부 정보
BrazeKit 분석 및 푸시 알림을 지원하는 기본 SDK 라이브러리입니다.
BrazeLocation 위치 분석 및 지오펜스 모니터링을 지원하는 위치 라이브러리를 제공합니다.
BrazeUI 인앱 메시지, 콘텐츠 카드 및 배너를 위한 Braze 제공 사용자 인터페이스 라이브러리입니다. 기본 UI 구성 요소를 사용하려는 경우 이 라이브러리를 가져오십시오.
확장 라이브러리에 대하여
패키지 세부 정보
BrazeNotificationService 풍부한 푸시 알림을 지원하는 알림 서비스 확장 라이브러리입니다.
BrazePushStory 푸시 스토리를 지원하는 알림 콘텐츠 확장 라이브러리입니다.

필요에 가장 적합한 패키지를 선택하고 패키지 추가를 클릭합니다. 최소한 BrazeKit를 선택해야 합니다.

1.1단계: CocoaPods 설치

전체 안내서는 CocoaPods의 시작하기 가이드를 참조하십시오. 그렇지 않으면, 빠르게 시작하기 위해 다음 명령을 실행할 수 있습니다:

1
$ sudo gem install cocoapods

문제가 발생하면 CocoaPods의 문제 해결 가이드를 확인하십시오.

1.2단계: Podfile 구성

다음으로, Xcode 프로젝트 디렉토리에 Podfile라는 파일을 만드십시오.

포드파일에 다음 줄을 추가합니다:

1
2
3
target 'YourAppTarget' do
  pod 'BrazeKit'
end

BrazeKit에는 분석 및 푸시 알림을 지원하는 기본 SDK 라이브러리가 포함되어 있습니다.

포드 업데이트에서 부 버전 업데이트보다 작은 내용을 자동으로 가져올 수 있도록 Braze 버전을 설정하는 것이 좋습니다. pod 'BrazeKit' ~> Major.Minor.Build와 유사합니다. 최신 Braze SDK 버전을 자동으로 통합하려면 주요 변경 사항이 있어도 Podfile에서 pod 'BrazeKit'를 사용하면 됩니다.

추가 라이브러리에 대하여

Braze Swift SDK는 기능을 독립형 라이브러리로 분리하여 개발자가 프로젝트에 가져올 기능을 더 잘 제어할 수 있도록 합니다. BrazeKit 외에도 다음 라이브러리를 Podfile에 추가할 수 있습니다.

라이브러리 세부 정보
pod 'BrazeLocation' 위치 분석 및 지오펜스 모니터링을 지원하는 위치 라이브러리를 제공합니다.
pod 'BrazeUI' 인앱 메시지, 콘텐츠 카드 및 배너를 위한 Braze 제공 사용자 인터페이스 라이브러리입니다. 기본 UI 구성 요소를 사용하려는 경우 이 라이브러리를 가져오십시오.
확장 라이브러리

BrazeNotificationServiceBrazePushStory는 추가 기능을 제공하는 확장 모듈이며, 메인 애플리케이션 대상에 직접 추가해서는 안 됩니다. 대신, 이러한 모듈 각각에 대해 별도의 확장 대상을 생성하고 해당 대상으로 Braze 모듈을 가져와야 합니다.

라이브러리 세부 정보
pod 'BrazeNotificationService' 풍부한 푸시 알림을 지원하는 알림 서비스 확장 라이브러리입니다.
pod 'BrazePushStory' 푸시 스토리를 지원하는 알림 콘텐츠 확장 라이브러리입니다.

1.3단계: SDK 설치

Braze SDK CocoaPod을 설치하려면 터미널에서 Xcode 앱 프로젝트 디렉토리로 이동한 후 다음 명령어를 실행합니다.

1
pod install

이때 CocoaPods에서 생성한 새 Xcode 프로젝트 워크스페이스를 열 수 있어야 합니다. Xcode 프로젝트 대신 이 Xcode 워크스페이스를 사용해야 합니다.

Braze 예제 폴더가 새 `BrazeExample.workspace`를 보여주도록 확장되었습니다.

CocoaPods를 사용하여 SDK 업데이트

CocoaPod를 업데이트하려면 프로젝트 디렉토리에서 다음 명령을 실행하면 됩니다:

1
pod update

1.1단계: Braze SDK 다운로드

GitHub의 Braze SDK 릴리스 페이지로 이동한 다음, braze-swift-sdk-prebuilt.zip을 다운로드합니다.

"GitHub의 Braze SDK 릴리스 페이지."

1.2단계: 프레임워크 선택

Braze Swift SDK에는 다양한 독립형 XCFrameworks가 포함되어 있어 모든 기능을 통합할 필요 없이 원하는 기능을 자유롭게 통합할 수 있습니다. 다음 표를 참조하여 XCFrameworks를 선택합니다.

패키지 필수 항목인가요? 설명
BrazeKit 분석 및 푸시 알림을 지원하는 기본 SDK 라이브러리입니다.
BrazeLocation 아니요 위치 분석 및 지오펜스 모니터링을 지원하는 위치 라이브러리입니다.
BrazeUI 아니요 인앱 메시지, 콘텐츠 카드 및 배너를 위한 Braze 제공 사용자 인터페이스 라이브러리입니다. 기본 UI 구성 요소를 사용하려는 경우 이 라이브러리를 가져오십시오.
BrazeNotificationService 아니요 리치 푸시 알림을 지원하는 알림 서비스 확장 라이브러리입니다. 이 라이브러리를 기본 애플리케이션 대상에 직접 추가하지 말고 BrazeNotificationService 라이브러리를 별도로 추가합니다.
BrazePushStory 아니요 푸시 스토리를 지원하는 알림 콘텐츠 확장 라이브러리입니다. 이 라이브러리를 기본 애플리케이션 대상에 직접 추가하지 말고 BrazePushStory 라이브러리를 별도로 추가합니다.
BrazeKitCompat 아니요 Appboy-iOS-SDK 버전 4.X.X에서 사용 가능했던 모든 AppboyABK* 클래스 및 메서드가 포함된 호환성 라이브러리. 사용법에 대한 자세한 내용은 마이그레이션 가이드의 최소 마이그레이션 시나리오를 참조하세요.
BrazeUICompat 아니요 Appboy-iOS-SDK 버전 4.X.X부터 AppboyUI 라이브러리에서 사용 가능했던 모든 ABK* 클래스 및 메서드가 포함된 호환성 라이브러리. 사용법에 대한 자세한 내용은 마이그레이션 가이드의 최소 마이그레이션 시나리오를 참조하세요.
SDWebImage 아니요 최소 마이그레이션 시나리오에서 BrazeUICompat 에서만 사용하는 종속성입니다.

정적 XCFrameworks를 사용할지 동적 XCFrameworks를 사용할지 결정한 다음, 파일을 준비합니다.

  1. XCFrameworks의 임시 디렉토리를 생성합니다.
  2. braze-swift-sdk-prebuilt에서 dynamic 디렉토리를 열고 BrazeKit.xcframework를 디렉토리로 이동합니다. 디렉터리는 다음과 비슷해야 합니다:
    1
    2
    
     temp_dir
     └── BrazeKit.xcframework
    
  3. 선택한 XCFrameworks를 임시 디렉토리로 이동합니다. 디렉터리는 다음과 비슷해야 합니다:
    1
    2
    3
    4
    5
    
     temp_dir
     ├── BrazeKit.xcframework
     ├── BrazeKitCompat.xcframework
     ├── BrazeLocation.xcframework
     └── SDWebImage.xcframework
    

1.4단계: 프레임워크 통합

다음으로, 이전에 준비동적 또는 정적 XCFrameworks를 통합합니다.

Xcode 프로젝트에서 빌드 대상을 선택한 다음, 일반을 선택합니다. 프레임워크, 라이브러리 및 임베디드 콘텐츠에서 이전에 준비한 파일을 끌어다 놓습니다.

"Braze 라이브러리가 'Embed & Sign.'으로 설정된 예제 Xcode 프로젝트입니다."

Objective-C 프로젝트의 일반적인 오류

Xcode 프로젝트에 Objective-C 파일만 포함된 경우 프로젝트를 빌드하려고 할 때 ‘누락된 기호’ 오류가 발생할 수 있습니다. 이러한 오류를 해결하려면 프로젝트를 열고 파일 트리에 빈 Swift 파일을 추가합니다. 그러면 빌드 툴체인에 Swift 런타임이 강제로 임베드되고 빌드 시간 동안 적절한 프레임워크에 링크됩니다.

1
FILE_NAME.swift

FILE_NAME 을 띄어쓰기가 없는 문자열로 바꿉니다. 파일은 다음과 비슷하게 보일 것입니다:

1
empty_swift_file.swift

2단계: 지연 초기화 설정(선택 사항)

Braze Swift SDK의 초기화를 지연할 수 있습니다. 이는 앱이 구성 로드를 하거나 SDK 시작 전에 사용자 동의를 기다려야 할 때 유용합니다. 지연 초기화는 Braze 푸시 알림과 SDK 초기화 전에 수신된 푸시 토큰이 큐에 추가되고 SDK가 초기화되면 처리되도록 보장합니다.

지연 초기화를 사용하려면 최소 Braze SDK 버전이 필요합니다:

2.1 단계: 지연 초기화 준비하기

앱의 생명 주기에서 가능한 한 빨리 Braze.prepareForDelayedInitialization()을 호출하세요. 이상적으로는 application(_:didFinishLaunchingWithOptions:) 이전에 호출해야 합니다. 이것은 SDK가 초기화되기 전에 수신된 푸시 알림이 나중에 올바르게 캡처되고 처리되도록 보장합니다.

1
2
3
4
5
6
7
8
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  // Prepare the SDK for delayed initialization
  Braze.prepareForDelayedInitialization()

  // ... Additional non-Braze setup code

  return true
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@main
struct MyApp: App {
  @UIApplicationDelegateAdaptor var appDelegate: AppDelegate

  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}

class AppDelegate: NSObject, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    // Prepare the SDK for delayed initialization
    Braze.prepareForDelayedInitialization()

    // ... Additional non-Braze setup code

    return true
  }
}
1
2
3
4
5
6
7
8
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Prepare the SDK for delayed initialization
  [Braze prepareForDelayedInitialization];
  
  // ... Additional non-Braze setup code

  return YES;
}

지연 초기화를 사용할 때 푸시 알림 자동화가 암묵적으로 활성화됩니다. 푸시 자동화 구성을 pushAutomation 매개변수를 전달하여 사용자 정의할 수 있습니다.

2.2 단계: 푸시 분석 동작 구성(선택 사항)

지연 초기화가 활성화되면 푸시 분석이 기본적으로 큐에 추가됩니다. 그러나 푸시 분석을 명시적으로 큐에 추가하거나 드롭할 수도 있습니다.

명시적으로 큐에 추가하기

푸시 분석을 명시적으로 큐에 추가하려면(기본 동작) .queueanalyticsBehavior 매개변수에 전달하세요. 초기화 전에 대기 중인 푸시 분석 이벤트는 초기화 시 서버로 처리되고 전송됩니다.

1
Braze.prepareForDelayedInitialization(analyticsBehavior: .queue)
1
[Braze prepareForDelayedInitializationWithAnalyticsBehavior:BRZPushEnqueueBehaviorQueue];
삭제

SDK 초기화 전에 수신된 푸시 분석을 삭제하려면 .dropanalyticsBehavior 매개변수로 전달하십시오. 이 옵션을 사용하면 SDK가 초기화되지 않은 동안 발생하는 모든 푸시 분석 이벤트는 무시됩니다.

1
Braze.prepareForDelayedInitialization(analyticsBehavior: .drop)
1
[Braze prepareForDelayedInitializationWithAnalyticsBehavior:BRZPushEnqueueBehaviorDrop];

2.3 단계: 푸시 자동화 사용자 정의(선택 사항)

pushAutomation 매개변수를 전달하여 푸시 자동화 구성을 사용자 정의할 수 있습니다. 기본적으로 모든 자동화 기능이 활성화되어 있으며 requestAuthorizationAtLaunch는 제외됩니다.

1
2
3
4
5
6
7
8
// Enable all push automation
featuresBraze.prepareForDelayedInitialization(pushAutomation: true)

// Or customize specific automation options
let automation = Braze.Configuration.Push.Automation()
automation.automaticSetup = true
automation.requestAuthorizationAtLaunch = false
Braze.prepareForDelayedInitialization(pushAutomation: automation)
1
2
3
4
5
6
7
8
// Enable all push automation features
[Braze prepareForDelayedInitializationWithPushAutomation:[[BRZConfigurationPushAutomation alloc] initWithAutomationEnabled:YES]];

// Or customize specific automation options
BRZConfigurationPushAutomation *automation = [[BRZConfigurationPushAutomation alloc] init];
automation.automaticSetup = YES;
automation.requestAuthorizationAtLaunch = NO;
[Braze prepareForDelayedInitializationWithPushAutomation:automation analyticsBehavior:BRZPushEnqueueBehaviorQueue];

2.4 단계: SDK 초기화

선택한 지연 기간(예: 서버에서 구성 가져오기 후 또는 사용자 동의 후) 후에 SDK를 정상적으로 초기화하십시오:

1
2
3
4
5
6
7
8
9
10
func initializeBraze() {  
  let configuration = Braze.Configuration(apiKey: "YOUR-API-KEY", endpoint: "YOUR-ENDPOINT")    
  
  // Enable push automation to match the delayed initialization configuration  
  configuration.push.automation = true    
  let braze = Braze(configuration: configuration)    
  
  // Store the Braze instance for later use 
  AppDelegate.braze = braze
}
1
2
3
4
5
6
7
8
9
10
- (void)initializeBraze {
  BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:@"YOUR-API-KEY" endpoint:@"YOUR-ENDPOINT"];
  
  // Enable push automation to match the delayed initialization configuration
  configuration.push.automation = [[BRZConfigurationPushAutomation alloc] initWithAutomationEnabled:YES];
  Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
  
  // Store the Braze instance for later use
  AppDelegate.braze = braze;
}

3단계: 앱 대리자를 업데이트하세요

Braze Swift SDK에 포함된 기능을 가져오기 위해 다음 코드를 AppDelegate.swift 파일에 추가합니다.

1
import BrazeKit

다음으로, AppDelegate 클래스에 정적 속성정보를 추가하여 애플리케이션의 수명 동안 Braze 인스턴스에 대한 강력한 참조를 유지합니다.

1
2
3
class AppDelegate: UIResponder, UIApplicationDelegate {
  static var braze: Braze? = nil
}

마지막으로, AppDelegate.swift에서 다음 스니펫을 application:didFinishLaunchingWithOptions: 메서드에 추가하십시오:

1
2
3
4
5
6
let configuration = Braze.Configuration(
    apiKey: "YOUR-APP-IDENTIFIER-API-KEY",
    endpoint: "YOUR-BRAZE-ENDPOINT"
)
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze

YOUR-APP-IDENTIFIER-API-KEYYOUR-BRAZE-ENDPOINT을(를) 앱 설정 페이지에서 올바른 값으로 업데이트하십시오. 앱 식별자 API 키를 찾을 수 있는 위치에 대한 자세한 내용은 API 식별자 유형을 참조하세요.

다음 코드 줄을 AppDelegate.m 파일에 추가하십시오:

1
@import BrazeKit;

다음으로, AppDelegate.m 파일에 정적 변수를 추가하여 애플리케이션의 수명 동안 Braze 인스턴스에 대한 참조를 유지합니다.

1
2
3
4
5
6
7
8
9
10
11
static Braze *_braze;

@implementation AppDelegate
+ (Braze *)braze {
  return _braze;
}

+ (void)setBraze:(Braze *)braze {
  _braze = braze;
}
@end

마지막으로, AppDelegate.m 파일 내에서 application:didFinishLaunchingWithOptions: 메서드 내에 다음 스니펫을 추가합니다.

1
2
3
4
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:"YOUR-APP-IDENTIFIER-API-KEY"
                                                                  endpoint:"YOUR-BRAZE-ENDPOINT"];
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;

YOUR-APP-IDENTIFIER-API-KEYYOUR-BRAZE-ENDPOINT을(를) 설정 관리 페이지에서 올바른 값으로 업데이트하십시오. 앱 식별자 API 키를 찾을 수 있는 위치에 대한 자세한 내용은 API 설명서를 참조하세요.

선택적 구성

로깅

모든 플랫폼에서 중앙 집중식 개요를 보려면 상세 로깅을 참조하십시오. 로그 출력을 해석하는 방법을 배우려면 상세 로그 읽기를 참조하십시오.

로그 레벨

브레이즈 스위프트 SDK의 기본 로그 수준은 .error입니다. 로그가 활성화될 때 최소 지원 수준이기도 합니다. 다음은 로그 수준의 전체 목록입니다:

Swift Objective-C 설명
.debug BRZLoggerLevelDebug 로그 디버깅 정보 + .info + .error.
.info BRZLoggerLevelInfo 일반 SDK 정보(사용자 변경 사항 등) + .error를 기록합니다.
.error BRZLoggerLevelError 로그 오류.
.disabled BRZLoggerLevelDisabled 로깅이 발생하지 않습니다.

런타임에 Braze.Configuration 객체에서 로그 수준을 할당할 수 있습니다. 자세한 사용 내용은 Braze.Configuration.Logger를 참조하십시오.

1
2
3
4
5
6
7
let configuration = Braze.Configuration(
  apiKey: "<BRAZE_API_KEY>",
  endpoint: "<BRAZE_ENDPOINT>"
)
// Enable logging of general SDK information (such as user changes, etc.)
configuration.logger.level = .info
let braze = Braze(configuration: configuration)
1
2
3
4
5
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:self.APIKey
                                                                  endpoint:self.apiEndpoint];
// Enable logging of general SDK information (such as user changes, etc.)
[configuration.logger setLevel:BRZLoggerLevelInfo];
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];

Cordova SDK 통합

필수 조건

시작하기 전에, 최신 Braze Cordova 소프트웨어 개발 키트가 귀하의 환경을 지원하는지 확인하십시오.

1단계: 프로젝트에 SDK 추가

Cordova 6 이상을 사용하는 경우 GitHub에서 직접 SDK를 추가할 수 있습니다. 또는 GitHub 리포지토리의 ZIP 파일을 다운로드하여 SDK를 수동으로 추가할 수도 있습니다.

위치 수집 및 지오펜스를 사용하지 않는다면 GitHub의 master 브랜치를 사용합니다.

1
cordova plugin add https://github.com/braze-inc/braze-cordova-sdk#master

위치 수집 및 지오펜스를 사용하려면 GitHub의 geofence-branch를 사용합니다.

1
cordova plugin add https://github.com/braze-inc/braze-cordova-sdk#geofence-branch

2단계: 프로젝트 구성

다음으로 프로젝트의 config.xml 파일에 있는 platform 요소에 다음 환경설정을 추가합니다.

1
2
<preference name="com.braze.ios_api_key" value="BRAZE_API_KEY" />
<preference name="com.braze.ios_api_endpoint" value="CUSTOM_API_ENDPOINT" />
1
2
<preference name="com.braze.android_api_key" value="BRAZE_API_KEY" />
<preference name="com.braze.android_api_endpoint" value="CUSTOM_API_ENDPOINT" />

다음을 교체합니다:

config.xml 파일의 platform 요소는 다음과 유사해야 합니다:

1
2
3
4
<platform name="ios">
    <preference name="com.braze.ios_api_key" value="BRAZE_API_KEY" />
    <preference name="com.braze.ios_api_endpoint" value="sdk.fra-01.braze.eu" />
</platform>
1
2
3
4
<platform name="android">
    <preference name="com.braze.android_api_key" value="BRAZE_API_KEY" />
    <preference name="com.braze.android_api_endpoint" value="sdk.fra-01.braze.eu" />
</platform>

플랫폼별 구문

다음 섹션에서는 iOS 또는 Android에서 Cordova를 사용할 때의 플랫폼별 구문을 다룹니다.

정수

정수 환경설정은 다음 예제에서와 같이 문자열 표현으로 읽습니다.

1
2
3
4
<platform name="ios">
    <preference name="com.braze.ios_flush_interval_seconds" value="10" />
    <preference name="com.braze.ios_session_timeout" value="5" />
</platform>

Cordova 8.0.0 이상 프레임워크가 환경설정을 처리하는 방식으로 인해 다음 예제와 같이 정수 전용 환경설정(예: 발신자 ID)은 str_이 앞에 오는 문자열로 설정해야 합니다.

1
2
3
4
<platform name="android">
    <preference name="com.braze.android_fcm_sender_id" value="str_64422926741" />
    <preference name="com.braze.android_default_session_timeout" value="str_10" />
</platform>

부울

부울 환경설정은 다음 예제와 같이 YESNO 키워드를 문자열 표현으로 사용하여 SDK에서 읽습니다.

1
2
3
4
<platform name="ios">
    <preference name="com.braze.should_opt_in_when_push_authorized" value="YES" />
    <preference name="com.braze.ios_disable_automatic_push_handling" value="NO" />
</platform>

부울 환경설정은 다음 예제와 같이 truefalse 키워드를 문자열 표현으로 사용하여 SDK에서 읽습니다.

1
2
3
4
<platform name="android">
    <preference name="com.braze.should_opt_in_when_push_authorized" value="true" />
    <preference name="com.braze.is_session_start_based_timeout_enabled" value="false" />
</platform>

선택적 구성

프로젝트의 config.xml 파일에 있는 platform 요소에 다음 기본 설정 중 하나를 추가할 수 있습니다:

다음은 추가 구성이 포함된 config.xml 파일 예시입니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<platform name="ios">
    <preference name="com.braze.ios_disable_automatic_push_registration" value="NO"/"YES" />
    <preference name="com.braze.ios_disable_automatic_push_handling" value="NO"/"YES" />
    <preference name="com.braze.ios_enable_idfa_automatic_collection" value="YES"/"NO" />
    <preference name="com.braze.enable_location_collection" value="NO"/"YES" />
    <preference name="com.braze.geofences_enabled" value="NO"/"YES" />
    <preference name="com.braze.ios_session_timeout" value="5" />
    <preference name="com.braze.sdk_authentication_enabled" value="YES"/"NO" />
    <preference name="com.braze.display_foreground_push_notifications" value="YES"/"NO" />
    <preference name="com.braze.ios_disable_un_authorization_option_provisional" value="NO"/"YES" />
    <preference name="com.braze.trigger_action_minimum_time_interval_seconds" value="30" />
    <preference name="com.braze.ios_push_app_group" value="PUSH_APP_GROUP_ID" />
    <preference name="com.braze.ios_forward_universal_links" value="YES"/"NO" />
    <preference name="com.braze.ios_log_level" value="2" />
    <preference name="com.braze.ios_use_uuid_as_device_id" value="YES"/"NO" />
    <preference name="com.braze.ios_flush_interval_seconds" value="10" />
    <preference name="com.braze.ios_use_automatic_request_policy" value="YES"/"NO" />
    <preference name="com.braze.should_opt_in_when_push_authorized" value="YES"/"NO" />
</platform>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<platform name="android">
    <preference name="com.braze.android_small_notification_icon" value="RESOURCE_ENTRY_NAME_FOR_ICON_DRAWABLE" />
    <preference name="com.braze.android_large_notification_icon" value="RESOURCE_ENTRY_NAME_FOR_ICON_DRAWABLE" />
    <preference name="com.braze.android_notification_accent_color" value="str_ACCENT_COLOR_INTEGER" />
    <preference name="com.braze.android_default_session_timeout" value="str_SESSION_TIMEOUT_INTEGER" />
    <preference name="com.braze.android_handle_push_deep_links_automatically" value="true"/"false" />
    <preference name="com.braze.android_log_level" value="str_LOG_LEVEL_INTEGER" />
    <preference name="com.braze.firebase_cloud_messaging_registration_enabled" value="true"/"false" />
    <preference name="com.braze.android_fcm_sender_id" value="str_YOUR_FCM_SENDER_ID" />
    <preference name="com.braze.enable_location_collection" value="true"/"false" />
    <preference name="com.braze.geofences_enabled" value="true"/"false" />
    <preference name="com.braze.android_disable_auto_session_tracking" value="true"/"false" />
    <preference name="com.braze.sdk_authentication_enabled" value="true"/"false" />
    <preference name="com.braze.trigger_action_minimum_time_interval_seconds" value="str_MINIMUM_INTERVAL_INTEGER" />
    <preference name="com.braze.is_session_start_based_timeout_enabled" value="false"/"true" />
    <preference name="com.braze.default_notification_channel_name" value="DEFAULT_NAME" />
    <preference name="com.braze.default_notification_channel_description" value="DEFAULT_DESCRIPTION" />
    <preference name="com.braze.does_push_story_dismiss_on_click" value="true"/"false" />
    <preference name="com.braze.is_fallback_firebase_messaging_service_enabled" value="true"/"false" />
    <preference name="com.braze.fallback_firebase_messaging_service_classpath" value="FALLBACK_FIREBASE_MESSAGING_CLASSPATH" />
    <preference name="com.braze.is_content_cards_unread_visual_indicator_enabled" value="true"/"false" />
    <preference name="com.braze.is_firebase_messaging_service_on_new_token_registration_enabled" value="true"/"false" />
    <preference name="com.braze.is_push_deep_link_back_stack_activity_enabled" value="true"/"false" />
    <preference name="com.braze.push_deep_link_back_stack_activity_class_name" value="DEEPLINK_BACKSTACK_ACTIVITY_CLASS_NAME" />
    <preference name="com.braze.should_opt_in_when_push_authorized" value="true"/"false" />
</platform>

자동 세션 추적 비활성화 (Android 전용)

기본적으로 Android Cordova 플러그인은 세션을 자동으로 추적합니다. 자동 세션 추적을 사용하지 않으려면 프로젝트의 config.xml 파일에 있는 platform 요소에 다음 환경 설정을 추가하세요:

1
2
3
<platform name="android">
    <preference name="com.braze.android_disable_auto_session_tracking" value="true" />
</platform>

세션 추적을 다시 시작하려면 BrazePlugin.startSessionTracking() 으로 전화하세요. 다음 Activity.onStart() 이후에 시작된 세션만 추적됩니다.

Flutter Braze 소프트웨어 개발 키트 정보

Android 및 iOS에서 Braze Flutter 소프트웨어 개발 키트를 통합한 후에는 Dart로 작성된 Flutter 앱 내에서 Braze API를 사용할 수 있습니다. 이 플러그인은 기본적인 분석 기능을 제공하며, 이를 통해 단일 코드베이스에서 iOS 및 Android용 인앱 메시지와 콘텐츠 카드를 통합할 수 있습니다.

Flutter SDK 통합

필수 조건

Braze Flutter SDK를 통합하기 전에 다음을 완료해야 합니다:

1단계: Braze 라이브러리 통합

명령줄에서 Braze Flutter SDK 패키지를 추가합니다. 그러면 pubspec.yaml 에 적절한 줄이 추가됩니다.

1
flutter pub add braze_plugin

2단계: 완전한 네이티브 소프트웨어 개발 키트 설정

Braze 서버에 연결하려면 프로젝트의 android/res/values 폴더에서 braze.xml 파일을 생성합니다. 다음 코드를 붙여넣고 API 식별자 키와 엔드포인트를 사용자 값으로 바꿉니다.

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string translatable="false" name="com_braze_api_key">YOUR_APP_IDENTIFIER_API_KEY</string>
  <string translatable="false" name="com_braze_custom_endpoint">YOUR_CUSTOM_ENDPOINT_OR_CLUSTER</string>
</resources>

AndroidManifest.xml 파일에 필요한 권한을 추가합니다:

1
2
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

AppDelegate.swift 파일 상단에 Braze SDK 가져오기를 추가합니다:

1
2
import BrazeKit
import braze_plugin

같은 파일의 application(_:didFinishLaunchingWithOptions:) 메서드에서 Braze 구성 오브젝트를 생성하고 API 키와 엔드포인트를 앱의 값으로 바꿉니다. 그런 다음 구성을 사용하여 Braze 인스턴스를 생성하고 AppDelegate 에 정적 속성을 생성하여 쉽게 액세스할 수 있도록 합니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static var braze: Braze? = nil

override func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
  // Setup Braze
  let configuration = Braze.Configuration(
    apiKey: "<BRAZE_API_KEY>",
    endpoint: "<BRAZE_ENDPOINT>"
  )
  // - Enable logging or customize configuration here
  configuration.logger.level = .info
  let braze = BrazePlugin.initBraze(configuration)
  AppDelegate.braze = braze

  return true
}

AppDelegate.m 파일 상단에 있는 BrazeKit를 가져옵니다.

1
@import BrazeKit;

같은 파일의 application:didFinishLaunchingWithOptions: 메서드에서 Braze 구성 오브젝트를 생성하고 API 키와 엔드포인트를 앱의 값으로 바꿉니다. 그런 다음 구성을 사용하여 Braze 인스턴스를 생성하고 AppDelegate 에 정적 속성을 생성하여 쉽게 액세스할 수 있도록 합니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Setup Braze
  BRZConfiguration *configuration =
      [[BRZConfiguration alloc] initWithApiKey:@"<BRAZE_API_KEY>"
                                      endpoint:@"<BRAZE_ENDPOINT>"];
  // - Enable logging or customize configuration here
  configuration.logger.level = BRZLoggerLevelInfo;
  Braze *braze = [BrazePlugin initBraze:configuration];
  AppDelegate.braze = braze;

  [self.window makeKeyAndVisible];
  return YES;
}

#pragma mark - AppDelegate.braze

static Braze *_braze = nil;

+ (Braze *)braze {
  return _braze;
}

+ (void)setBraze:(Braze *)braze {
  _braze = braze;
}

3단계: 플러그인 설정하기

플러그인을 Dart 코드로 가져오려면 다음을 사용하세요:

1
import 'package:braze_plugin/braze_plugin.dart';

그런 다음, 샘플 앱에서와 같이 new BrazePlugin()을 호출하여 Braze 플러그인 인스턴스를 초기화합니다.

통합 테스트

대시보드에서 세션 통계를 확인하여 SDK가 통합되었는지 확인할 수 있습니다. 어느 플랫폼에서든 애플리케이션을 실행하면 대시보드( 개요 섹션)에 새 세션이 표시됩니다.

앱에서 다음 코드를 호출하여 특정 사용자에 대한 세션을 시작하십시오.

1
2
BrazePlugin braze = BrazePlugin();
braze.changeUser("{some-user-id}");

대시보드의 ‘오디언스 > 사용자 검색’에서 를 {some-user-id}사용하여 사용자를 검색하세요. 여기에서 세션 및 디바이스 데이터가 기록되었는지 확인할 수 있습니다.

React Native Braze SDK에 대한 설명

React Native Braze SDK를 통합하면 기본 분석 기능을 제공하고 iOS 및 Android 모두에 대해 하나의 코드베이스로 인앱 메시지 및 콘텐츠 카드를 통합할 수 있습니다.

새 아키텍처 호환성

다음 최소 SDK 버전은 React Native의 새 아키텍처를 사용하는 모든 앱과 호환됩니다:

SDK 버전 6.0.0부터 Braze는 React Native Turbo 모듈을 사용하며, 이는 새 아키텍처와 레거시 브리지 아키텍처 모두와 호환됩니다. 즉, 추가 설정이 필요하지 않습니다.

React Native SDK 통합하기

필수 조건

SDK를 통합하려면 React Native 버전 0.71 이상이 필요합니다. 지원되는 버전의 전체 목록은 React Native SDK GitHub 리포지토리를 참조하세요.

1단계: Braze 라이브러리를 통합하십시오

1
npm install @braze/react-native-sdk
1
yarn add @braze/react-native-sdk

2단계: 설정 옵션 선택하기

Braze SDK는 Braze Expo 플러그인 또는 네이티브 레이어 중 하나를 통해 관리할 수 있습니다. Expo 플러그인을 사용하면 네이티브 레이어에서 코드를 작성하지 않고도 특정 SDK 기능을 구성할 수 있습니다. 앱의 요구 사항에 가장 적합한 옵션을 선택하십시오.

2.1 단계: Braze Expo 플러그인을 설치하십시오

Braze React Native SDK 버전이 1.37.0 이상인지 확인합니다. 지원되는 버전의 전체 목록은 Braze React Native 저장소를 확인하십시오.

Braze Expo 플러그인을 설치하려면 다음 명령을 실행하십시오:

1
npx expo install @braze/expo-plugin

2.2 단계: 플러그인을 app.json에 추가하세요

귀하의 app.json에 Braze Expo 플러그인을 추가하십시오. 다음 구성 옵션을 제공할 수 있습니다:

예시 구성:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
  "expo": {
    "plugins": [
      [
        "@braze/expo-plugin",
        {
          "androidApiKey": "YOUR-ANDROID-API-KEY",
          "iosApiKey": "YOUR-IOS-API-KEY",
          "baseUrl": "YOUR-SDK-ENDPOINT",
          "sessionTimeout": 60,
          "enableGeofence": false,
          "enableBrazeIosPush": false,
          "enableFirebaseCloudMessaging": false,
          "firebaseCloudMessagingSenderId": "YOUR-FCM-SENDER-ID",
          "androidHandlePushDeepLinksAutomatically": true,
          "enableSdkAuthentication": false,
          "logLevel": 0,
          "minimumTriggerIntervalInSeconds": 0,
          "enableAutomaticLocationCollection": false,
          "enableAutomaticGeofenceRequests": false,
          "dismissModalOnOutsideTap": true,
          "androidPushNotificationHtmlRenderingEnabled": true,
          "androidNotificationAccentColor": "#ff3344",
          "androidNotificationLargeIcon": "@drawable/custom_app_large_icon",
          "androidNotificationSmallIcon": "@drawable/custom_app_small_icon",
          "iosRequestPushPermissionsAutomatically": false,
          "enableBrazeIosPushStories": true,
          "iosPushStoryAppGroup": "group.com.example.myapp.PushStories",
          "iosForwardUniversalLinks": false
        }
      ],
    ]
  }
}
안드로이드 푸시 알림 아이콘 구성

androidNotificationLargeIconandroidNotificationSmallIcon를 사용할 때, 아이콘 표시를 위한 최선의 관행을 따르십시오:

아이콘 배치 및 형식

Braze Expo 플러그인으로 커스텀 푸시 알림 아이콘을 사용하려면:

  1. 아이콘 요구 사항에 자세히 설명된 Android의 요구 사항에 따라 아이콘 파일을 만드십시오.
  2. 프로젝트의 Android 네이티브 디렉토리에 android/app/src/main/res/drawable-<density>/에 배치하십시오 (예: android/app/src/main/res/drawable-mdpi/, drawable-hdpi/ 또는 유사한 위치).
  3. 또는 React Native 디렉토리에서 자산을 관리하는 경우, Expo의 app.json 아이콘 구성을 사용하거나 Expo 구성 플러그인을 만들어 아이콘을 Android 드로어블 폴더로 복사할 수 있습니다.

Braze Expo 플러그인은 Android의 드로어블 리소스 시스템을 사용하여 이러한 아이콘을 참조합니다.

아이콘 요구 사항
  • 작은 아이콘: 투명한 배경에 흰색 실루엣이어야 합니다 (이것은 Android 플랫폼 요구 사항입니다)
  • 큰 아이콘: 풀 컬러 이미지일 수 있습니다
  • 형식: PNG 형식이 권장됩니다
  • 이름 지정: 소문자, 숫자 및 밑줄만 사용하십시오 (예: my_large_icon.png)
구성 app.json에서

파일 이름 _확장자 없이_에 @drawable/ 접두사를 사용하십시오. 예를 들어, 아이콘 파일 이름이 large_icon.png인 경우, @drawable/large_icon로 참조하십시오:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "expo": {
    "plugins": [
      [
        "@braze/expo-plugin",
        {
          "androidNotificationLargeIcon": "@drawable/large_icon",
          "androidNotificationSmallIcon": "@drawable/small_icon"
        }
      ]
    ]
  }
}
작동 방식

Braze Expo 플러그인은 Android drawable 디렉토리에서 아이콘 파일을 참조합니다. npx expo prebuild를 실행하면 Expo가 네이티브 Android 프로젝트 구조를 생성합니다. 아이콘은 빌드 프로세스 전에 Android drawable 폴더에 존재해야 합니다(수동으로 배치하거나 구성 플러그인을 통해 복사). 그런 다음 플러그인은 경로 또는 확장자 없이 이름으로 이러한 드로어블 리소스를 사용하도록 Braze SDK를 구성합니다. 그래서 @drawable/ 접두사가 구성에서 필요합니다.

Android 알림 아이콘에 대한 자세한 내용은 Android의 알림 아이콘 가이드라인을 참조하십시오.

2.3 단계: 애플리케이션 빌드 및 실행

응용 프로그램을 사전 빌드하면 Braze Expo 플러그인이 작동하는 데 필요한 네이티브 파일이 생성됩니다.

1
npx expo prebuild

Expo 문서에 지정된 대로, 애플리케이션을 실행합니다. 구성 옵션에 변경 사항을 적용하면 응용 프로그램을 다시 사전 빌드하고 실행해야 합니다.

2.1 단계: 리포지토리 추가

상위 수준 프로젝트 build.gradle에서 buildscript > dependencies 아래에 다음을 추가합니다.

1
2
3
4
5
6
7
buildscript {
    dependencies {
        ...
        // Choose your Kotlin version
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10")
    }
}

이것은 프로젝트에 Kotlin을 추가합니다.

2.2 단계: Braze SDK 구성

Braze 서버에 연결하려면 프로젝트의 res/values 폴더에서 braze.xml 파일을 생성합니다. 다음 코드를 붙여넣고 API 엔드포인트를 값으로 바꾸세요:

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string translatable="false" name="com_braze_api_key">YOU_APP_IDENTIFIER_API_KEY</string>
  <string translatable="false" name="com_braze_custom_endpoint">YOUR_CUSTOM_ENDPOINT_OR_CLUSTER</string>
</resources>

AndroidManifest.xml 파일에 필요한 권한을 추가합니다:

1
2
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2.3단계: 사용자 세션 추적 구현

openSession()closeSession()에 대한 호출은 자동으로 처리됩니다. onCreate() 메서드에 다음 코드를 추가하십시오: MainApplication 클래스:

1
2
3
4
5
6
7
8
import com.braze.BrazeActivityLifecycleCallbackListener;

@Override
public void onCreate() {
    super.onCreate();
    ...
    registerActivityLifecycleCallbacks(new BrazeActivityLifecycleCallbackListener());
}
1
2
3
4
5
6
7
import com.braze.BrazeActivityLifecycleCallbackListener

override fun onCreate() {
    super.onCreate()
    ...
    registerActivityLifecycleCallbacks(BrazeActivityLifecycleCallbackListener())
}

2.4 단계: 의도 업데이트 처리

MainActivity에서 android:launchModesingleTask로 설정된 경우, MainActivity 클래스에 다음 코드를 추가합니다.

1
2
3
4
5
@Override
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}
1
2
3
4
override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    setIntent(intent)
}

2.1 단계: (선택 사항) 동적 XCFrameworks용 Podfile 구성

BrazeUI와 같은 특정 Braze 라이브러리를 Objective-C++ 파일에 가져오려면 #import 구문을 사용해야 합니다. Braze Swift SDK의 버전 7.4.0부터 바이너리는 이 구문과 호환되는 동적 XCFrameworks로 선택적 배포 채널을 사용합니다.

이 배포 채널을 사용하려면 Podfile에서 CocoaPods 소스 위치를 수동으로 재정의합니다. 샘플을 참조하고 {your-version}을 가져오려는 관련 버전으로 바꿉니다.

1
2
3
pod 'BrazeKit', :podspec => 'https://raw.githubusercontent.com/braze-inc/braze-swift-sdk-prebuilt-dynamic/{your-version}/BrazeKit.podspec'
pod 'BrazeUI', :podspec => 'https://raw.githubusercontent.com/braze-inc/braze-swift-sdk-prebuilt-dynamic/{your-version}/BrazeUI.podspec'
pod 'BrazeLocation', :podspec => 'https://raw.githubusercontent.com/braze-inc/braze-swift-sdk-prebuilt-dynamic/{your-version}/BrazeLocation.podspec'

2.2 단계: 포드 설치

React Native는 라이브러리를 기본 플랫폼에 자동으로 연결하므로 CocoaPods를 사용하여 SDK를 설치할 수 있습니다.

프로젝트의 루트 폴더에서:

1
2
3
4
5
# To install using the React Native New Architecture
cd ios && pod install

# To install using the React Native legacy architecture
cd ios && RCT_NEW_ARCH_ENABLED=0 pod install

2.3 단계: Braze SDK 구성

AppDelegate.swift 파일 맨 위에서 Braze SDK를 가져옵니다.

1
2
import BrazeKit
import braze_react_native_sdk

application(_:didFinishLaunchingWithOptions:) 메서드에서 API 엔드포인트를 앱의 값으로 바꾸십시오. 그런 다음 구성을 사용하여 Braze 인스턴스를 생성하고 AppDelegate 에 정적 속성을 생성하여 쉽게 액세스할 수 있도록 합니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
    // Setup Braze
    let configuration = Braze.Configuration(
        apiKey: "{BRAZE_API_KEY}",
        endpoint: "{BRAZE_ENDPOINT}")
    // Enable logging and customize the configuration here.
    configuration.logger.level = .info
    let braze = BrazeReactBridge.perform(
      #selector(BrazeReactBridge.initBraze(_:)),
      with: configuration
    ).takeUnretainedValue() as! Braze

    AppDelegate.braze = braze

    /* Other configuration */

    return true
}

// MARK: - AppDelegate.braze

static var braze: Braze? = nil

AppDelegate.m 파일 맨 위에서 Braze SDK를 가져옵니다.

1
2
#import <BrazeKit/BrazeKit-Swift.h>
#import "BrazeReactBridge.h"

application:didFinishLaunchingWithOptions: 메서드에서 API 엔드포인트를 앱의 값으로 바꾸십시오. 그런 다음 구성을 사용하여 Braze 인스턴스를 생성하고 AppDelegate 에 정적 속성을 생성하여 쉽게 액세스할 수 있도록 합니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Setup Braze
  BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:@"{BRAZE_API_KEY}"
                                                                    endpoint:@"{BRAZE_ENDPOINT}"];
  // Enable logging and customize the configuration here.
  configuration.logger.level = BRZLoggerLevelInfo;
  Braze *braze = [BrazeReactBridge initBraze:configuration];
  AppDelegate.braze = braze;

  /* Other configuration */

  return YES;
}

#pragma mark - AppDelegate.braze

static Braze *_braze = nil;

+ (Braze *)braze {
  return _braze;
}

+ (void)setBraze:(Braze *)braze {
  _braze = braze;
}

3단계: 라이브러리 가져오기

다음으로, React Native 코드에서 import 라이브러리를 가져옵니다. 자세한 내용은 샘플 프로젝트를 확인하십시오.

1
import Braze from "@braze/react-native-sdk";

4단계: 통합 테스트(선택 사항)

SDK 통합을 테스트하려면 앱에서 다음 코드를 호출하여 사용자에 대한 새 세션을 시작하십시오.

1
Braze.changeUser("userId");

예를 들어, 앱 시작 시 사용자 ID를 할당할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import React, { useEffect } from "react";
import Braze from "@braze/react-native-sdk";

const App = () => {
  useEffect(() => {
    Braze.changeUser("some-user-id");
  }, []);

  return (
    <div>
      ...
    </div>
  )

Braze 대시보드에서 사용자 검색으로 이동하여 ID가 some-user-id와 일치하는 사용자를 찾습니다. 여기에서 세션 및 기기 데이터가 기록되었는지 확인할 수 있습니다.

다음 단계

Braze SDK를 통합한 후 일반 메시징 기능을 구현할 수 있습니다:

  • 푸시 알림: 사용자에게 푸시 알림을 설정하고 전송하세요
  • 인앱 메시지: 앱 내에서 상황별 메시지를 표시하세요
  • 배너: 앱 인터페이스에 지속적인 배너를 표시하세요

Roku SDK 통합하기

1단계: 파일 추가

Braze SDK 파일은 Braze Roku SDK 리포지토리sdk_files 디렉토리에서 찾을 수 있습니다.

  1. source 디렉토리의 앱에 BrazeSDK.brs를 추가합니다.
  2. components 디렉토리의 앱에 BrazeTask.brsBrazeTask.xml을 추가합니다.

2단계: 참조 추가

다음 script 요소를 사용하여 기본 장면에서 BrazeSDK.brs에 대한 참조를 추가합니다.

1
<script type="text/brightscript" uri="pkg:/source/BrazeSDK.brs"/>

3단계: 구성

main.brs 에서 글로벌 노드에서 Braze 구성을 설정합니다:

1
2
3
4
5
6
7
8
globalNode = screen.getGlobalNode()
config = {}
config_fields = BrazeConstants().BRAZE_CONFIG_FIELDS
config[config_fields.API_KEY] = {YOUR_API_KEY}
' example endpoint: "https://sdk.iad-01.braze.com/"
config[config_fields.ENDPOINT] = {YOUR_ENDPOINT}
config[config_fields.HEARTBEAT_FREQ_IN_SECONDS] = 5
globalNode.addFields({brazeConfig: config})

Braze 대시보드에서 SDK 엔드포인트와 API 키를 찾을 수 있습니다.

4단계: Braze 초기화

Braze 인스턴스를 초기화합니다:

1
2
m.BrazeTask = createObject("roSGNode", "BrazeTask")
m.Braze = getBrazeInstance(m.BrazeTask)

선택적 구성

로깅

Braze 통합을 디버깅하려면 Roku 디버그 콘솔에서 Braze 로그를 확인할 수 있습니다. 자세한 내용은 Roku 개발자의 코드 디버깅을 참조하세요.

Unity Braze 소프트웨어 개발 키트 소개

유형, 함수, 변수 등의 전체 목록은 Unity 선언 파일을 참조하세요. 또한 이미 iOS용 Unity를 수동으로 통합한 경우 자동화된 통합으로 전환할 수 있습니다.

Unity SDK 통합하기

필수 조건

시작하기 전에 사용 중인 환경이 최신 Braze 소프트웨어 개발 키트 버전에서 지원되는지 확인하세요.

1단계: Braze Unity 패키지 선택

Braze .unitypackage는 C# 인터페이스와 함께 Android 및 iOS 플랫폼용 기본 바인딩을 번들로 제공합니다.

Braze Unity 릴리즈 페이지에서 여러 Braze Unity 패키지를 다운로드할 수 있습니다.

  • Appboy.unitypackage
    • 이 패키지는 Braze 인앱 메시징 및 iOS의 콘텐츠 카드 기능이 제대로 작동하는 데 필요한 Braze Android 및 iOS SDK와 iOS SDK에 대한 SDWebImage 종속성을 번들로 제공합니다. SDWebImage 프레임워크는 GIF를 포함한 이미지를 다운로드하고 표시하는 데 사용됩니다. Braze의 모든 기능을 활용하려면 이 패키지를 다운로드하여 가져오세요.
  • Appboy-nodeps.unitypackage
    • 이 패키지는 SDWebImage 프레임워크가 없다는 점을 제외하면 Appboy.unitypackage 과 유사합니다. 이 패키지는 iOS 앱에 SDWebImage 프레임워크가 표시되지 않도록 하려는 경우에 유용합니다.

Braze .unitypackage는 C# 인터페이스와 함께 Android 및 iOS 플랫폼용 기본 바인딩을 번들로 제공합니다.

Braze Unity 패키지는 다음과 같은 두 가지 통합 옵션을 사용해 Braze Unity 릴리즈 페이지에서 다운로드할 수 있습니다.

  1. Appboy.unitypackage
    • 이 패키지는 추가 종속성 없이 Braze Android 및 iOS SDK를 번들로 제공합니다. 이 통합 방법을 사용하는 경우 iOS에서 Braze 인앱 메시징 및 콘텐츠 카드 기능이 제대로 작동하지 않습니다. 커스텀 코드 없이 전체 Braze 기능을 활용하려는 경우 대신 아래 옵션을 사용합니다.
    • 이 통합 옵션을 사용하려면 Unity UI의 ‘Braze 구성’ 아래에서 Import SDWebImage dependency 옆의 확인란이 선택 해제되었는지 확인합니다.
  2. Appboy.unitypackage(SDWebImage 포함)
    • 이 통합 옵션은 Braze 인앱 메시징 및 iOS의 콘텐츠 카드 기능이 제대로 작동하는 데 필요한 Braze Android 및 iOS SDK와 iOS SDK에 대한 SDWebImage 종속성을 번들로 제공합니다. SDWebImage 프레임워크는 GIF를 포함한 이미지를 다운로드하고 표시하는 데 사용됩니다. Braze의 모든 기능을 활용하려면 이 패키지를 다운로드하여 가져오세요.
    • SDWebImage를 자동으로 가져오려면 Unity UI의 ‘Braze 구성’ 아래 Import SDWebImage dependency 옆의 확인란을 선택해야 합니다.

2단계: 패키지 가져오기

Unity 편집기에서 자산 > 패키지 가져오기 > 커스텀 패키지로 이동하여 패키지를 Unity 프로젝트로 가져옵니다 다음으로, 가져오기를 클릭합니다.

또는 커스텀 Unity 패키지 가져오기에 대한 자세한 가이드는 Unity 자산 패키지 가져오기 지침을 따릅니다.

Unity 편집기에서 자산 > 패키지 가져오기 > 커스텀 패키지로 이동하여 패키지를 Unity 프로젝트로 가져옵니다 다음으로, 가져오기를 클릭합니다.

또는 커스텀 Unity 패키지 가져오기에 대한 자세한 가이드는 Unity 자산 패키지 가져오기 지침을 따릅니다.

3단계: 소프트웨어 개발 키트 구성하기

3.1 단계: 구성 AndroidManifest.xml

풀로 AndroidManifest.xml 가 작동합니다. 앱에 AndroidManifest.xml이 없는 경우 다음을 템플릿으로 사용할 수 있습니다. 그렇지 않으면 이미 AndroidManifest.xml이 있는 경우 기존 AndroidManifest.xml에 다음 중 누락된 섹션이 추가되었는지 확인합니다.

  1. Assets/Plugins/Android/ 디렉토리로 이동하여 AndroidManifest.xml 파일을 엽니다. 이 위치는 Unity 에디터의 기본값입니다.
  2. AndroidManifest.xml 에서 다음 템플릿의 필수 권한 및 활동을 추가합니다.
  3. 완료되면 AndroidManifest.xml 에는 "android.intent.category.LAUNCHER" 이 있는 하나의 활동만 포함되어 있어야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="REPLACE_WITH_YOUR_PACKAGE_NAME">

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />

  <application android:icon="@drawable/app_icon" 
               android:label="@string/app_name">

    <!-- Calls the necessary Braze methods to ensure that analytics are collected and that push notifications are properly forwarded to the Unity application. -->
    <activity android:name="com.braze.unity.BrazeUnityPlayerActivity" 
      android:theme="@style/UnityThemeSelector"
      android:label="@string/app_name" 
      android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
      android:screenOrientation="sensor">
      <meta-data android:name="android.app.lib_name" android:value="unity" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

    <!-- A Braze specific FirebaseMessagingService used to handle push notifications. -->
    <service android:name="com.braze.push.BrazeFirebaseMessagingService"
      android:exported="false">
      <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
      </intent-filter>
    </service>
  </application>
</manifest>

3.2 단계: 패키지 이름으로 AndroidManifest.xml 업데이트

패키지 이름을 찾으려면 파일 > 빌드 설정 > 플레이어 설정 > Android 탭을 클릭합니다.

AndroidManifest.xml에서 REPLACE_WITH_YOUR_PACKAGE_NAME의 모든 인스턴스는 이전 단계의 Package Name으로 바뀌어야 합니다.

Step 3.3: 그레이들 종속성 추가

Unity 프로젝트에 그래들 종속성을 추가하려면 먼저 퍼블리싱 설정에서 ‘커스텀 메인 그래들 템플릿’ 을 활성화합니다. 그러면 프로젝트에서 사용할 템플릿 gradle 파일이 생성됩니다. gradle 파일은 설정 종속성 및 기타 빌드 시점 프로젝트 설정을 처리합니다. 자세한 내용은 Braze Unity 샘플 앱의 mainTemplate.gradle.

다음 종속성이 필요합니다:

1
2
3
4
5
6
implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation "androidx.recyclerview:recyclerview:1.2.1"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.6.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1"
implementation 'androidx.core:core:1.6.0'

외부 종속성 매니저를 사용하여 이러한 종속성을 설정할 수도 있습니다.

Step 3.4: Unity Android 통합 자동화하기

Braze는 Unity Android 통합을 자동화하기 위한 기본 Unity 솔루션을 제공합니다.

  1. Unity 편집기에서 Braze > Braze 구성으로 이동하여 Braze 구성 설정을 엽니다.
  2. Unity Android 통합 자동화 확인란을 선택합니다.
  3. Braze API 키 필드에 Braze 대시보드의 설정 관리에서 찾은 애플리케이션의 API 키를 입력합니다.

3.1 단계: API 키 설정

Braze는 Unity iOS 통합을 자동화하기 위한 기본 Unity 솔루션을 제공합니다. 이 솔루션은 Unity의 PostProcessBuildAttribute를 사용하여 빌드된 Xcode 프로젝트를 수정하고 IMPL_APP_CONTROLLER_SUBCLASS 매크로를 사용하여 UnityAppController를 서브클래스로 구성합니다.

  1. Unity 편집기에서 Braze > Braze 구성으로 이동하여 Braze 구성 설정을 엽니다.
  2. Unity iOS 통합 자동화 확인란을 선택합니다.
  3. Braze API 키 필드에 설정 관리에서 찾은 애플리케이션의 API 키를 입력합니다.

애플리케이션에서 이미 다른 UnityAppController 서브클래스를 사용하고 있는 경우, 서브클래스 구현을 AppboyAppDelegate.mm과 병합해야 합니다.

Unity 패키지 커스터마이징

1단계: 리포지토리 복제하기

터미널에서 Braze 소프트웨어 개발 키트 GitHub 리포지토리를 복제한 다음 해당 폴더로 이동합니다:

1
2
git clone [email protected]:braze-inc/braze-unity-sdk.git
cd ~/PATH/TO/DIRECTORY/braze-unity-sdk
1
2
git clone git@github.com:braze-inc/braze-unity-sdk.git
cd C:\PATH\TO\DIRECTORY\braze-unity-sdk

2단계: 리포지토리에서 패키지 내보내기

먼저 Unity를 실행하고 백그라운드에서 계속 실행합니다. 그런 다음 리포지토리 루트에서 다음 명령을 실행하여 패키지를 braze-unity-sdk/unity-package/ 으로 내보냅니다.

1
/Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -nographics -projectPath "$(pwd)" -executeMethod Appboy.Editor.Build.ExportAllPackages -quit
1
"%UNITY_PATH%" -batchmode -nographics -projectPath "%PROJECT_ROOT%" -executeMethod Appboy.Editor.Build.ExportAllPackages -quit	

3단계: Unity로 패키지 임포트하기

  1. Unity에서 자산 > 패키지 임포트 > 커스텀 패키지로 이동하여 원하는 패키지를 Unity 프로젝트로 임포트합니다.
  2. 가져오지 않으려는 파일이 있다면 지금 바로 선택을 취소하세요.
  3. Assets/Editor/Build.cs 에 있는 익스포트된 Unity 패키지를 커스텀합니다.

자동화 통합으로 전환(Swift만 해당)

Braze Unity SDK에서 제공하는 자동화된 iOS 통합 기능을 활용하려면 수동 통합에서 자동 통합으로 전환하는 다음 단계를 따르세요.

  1. Xcode 프로젝트의 UnityAppController 서브클래스에서 모든 Braze 관련 코드를 제거합니다.
  2. Unity 또는 Xcode 프로젝트에서 Braze iOS 라이브러리를 제거합니다(예: Appboy_iOS_SDK.frameworkSDWebImage.framework).
  3. Braze Unity 패키지를 프로젝트에 다시 임포트합니다. 전체 안내는 2단계를 참조하세요: 패키지를 가져오기.
  4. API 키를 다시 설정하세요. 전체 안내는 3.1단계를 참조하세요: API 키 설정.

선택적 구성

상세 로깅

Unity 편집기에서 상세 로깅을 활성화하려면 다음을 수행합니다.

  1. Braze > Braze 구성으로 이동하여 Braze 구성 설정을 엽니다.
  2. Braze Android 설정 표시 드롭다운을 클릭합니다.
  3. SDK 로그 수준 필드에 ‘0’ 값을 입력합니다.

Prime 31 호환성

Prime31 플러그인과 함께 Braze Unity 플러그인을 사용하려면 프로젝트의 AndroidManifest.xml을 편집하여 Prime31 호환 활동 클래스를 사용합니다. 의 모든 참조를 변경합니다. com.braze.unity.BrazeUnityPlayerActivity부터 com.braze.unity.prime31compatible.BrazeUnityPlayerActivity까지

Amazon 기기 메시징(ADM)

Braze는 Unity 앱에 ADM 푸시 통합을 지원합니다. ADM 푸시를 통합하려면 ADM API 키가 포함된 api_key.txt 파일을 만들어 Plugins/Android/assets/ 폴더에 넣으세요. ADM을 Braze와 통합하는 방법에 대한 자세한 내용은 ADM 푸시 통합 지침을 참조하세요.

Braze 플레이어 확장하기(Android만 해당)

제공된 예제 AndroidManifest.xml 파일에는 하나의 활동 클래스(BrazeUnityPlayerActivity)가 등록되어 있습니다. 이 클래스는 Braze SDK와 통합되어 있으며 세션 처리, 인앱 메시지 등록, 푸시 알림 분석 로깅 등을 통해 UnityPlayerActivity를 확장합니다. UnityPlayerActivity 클래스 확장에 대한 자세한 내용은 Unity를 참조하세요.

라이브러리 또는 플러그인 프로젝트에서 커스텀 UnityPlayerActivity를 만드는 경우, 커스텀 기능을 Braze와 통합하려면 BrazeUnityPlayerActivity를 확장해야 합니다. BrazeUnityPlayerActivity 확장 작업을 시작하기 전에, Unity 프로젝트에 Braze를 통합하기 위한 지침을 따르세요.

  1. Braze Android SDK 통합 지침에서 설명한 대로 라이브러리 또는 플러그인 프로젝트에 Braze Android SDK를 종속성으로 추가합니다.
  2. Unity 전용 기능이 포함된 Unity .aar을 Unity용으로 빌드 중인 Android 라이브러리 프로젝트에 통합합니다. appboy-unity.aar공개 리포지토리에서 사용할 수 있습니다. Unity 라이브러리가 성공적으로 통합되면 BrazeUnityPlayerActivity를 확장하도록 UnityPlayerActivity를 수정합니다.
  3. 라이브러리 또는 플러그인 프로젝트를 내보내고 평소처럼 /<your-project>/Assets/Plugins/Android 에 끌어다 놓습니다. Braze 소스 코드는 이미 /<your-project>/Assets/Plugins/Android에 있으므로 라이브러리나 플러그인에 포함하지 마세요.
  4. /<your-project>/Assets/Plugins/Android/AndroidManifest.xml 을 수정하여 BrazeUnityPlayerActivity 하위 클래스를 기본 활동으로 지정합니다.

이제 Braze와 완전히 통합되고 커스텀 UnityPlayerActivity 기능이 포함된 .apk 패키지를 Unity IDE에서 생성할 수 있습니다.

문제 해결

오류: “파일을 읽을 수 없습니다”

다음과 유사한 오류는 안전하게 무시해도 됩니다. Apple 소프트웨어는 Unity가 인식하지 못하는 CgBI라는 독점 PNG 확장을 사용합니다. 이러한 오류는 iOS 빌드나 Braze 번들에서 관련 이미지의 올바른 표시에는 영향을 미치지 않습니다.

1
Could not create texture from Assets/Plugins/iOS/AppboyKit/Appboy.bundle/...png: File could not be read

.NET MAUI SDK 통합

Braze .NET MAUI (이전의 Xamarin) SDK를 통합하면 기본 분석 기능과 사용자와 소통할 수 있는 인앱 메시지를 사용할 수 있습니다.

필수 조건

.NET MAUI Braze SDK를 통합하기 전에 다음 요구 사항을 충족하는지 확인하십시오:

  • version 3.0.0부터 이 SDK는 .NET 6 이상을 사용해야 하며 Xamarin 프레임워크를 사용하는 프로젝트에 대한 지원을 제거합니다.
  • version 4.0.0부터 이 SDK는 Xamarin & Xamarin.Forms에 대한 지원을 중단하고 .NET MAUI에 대한 지원을 추가했습니다. Xamarin 지원 종료에 대한 Microsoft의 정책을 참조하세요.

1단계: .NET MAUI 바인딩 가져오기

.NET MAUI 바인딩은 .NET MAUI 앱에서 네이티브 라이브러리를 사용하는 방법입니다. 바인딩 구현은 라이브러리에 대한 C# 인터페이스를 빌드한 다음, 애플리케이션에서 해당 인터페이스를 사용하는 작업으로 구성됩니다. .NET MAUI 설명서를 참조하십시오. Braze SDK 바인딩을 포함시키는 두 가지 방법(NuGet 사용 또는 소스에서 컴파일)이 있습니다.

가장 간단한 통합 방법은 NuGet.org 중앙 리포지토리에서 Braze SDK를 가져오는 것입니다. Visual Studio 사이드바에서 Packages 폴더를 오른쪽 클릭하고 Add Packages...를 클릭합니다. ‘Braze’를 검색하고 BrazePlatform.BrazeAndroidBinding 패키지를 프로젝트에 설치합니다.

Braze 위치 서비스 및 지오펜스를 사용하려면 BrazePlatform.BrazeAndroidLocationBinding 패키지도 설치하십시오.

두 번째 통합 방법은 바인딩 소스를 포함하는 것입니다. appboy-component/src/androidnet6 아래에서 바인딩 소스 코드를 찾을 수 있습니다. .NET MAUI 애플리케이션에서 BrazeAndroidBinding.csproj에 프로젝트 참조를 추가하면 바인딩이 프로젝트와 함께 빌드되고 Braze Android SDK에 접근할 수 있습니다.

Braze 위치 서비스 및 지오펜스를 사용하려면 appboy-component/src/androidnet6/BrazeAndroidLocationBinding 아래에 있는 BrazeAndroidLocationBinding.csproj에 프로젝트 참조를 추가하십시오.

.NET MAUI 바인딩은 .NET MAUI 앱에서 네이티브 라이브러리를 사용하는 방법입니다. 바인딩 구현은 라이브러리에 대한 C# 인터페이스를 빌드한 다음 애플리케이션에서 해당 인터페이스를 사용하는 작업으로 구성됩니다. Braze SDK 바인딩을 포함시키는 두 가지 방법(NuGet 사용 또는 소스에서 컴파일)이 있습니다.

가장 간단한 통합 방법은 NuGet.org 중앙 리포지토리에서 Braze SDK를 가져오는 것입니다. Visual Studio 사이드바에서 Packages 폴더를 오른쪽 클릭하고 Add Packages...를 클릭합니다. ‘Braze’를 검색하고 최신 .NET MAUI iOS NuGet 패키지: Braze.iOS.BrazeKit, Braze.iOS.BrazeUI, 및 Braze.iOS.BrazeLocation를 프로젝트에 설치하십시오.

또한 .NET MAUI로 쉽게 마이그레이션할 수 있도록 호환성 라이브러리 패키지(Braze.iOS.BrazeKitCompat, Braze.iOS.BrazeUICompat)도 제공합니다.

두 번째 통합 방법은 바인딩 소스를 포함하는 것입니다. appboy-component/src/iosnet6 아래에서 바인딩 소스 코드를 찾을 수 있습니다. .NET MAUI 애플리케이션에서 BrazeiOSBinding.csproj에 프로젝트 참조를 추가하면 바인딩이 프로젝트와 함께 빌드되고 Braze iOS SDK에 접근할 수 있습니다. 프로젝트의 ‘참조’ 폴더에 BrazeiOSBinding.csproj가 표시되는지 확인합니다.

2단계: Braze 인스턴스 구성

2.1 단계: Braze.xml에서 Braze SDK 구성

라이브러리가 통합되었으므로 프로젝트의 Resources/values 폴더에서 Braze.xml 파일을 생성해야 합니다. 해당 파일의 내용은 다음 코드 스니펫과 비슷해야 합니다:

1
2
3
4
5
6
7
8
9
  <?xml version="1.0" encoding="utf-8"?>
  <resources>
    <string translatable="false" name="com_braze_api_key">YOUR_API_KEY</string>
    <string translatable="false" name="com_braze_custom_endpoint">YOUR_CUSTOM_ENDPOINT_OR_CLUSTER</string>
    <string-array name="com_braze_internal_sdk_metadata">
      <item>XAMARIN</item>
      <item>NUGET</item>
    </string-array>
  </resources>

바인딩 소스를 수동으로 포함하는 경우 코드에서 <item>NUGET</item>을 제거합니다.

2.2단계: Android 매니페스트에 필수 권한 추가

API 키를 추가했으므로 AndroidManifest.xml 파일에 다음 권한을 추가해야 합니다.

1
<uses-permission android:name="android.permission.INTERNET" />

AndroidManifest.xml 의 예는 Android MAUI 샘플 애플리케이션을 참조하세요.

2.3단계: 사용자 세션 추적 및 인앱 메시지 등록

사용자 세션 추적을 활성화하고 인앱 메시지를 위해 앱을 등록하려면 앱에서 Application 클래스의 OnCreate() 생애주기 메서드에 다음 호출을 추가합니다.

1
RegisterActivityLifecycleCallbacks(new BrazeActivityLifecycleCallbackListener());

Braze 인스턴스를 설정할 때 다음 스니펫을 추가하여 인스턴스를 구성합니다.

1
2
3
var configuration = new BRZConfiguration("YOUR_API_KEY", "YOUR_ENDPOINT");
configuration.Api.AddSDKMetadata(new[] { BRZSDKMetadata.Xamarin });
braze = new Braze(configuration);

iOS MAUI 샘플 애플리케이션의 App.xaml.cs 파일을 참조하세요.

3단계: Test the integration

이제 애플리케이션을 실행하고 기기 정보 및 기타 분석과 함께 Braze 대시보드에 기록되는 세션을 확인할 수 있습니다. 기본 SDK 통합 모범 사례에 대한 자세한 내용은 Android 통합 지침을 참조하세요.

이제 애플리케이션을 실행하고 Braze 대시보드에 기록되는 세션을 확인할 수 있습니다. 기본 SDK 통합 모범 사례에 대한 자세한 내용은 iOS 통합 지침을 참조하세요.

ChatGPT 앱 통합

설정

1단계: Braze 통합 파일을 받으세요

저희 ChatGPT 앱 통합 저장소에서 파일을braze.js 복사하여 여러분의 프로젝트에 붙여넣으세요. 이 파일에는 필요한 모든 Braze 소프트웨어 개발 키트 구성 및 헬퍼 함수가 포함되어 있습니다.

2단계: 의존성 설치

Braze의 최신 기능 세트를 위해 당사 웹 소프트웨어 개발 키트를 설치하세요:

클라이언트 측 통합을 위해:

1
npm install @braze/web-sdk

Implementation

사용 사례에 따라 Braze를 ChatGPT 앱과 통합하는 두 가지 방법이 있습니다:

클라이언트 측 통합 (커스텀 위젯)

사용자 정의 ChatGPT 앱 위젯 내에서 Braze 메시지를 표시하고 사용자 상호작용을 추적하려면 웹 SDK 통합을 사용하십시오. 전체 메시징 예시는 여기 샘플 저장소에서 확인할 수 있습니다.

위젯 메타데이터 구성

다음 메타데이터를 MCP 서버 파일에 추가하여 Braze 도메인을 허용하고, 해당 지역에 따라 CDN 도메인을 업데이트하십시오:

1
2
3
4
5
6
7
8
9
"openai/widgetCSP": {
  connect_domains: ["https://YOUR-SDK-ENDPOINT"],
  resource_domains: [
    "https://appboy-images.com",
    "https://braze-images.com",
    "https://cdn.braze.eu",
    "https://use.fontawesome.com"
  ],
}

실제 Braze SDK 엔드포인트로 YOUR-SDK-ENDPOINT를 대체하십시오.

useBraze 훅 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { useBraze } from "./utils/braze";

function YourWidget() {
  const braze = useBraze({
    apiKey: "your-braze-api-key",
    baseUrl: "your-braze-endpoint.braze.com",
  });

  useEffect(() => {
    if (!braze.isInitialized) {
      return;
    }

    // Set user identity
    braze.changeUser("user-id-123");
    
    // Log widget interactions
    braze.logCustomEvent("viewed_pizzaz_list");
  }, [braze.isInitialized]);

  return (
    // Your widget JSX
  );
}

Braze 콘텐츠 카드 표시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const [cards, setCards] = useState([]);

useEffect(() => {
  // Get cached content cards
  setCards(braze.getCachedContentCards()?.cards ?? []);

  // Subscribe to content card updates
  braze.subscribeToContentCardsUpdates((contentCards) => {
    setCards(contentCards.cards);
  });

  // Open session
  braze.openSession();

  return () => {
    braze.removeAllSubscriptions();
  }
}, []);

위젯 이벤트 추적

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Track user interactions within your widget
const handleButtonClick = () => {
  braze.logCustomEvent("widget_button_clicked", {
    button_type: "save_list",
    widget_name: "pizza_list"
  });
};

const handleItemInteraction = (itemId) => {
  braze.logCustomEvent("item_interacted", {
    item_id: itemId,
    interaction_type: "view_details"
  });
};

서버 측 통합 (MCP 서버)

MCP 서버에서 메시징 기능을 위한 서버 측 통합이 필요한 경우, 문의하십시오[email protected]. MCP 서버의 이벤트 및 구매 내역을 추적하려면 당사의 REST API를 사용하십시오.

Braze Vega SDK에 대한 설명

Braze Vega SDK를 사용하면 분석을 수집하고 사용자에게 풍부한 인앱 메시지를 표시할 수 있습니다. Braze Vega SDK의 대부분의 메서드는 비동기이며, 대기하거나 해결해야 하는 약속을 반환합니다.

Braze Vega SDK 통합하기

1단계: Braze 라이브러리 설치

선호하는 패키지 관리자를 사용하여 Braze Vega SDK를 설치하세요.

프로젝트에서 NPM을 사용하는 경우, Braze Vega SDK를 종속성으로 추가할 수 있습니다.

1
npm install @braze/vega-sdk --save

설치 후, 필요한 메서드를 가져올 수 있습니다:

1
import { initialize, changeUser, openSession } from "@braze/vega-sdk";

프로젝트에서 Yarn을 사용하는 경우, Braze Vega SDK를 종속성으로 추가할 수 있습니다.

1
yarn add @braze/vega-sdk

설치 후, 필요한 메서드를 가져올 수 있습니다:

1
import { initialize, changeUser, openSession } from "@braze/vega-sdk";

2단계: SDK 초기화

Braze Vega SDK가 프로젝트에 추가된 후, Braze 대시보드의 설정 > 앱 설정에서 찾은 API 키와 SDK 엔드포인트 URL으로 라이브러리를 초기화하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { useEffect } from "react-native";
import {
  initialize,
  changeUser,
  logCustomEvent,
  openSession,
  setCustomUserAttribute,
  setUserCountry
} from "@braze/vega-sdk";

const App = () => {
  useEffect(() => {
    const initBraze = async () => {
      // Initialize the SDK
      await initialize("YOUR-API-KEY", "YOUR-SDK-ENDPOINT", {
        sessionTimeoutInSeconds: 60,
        appVersionNumber: "1.2.3.4",
        enableLogging: true, // set to `true` for debugging
      });

      // Change user
      await changeUser("user-id-123");
      
      // Start a session
      await openSession();
      
      // Log custom events and set user attributes
      logCustomEvent("visited-page", { pageName: "home" });
      setCustomUserAttribute("my-attribute", "my-attribute-value");
      setUserCountry("USA");
    };
    
    initBraze();
  }, []);
  
  return (
    // Your app components
  );
};

선택적 구성

로깅

디버깅 및 문제 해결을 돕기 위해 SDK 로깅을 활성화할 수 있습니다. 로깅을 활성화하는 방법은 여러 가지가 있습니다.

초기화 중 로깅 활성화

디버깅 메시지를 콘솔에 기록하기 위해 initialize()enableLogging: true을 전달하세요:

1
2
3
initialize("YOUR-API-KEY", "YOUR-SDK-ENDPOINT", {
  enableLogging: true
});

초기화 후 로깅 활성화

초기화 후 SDK 로깅을 활성화하거나 비활성화하려면 toggleLogging()을 사용하세요:

1
2
3
4
import { toggleLogging } from "@braze/vega-sdk";

// Enable logging
toggleLogging();

사용자 지정 로깅

SDK 로그 처리 방법에 대한 더 많은 제어를 위해 사용자 정의 로거 함수를 제공하려면 setLogger()을 사용하세요:

1
2
3
4
5
6
import { setLogger } from "@braze/vega-sdk";

setLogger((message) => {
  console.log("Braze Custom Logger: " + message);
  // Add your custom logging logic here
});

구성 옵션

SDK 동작을 사용자 정의하기 위해 initialize()에 추가 구성 옵션을 전달할 수 있습니다:

1
2
3
4
5
await initialize("YOUR-API-KEY", "YOUR-SDK-ENDPOINT", {
  sessionTimeoutInSeconds: 60,        // Configure session timeout (default is 30 seconds)
  appVersionNumber: "1.2.3.4",        // Set your app version
  enableLogging: true,                 // Enable SDK logging
});

SDK 업그레이드하기

NPM 또는 Yarn에서 Braze Vega SDK를 참조할 때 패키지 종속성을 업데이트하여 최신 버전으로 업그레이드할 수 있습니다:

1
2
3
npm update @braze/vega-sdk
# or, using yarn:
yarn upgrade @braze/vega-sdk

통합 테스트

SDK 통합이 올바르게 작동하는지 확인하려면:

  1. 콘솔에서 디버그 메시지를 보려면 enableLogging: true로 SDK를 초기화하십시오
  2. 다른 SDK 메서드를 호출하기 전에 await changeUser()을(를) 확인하십시오
  3. 세션을 시작하려면 await openSession()을(를) 호출하십시오
  4. 세션 데이터가 기록되고 있는지 확인하려면 개요에서 Braze 대시보드를 확인하십시오
  5. 커스텀 이벤트를 로깅하고 대시보드에 나타나는지 확인하십시오
New Stuff!