데이터 수집 관리
필요에 따라 데이터 개인정보 보호 규정을 준수할 수 있도록 Braze SDK의 데이터 수집을 관리하는 방법을 알아보세요.
데이터 추적 비활성화하기

웹 SDK에서 데이터 추적 활동을 비활성화하려면 disableSDK() 메서드를 사용하세요. 이 메서드는 disableSDK()가 호출되기 전에 기록된 모든 데이터를 동기화하며, 이후 이 페이지 및 향후 페이지 로드에서 Braze 웹 SDK에 대한 모든 후속 호출이 무시됩니다.
웹 추적을 비활성화하거나 다시 활성화하려면 추적 비활성화 또는 추적 재개 태그 유형을 사용하세요. 이 두 옵션은 각각 disableSDK와 enableSDK를 호출합니다.
모범 사례
사용자에게 추적을 중지할 수 있는 옵션을 제공하려면, 두 개의 링크 또는 버튼이 있는 간단한 페이지를 구축하는 것이 좋습니다. 하나는 클릭 시 disableSDK()를 호출하고, 다른 하나는 enableSDK()를 호출하여 사용자가 다시 옵트인할 수 있도록 합니다. 이러한 컨트롤을 사용하여 다른 데이터 하위 프로세서를 통한 추적도 시작하거나 중지할 수 있습니다.

Braze SDK는 disableSDK()를 호출하기 위해 초기화할 필요가 없으므로, 완전한 익명 사용자에 대해서도 추적을 비활성화할 수 있습니다. 반대로, enableSDK()는 Braze SDK를 초기화하지 않으므로 추적을 활성화하려면 이후에 initialize()도 호출해야 합니다.
데이터 추적 재개하기
데이터 수집을 재개하려면 enableSDK() 메서드를 사용하세요.
로그아웃 및 푸시 등록 해제
Braze SDK는 사용자가 푸시 알림 등록을 해제하거나 로그아웃할 때 기기를 타겟팅 대상에서 제거하는 메서드를 제공합니다. 이 메서드는 Braze 서버와 SDK에서 현재 사용자의 푸시 등록 데이터를 제거하므로, Braze는 해당 사용자에게 더 이상 푸시 알림 Campaign을 전송하지 않습니다.
로그아웃
사용자가 애플리케이션에서 로그아웃할 때 SDK의 logout 메서드를 호출하여 현재 사용자로부터 기기의 푸시 등록을 제거하고 SDK에서 자동으로 정리 작업을 수행합니다. logout 메서드는 다음 작업을 수행합니다:
- Braze 서버에서 현재 사용자의 기기 푸시 토큰 등록을 해제합니다.
- 등록 해제 호출이 성공하면 SDK가 로컬에 저장된 SDK 데이터를 삭제하고 SDK를 비활성화합니다.
- 실패 시
errorCallback을 호출하여 통합자가 조치를 취할 수 있도록 합니다.
다음 예제는 콜백 기반 logout 처리를 보여줍니다. 즉각적인 성공 및 오류 처리가 필요할 때 사용하며, 로깅 부분을 앱 흐름에 맞게 교체하세요.
1
2
3
4
5
6
7
8
9
10
11
import { logout } from "@braze/web-sdk";
const successCallback = () => {
console.log('Successfully logged out');
};
const errorCallback = () => {
console.log('Failed to log out');
};
logout(successCallback, errorCallback);
logout 후 추적 및 푸시 다시 활성화하기
logout이 성공한 후 enableSDK()를 호출한 다음, 웹 푸시 설정을 따라 운영 체제(OS) 또는 푸시 공급자에 알림을 다시 등록하세요.
즉시 등록 해제 호출 방지
OS 또는 푸시 공급자에 푸시 알림을 등록한 직후에 logout 또는 unregisterPush를 호출하지 마세요. 비동기 서버 처리로 인해 드물게 푸시 토큰이 Braze 사용자에게 다시 추가될 수 있습니다.
푸시 등록 해제
추가적인 자동 정리 없이 기기에 대한 푸시 전송을 중지하려면 unregisterPush 메서드를 사용하세요. 이 메서드는 Braze 서버에서 현재 사용자의 기기 푸시 토큰을 제거하고 로컬에 저장된 토큰을 삭제합니다.
다음 예제는 콜백 기반 unregisterPush 처리를 보여줍니다. 즉각적인 성공 및 오류 처리가 필요할 때 사용하며, 로깅 부분을 앱 흐름에 맞게 교체하세요.
1
2
3
4
5
6
7
8
9
10
11
import { unregisterPush } from "@braze/web-sdk";
const successCallback = () => {
console.log('Successfully unregistered from push');
};
const errorCallback = () => {
console.log('Failed to unregister from push');
};
unregisterPush(successCallback, errorCallback);
unregisterPush 후 푸시 다시 등록하기
unregisterPush를 호출한 후, Braze 푸시 알림을 다시 전송하기 전에 웹 푸시 설정을 따라 OS 또는 푸시 공급자에 알림을 다시 등록하세요.

지원되는 브라우저에서 활성 푸시 구독이 존재하는 경우, unregisterPush는 브라우저 Push API에서 구독을 해제한 후 Braze가 관리하는 서비스 워커도 등록 해제합니다. manageServiceWorkerExternally를 true로 설정하면 SDK가 서비스 워커를 등록 해제하지 않습니다.
즉시 등록 해제 호출 방지
OS 또는 푸시 공급자에 푸시 알림을 등록한 직후에 logout 또는 unregisterPush를 호출하지 마세요. 비동기 서버 처리로 인해 드물게 푸시 토큰이 Braze 사용자에게 다시 추가될 수 있습니다.
Google Play 개인정보 보호 설문지
2022년 4월부터 Android 개발자는 개인정보 보호 및 보안 관행을 공개하기 위해 Google Play의 데이터 안전 양식을 작성해야 합니다. 이 가이드는 Braze가 앱 데이터를 처리하는 방법에 대한 정보와 함께 이 새 양식을 작성하는 방법에 대한 지침을 제공합니다.
앱 개발자는 Braze에 전송하는 데이터를 직접 관리할 수 있습니다. Braze가 수신한 데이터는 사용자의 지침에 따라 처리됩니다. Google은 이를 서비스 제공업체로 분류합니다.

이 문서에서는 Google 안전 섹션 설문조사와 관련하여 Braze SDK가 처리하는 데이터에 대한 정보를 제공합니다. 이 문서는 법률 자문을 제공하지 않으므로 Google에 정보를 제출하기 전에 법무팀과 상담하는 것이 좋습니다.
질문
| 질문 | Braze SDK에 대한 답변 |
|---|---|
| 앱에서 필수 사용자 데이터 유형을 수집하거나 공유하나요? | 예. Braze Android SDK는 앱 개발자가 구성한 대로 데이터를 수집합니다. |
| 앱에서 수집한 모든 사용자 데이터는 전송 중에 암호화되나요? | 예. |
| 사용자가 자신의 데이터 삭제를 요청할 수 있는 방법을 제공하나요? | 예. |
사용자의 데이터 및 삭제 요청 처리에 대한 자세한 내용은 Braze 데이터 보존 정보를 참조하세요.
데이터 수집
Braze에서 수집하는 데이터는 특정 통합 및 수집하기로 선택한 사용자 데이터에 따라 결정됩니다. Braze가 기본적으로 수집하는 데이터와 특정 속성을 비활성화하는 방법에 대해 자세히 알아보려면 SDK 데이터 수집 옵션을 참조하세요.
| 카테고리 | 데이터 유형 | Braze 사용 |
|---|---|---|
| 위치 | 대략적인 위치 | 기본적으로 수집되지 않습니다. |
| 정확한 위치 | ||
| 개인 정보 | 이름 | |
| 이메일 주소 | ||
| 사용자 ID | ||
| 주소 | ||
| 전화번호 | ||
| 인종 및 민족 | ||
| 정치적 또는 종교적 신념 | ||
| 성적 취향 | ||
| 기타 정보 | ||
| 재무 정보 | 사용자 결제 정보 | |
| 구매 내역 | ||
| 신용 점수 | ||
| 기타 재무 정보 | ||
| 건강 및 피트니스 | 건강 정보 | 기본적으로 수집되지 않습니다. |
| 피트니스 정보 | ||
| 메시지 | 이메일 | 기본적으로 수집되지 않습니다. |
| SMS 또는 MMS | ||
| 기타 인앱 메시지 | Braze를 통해 인앱 메시지 또는 푸시 알림을 보내는 경우, 사용자가 이러한 메시지를 열거나 읽은 시점에 대한 정보를 수집합니다. | |
| 사진 및 동영상 | 사진 | 수집되지 않습니다. |
| 동영상 | ||
| 오디오 파일 | 음성 또는 사운드 녹음 | |
| 음악 파일 | ||
| 기타 오디오 파일 | ||
| 파일 및 문서 | 파일 및 문서 | |
| 캘린더 | 캘린더 이벤트 | |
| 연락처 | 연락처 | |
| 앱 활동 | 앱 상호 작용 | Braze는 기본적으로 세션 활동 데이터를 수집합니다. 다른 모든 상호 작용과 활동은 앱의 커스텀 통합에 의해 결정됩니다. |
| 앱 내 검색 기록 | 수집되지 않습니다. | |
| 설치된 앱 | 수집되지 않습니다. | |
| 기타 사용자 제작 콘텐츠 | 기본적으로 수집되지 않습니다. | |
| 기타 동작 | ||
| 웹 브라우징 | 웹 브라우징 기록 | 수집되지 않습니다. |
| 앱 정보 및 성능 | 크래시 로그 | Braze는 SDK 내에서 발생하는 오류에 대한 크래시 로그를 수집합니다. 여기에는 사용자의 휴대폰 모델 및 OS 수준과 Braze 전용 사용자 ID가 포함됩니다. |
| 진단 | 수집되지 않습니다. | |
| 기타 앱 성능 데이터 | 수집되지 않습니다. | |
| 기기 또는 기타 ID | 기기 또는 기타 ID | Braze는 사용자의 기기를 구분하기 위해 기기 ID를 생성하고, 메시지가 의도한 기기로 올바르게 전송되었는지 확인합니다. |
Braze가 수집하는 기타 기기 데이터 중 Google Play 데이터 안전 가이드라인의 범위를 벗어날 수 있는 데이터에 대해 자세히 알아보려면 Android 스토리지 개요 및 SDK 데이터 수집 옵션을 참조하세요.
데이터 추적 비활성화하기
Android SDK에서 데이터 추적 활동을 비활성화하려면 disableSDK() 메서드를 사용하세요. 이렇게 하면 모든 네트워크 연결이 취소되며, Braze SDK가 더 이상 Braze 서버로 데이터를 전송하지 않습니다.
이전에 저장된 데이터 삭제
wipeData() 메서드를 사용하여 기기에 저장된 모든 클라이언트 측 데이터를 완전히 삭제할 수 있습니다.
데이터 추적 재개
데이터 수집을 재개하려면 enableSDK() 메서드를 사용할 수 있습니다. 이전에 삭제된 데이터는 복원되지 않는다는 점에 유의하세요.
로그아웃 및 푸시 등록 해제
Braze SDK는 사용자가 푸시 알림 등록을 해제하거나 로그아웃할 때 기기를 타겟팅 대상에서 제외하는 메서드를 제공합니다. 이 메서드는 Braze 서버와 SDK에서 현재 사용자의 푸시 등록 데이터를 제거하므로, Braze는 해당 사용자에게 더 이상 푸시 알림 Campaign을 전송하지 않습니다.
로그아웃
사용자가 애플리케이션에서 로그아웃할 때 SDK의 logout 메서드를 호출하여 현재 사용자로부터 기기의 푸시 등록을 제거하고 SDK에서 자동으로 정리 작업을 수행합니다. logout 메서드는 다음 작업을 수행합니다:
- Braze 서버에서 현재 사용자의 기기 푸시 토큰 등록을 해제합니다.
- 등록 해제 호출이 성공하면 SDK가 로컬에 저장된 SDK 데이터를 삭제하고 SDK를 비활성화합니다.
- 실패 시 오류와
isRetriable플래그를 발생시켜 통합 담당자가 조치를 취할 수 있도록 합니다.
다음 콜백 예제는 logout의 성공 및 오류 처리를 보여줍니다. 콜백 기반 로그아웃 플로우에 사용하고, 로깅 부분을 재시도 또는 재인증 로직으로 교체하세요.
1
2
3
4
5
6
7
8
9
10
11
// Completion callback
Braze.getInstance(context).logout { result ->
result
.onSuccess {
Log.d(TAG, "Logout successful")
}
.onFailure { error ->
val pushError = error as? BrazePushUnregistrationException
Log.e(TAG, "Logout failed: ${error.message}, isRetriable: ${pushError?.isRetriable}")
}
}
다음 코루틴 예제는 일시 중단(suspending) logout API를 보여줍니다. 코루틴 기반 플로우에서 사용하고, 앱에 맞게 성공 및 실패 분기를 커스터마이즈하세요.
1
2
3
4
5
6
7
8
9
10
lifecycleScope.launch {
runCatching { Braze.getInstance(context).logout() }
.onSuccess {
Log.d(TAG, "Logout successful")
}
.onFailure { error ->
val pushError = error as? BrazePushUnregistrationException
Log.e(TAG, "Logout failed: ${error.message}, isRetriable: ${pushError?.isRetriable}")
}
}
logout 후 추적 및 푸시 다시 활성화하기
logout이 성공한 후 enableSDK()로 SDK를 다시 활성화한 다음, Android 푸시 설정을 따라 운영 체제(OS) 또는 푸시 제공자에 알림을 다시 등록하세요.
즉시 등록 해제 호출 방지
OS 또는 푸시 제공자에 푸시 알림을 등록한 직후에 logout 또는 unregisterPush를 호출하지 마세요. 비동기 서버 처리로 인해 드물게 푸시 토큰이 Braze 사용자에게 다시 추가될 수 있습니다.
푸시 등록 해제
추가적인 자동 정리 없이 기기로의 푸시 전송을 중지하려면 unregisterPush 메서드를 사용하세요. 이 메서드는 Braze 서버에서 현재 사용자의 기기 푸시 토큰을 제거하고, 로컬에 저장된 토큰을 삭제합니다.
다음 콜백 예제는 unregisterPush 결과를 처리하는 방법을 보여줍니다. 콜백 기반 플로우에서 사용하고, 로깅 부분을 자체 재시도 처리 로직으로 교체하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Completion callback
Braze.getInstance(context).unregisterPush { result ->
result
.onSuccess {
Log.d(TAG, "Push unregistered successfully")
}
.onFailure { error ->
val pushError = error as? BrazePushUnregistrationException
Log.e(
TAG,
"Push unregistration failed: ${error.message}, isRetriable: ${pushError?.isRetriable}"
)
}
}
다음 코루틴 예제는 일시 중단(suspending) unregisterPush API를 보여줍니다. 코루틴 기반 플로우에서 사용하고, 앱에 맞게 성공 및 실패 분기를 커스터마이즈하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
lifecycleScope.launch {
runCatching { Braze.getInstance(context).unregisterPush() }
.onSuccess {
Log.d(TAG, "Push unregistered successfully")
}
.onFailure { error ->
val pushError = error as? BrazePushUnregistrationException
Log.e(
TAG,
"Push unregistration failed: ${error.message}, isRetriable: ${pushError?.isRetriable}"
)
}
}
unregisterPush 후 푸시 다시 등록하기
unregisterPush를 호출한 후 Braze 푸시 알림을 다시 전송하려면, Android 푸시 설정을 따라 OS 또는 푸시 제공자에 알림을 다시 등록하세요.
즉시 등록 해제 호출 방지
OS 또는 푸시 제공자에 푸시 알림을 등록한 직후에 logout 또는 unregisterPush를 호출하지 마세요. 비동기 서버 처리로 인해 드물게 푸시 토큰이 Braze 사용자에게 다시 추가될 수 있습니다.
Apple의 개인정보 취급방침
추적 데이터란 무엇인가요?
Apple은 “추적 데이터”를 서드파티 데이터(예: 타겟 광고) 또는 데이터 브로커에 연결된 최종사용자 또는 기기에 대해 앱에서 수집한 데이터로 정의합니다. 예제와 함께 전체 정의는 Apple: 추적을 참조하세요.
기본적으로 Braze SDK는 추적 데이터를 수집하지 않습니다. 하지만 Braze SDK 구성에 따라 앱의 개인정보 보호 매니페스트에 Braze 관련 데이터를 나열해야 할 수도 있습니다.
개인정보 보호 매니페스트란?
개인정보 보호 매니페스트는 앱 및 서드파티 SDK가 데이터를 수집하는 이유와 데이터 수집 방법을 설명하는 Xcode 프로젝트의 파일입니다. 데이터를 추적하는 각 서드파티 SDK에는 자체 개인정보 보호 매니페스트가 필요합니다. 앱의 프라이버시 보고서를 생성하면 이러한 개인정보 보호 매니페스트 파일이 단일 보고서로 자동 집계됩니다.
API 추적 데이터 도메인
iOS 17.2부터 Apple은 최종사용자가 광고 추적 투명성(ATT) 프롬프트를 수락할 때까지 앱에서 선언된 모든 추적 엔드포인트를 차단합니다. Braze는 추적 데이터를 라우팅할 수 있는 추적 엔드포인트를 제공하는 동시에, 추적하지 않는 퍼스트파티 데이터를 원래 엔드포인트로 라우팅할 수 있도록 합니다.
Braze 추적 데이터 선언

전제 조건
이 기능을 구현하려면 다음 Braze SDK 버전이 필요합니다:
1단계: 현재 정책 검토
법무팀과 함께 Braze SDK의 현재 데이터 수집 정책을 검토하여 앱이 Apple이 정의한 추적 데이터를 수집하는지 확인하세요. 추적 데이터를 수집하지 않는 경우, 현재 Braze SDK에 대한 개인정보 보호 매니페스트를 커스텀할 필요가 없습니다. Braze SDK의 데이터 수집 정책에 대한 자세한 내용은 SDK 데이터 수집을 참조하세요.

Braze 이외의 SDK가 추적 데이터를 수집하는 경우, 해당 정책을 별도로 검토해야 합니다.
2단계: 개인정보 보호 매니페스트 생성
먼저 Xcode 프로젝트에서 PrivacyInfo.xcprivacy 파일을 검색하여 개인정보 보호 매니페스트가 이미 있는지 확인하세요. 이 파일이 이미 있는 경우 다음 단계로 진행할 수 있습니다. 그렇지 않은 경우 Apple: 개인정보 보호 매니페스트 생성을 참조하세요.
3단계: 개인정보 보호 매니페스트에 엔드포인트 추가
Xcode 프로젝트에서 앱의 PrivacyInfo.xcprivacy 파일을 열고, 테이블을 마우스 오른쪽 버튼으로 클릭한 다음 Raw Keys and Values를 선택하세요.

App Privacy Configuration에서 NSPrivacyTracking을 선택하고 값을 YES로 설정하세요.
![]()
App Privacy Configuration에서 NSPrivacyTrackingDomains를 선택하세요. 도메인 배열에 새 요소를 추가하고, 이전에 AppDelegate에 추가한 엔드포인트 앞에 sdk-tracking을 접두사로 붙여 값을 설정하세요.
![]()
4단계: 추적 데이터 선언
다음으로 AppDelegate.swift를 열고 정적 또는 동적 추적 목록을 생성하여 선언하려는 각 추적 속성을 나열하세요. Apple은 최종사용자가 ATT 프롬프트를 수락할 때까지 이러한 속성을 차단하므로, 본인과 법무팀이 추적으로 간주하는 속성만 나열하세요. 예를 들어:
다음 예시에서는 dateOfBirth, customEvent, customAttribute가 정적 목록 내에서 추적 데이터로 선언됩니다.
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 UIKit
import BrazeKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
static var braze: Braze? = nil
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let configuration = Braze.Configuration(apiKey: brazeApiKey, endpoint: brazeEndpoint)
// Declare which types of data you wish to collect for user tracking.
configuration.api.trackingPropertyAllowList = [
.dateOfBirth,
.customEvent(["event-1"]),
.customAttribute(["attribute-1", "attribute-2"])
]
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
return true
}
}
다음 예시에서는 최종사용자가 앱 추적 투명성(ATT) 프롬프트를 수락한 후 추적 목록이 자동으로 업데이트됩니다. 앱 활성화 시 권한을 요청하는 것은 씬별 이벤트이므로, 이 코드는 AppDelegate.swift의 applicationDidBecomeActive(_:)가 아닌 SceneDelegate.swift 파일의 sceneDidBecomeActive(_:) 메서드에 위치해야 합니다(UIScene 생명주기를 채택한 앱에 필요). Braze 인스턴스는 1단계에서 구성한 AppDelegate.braze 정적 속성을 통해 SceneDelegate에서 접근할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func sceneDidBecomeActive(_ scene: UIScene) {
// Request and check your user's tracking authorization status.
ATTrackingManager.requestTrackingAuthorization { status in
// Let Braze know whether user data is allowed to be collected for tracking.
let enableAdTracking = status == .authorized
AppDelegate.braze?.set(adTrackingEnabled: enableAdTracking)
// Add the `.firstName` and `.lastName` properties, while removing the `.everything` configuration.
AppDelegate.braze?.updateTrackingAllowList(
adding: [.firstName, .lastName],
removing: [.everything]
)
}
}
5단계: 무한 재시도 루프 방지
SDK가 무한 재시도 루프에 빠지는 것을 방지하려면 set(adTrackingEnabled: enableAdTracking) 메서드를 사용하여 ATT 권한을 처리하세요. SceneDelegate.swift 메서드의 adTrackingEnabled 속성은 다음과 유사하게 처리해야 합니다:
1
2
3
4
5
6
7
8
func sceneDidBecomeActive(_ scene: UIScene) {
// Request and check your user's tracking authorization status.
ATTrackingManager.requestTrackingAuthorization { status in
// Let Braze know whether user data is allowed to be collected for tracking.
let enableAdTracking = status == .authorized
AppDelegate.braze?.set(adTrackingEnabled: enableAdTracking)
}
}
데이터 추적 비활성화하기
SWIFT SDK에서 데이터 추적 활동을 비활성화하려면 Braze 인스턴스의 enabled 속성을 false로 설정하세요. enabled가 false로 설정되면 Braze SDK는 공개 API에 대한 모든 호출을 무시합니다. 또한 SDK는 네트워크 요청, 이벤트 처리 등 진행 중인 모든 작업을 취소합니다.
이전에 저장된 데이터 삭제
wipeData() 메서드를 사용하여 사용자 기기에 로컬로 저장된 SDK 데이터를 완전히 삭제할 수 있습니다.
Braze SWIFT 버전 7.0.0 이상에서는 SDK와 wipeData() 메서드가 기기 ID에 대해 UUID를 무작위로 생성합니다. 그러나 useUUIDAsDeviceId가 false로 설정되어 있거나 SWIFT SDK 버전 5.7.0 이하를 사용하는 경우, IDFV가 해당 사용자의 기기 ID로 자동 사용되므로 /users/delete에 POST 요청도 보내야 합니다.
수동 푸시 통합을 사용하고 있으며 앱에서 wipeData()를 호출한 후 동일한 앱 실행 중에 SDK를 다시 활성화하는 경우, Braze가 갱신된 기기 토큰을 수신할 수 있도록 registerForRemoteNotifications()를 다시 호출해야 합니다. 자세한 내용은 푸시 알림 설정을 참조하세요.
데이터 추적 재개
데이터 수집을 재개하려면 enabled를 true로 설정하세요. 이전에 삭제된 데이터는 복원되지 않는다는 점에 유의하세요.
로그아웃 및 푸시 등록 해제
Braze SDK는 사용자가 푸시 알림 등록을 해제하거나 로그아웃할 때 기기를 타겟팅 대상에서 제외하는 메서드를 제공합니다. 이 메서드는 Braze 서버와 SDK에서 현재 사용자의 푸시 등록 데이터를 제거하므로, Braze는 해당 사용자에게 더 이상 푸시 알림 Campaign을 전송하지 않습니다.
로그아웃
사용자가 애플리케이션에서 로그아웃할 때, SDK의 logout 메서드를 호출하여 현재 사용자로부터 기기의 푸시 등록을 제거하고 SDK에서 자동으로 정리 작업을 수행합니다. logout 메서드는 다음 작업을 수행합니다:
- Braze 서버에서 현재 사용자의 기기 푸시 토큰 및 모든 Live Activities push-to-start 토큰의 등록을 해제합니다.
- 등록 해제 호출이 성공하면, SDK는 로컬에 저장된 SDK 데이터를 삭제하고 SDK를 비활성화합니다.
- 실패 시, 오류와
isRetriable플래그를 발생시켜 통합 담당자가 조치를 취할 수 있도록 합니다.
다음 완료 핸들러 예제는 logout의 성공 및 실패 처리를 보여줍니다. 콜백 기반 흐름에 사용하고, 로깅 부분을 앱의 재시도 또는 재인증 로직으로 교체하세요.
1
2
3
4
5
6
7
8
9
// Completion handler
AppDelegate.braze?.logout { result in
switch result {
case .success:
print("Logout successful")
case .failure(let error):
print("Logout failed: \(error.message), isRetriable: \(error.isRetriable)")
}
}
다음 async 예제는 일시 중단 가능한 logout API를 보여줍니다. 비동기 워크플로에 사용하고, 앱에 맞게 성공 및 실패 분기를 커스터마이즈하세요.
1
2
3
4
5
6
7
// Async/await
do {
try await AppDelegate.braze?.logout()
print("Logout successful")
} catch let error as Braze.LogoutErrorResult {
print("Logout failed: \(error.message), isRetriable: \(error.isRetriable)")
}
이 OBJECTIVE-C 예제는 완료 기반 logout 처리를 보여줍니다. OBJECTIVE-C 통합에서 사용하고, 로깅 부분을 앱 흐름에 맞게 교체하세요.
1
2
3
4
5
6
[AppDelegate.braze logoutWithCompletion:^(NSError * _Nullable error) {
if (error) {
NSNumber *isRetriable = error.userInfo[BRZLogoutErrorUserInfoKey.isRetriable];
NSLog(@"Logout failed: %@, isRetriable=%@", error.localizedDescription, isRetriable);
}
}];
logout 후 추적 및 푸시 다시 활성화하기
logout이 성공한 후, enabled를 다시 true로 설정한 다음, Swift 푸시 설정을 따라 운영 체제(OS) 또는 푸시 공급자에 알림을 다시 등록하세요.
즉시 등록 해제 호출 방지
OS 또는 푸시 공급자에 푸시 알림을 등록한 직후에 logout 또는 unregisterPush를 호출하지 마세요. 비동기 서버 처리로 인해 드물게 푸시 토큰이 Braze 사용자에게 다시 추가될 수 있습니다.
푸시 등록 해제
추가적인 자동 정리 없이 기기에 대한 푸시 전송을 중지하려면 unregisterPush 메서드를 사용하세요. 이 메서드는 Braze 서버에서 현재 사용자의 기기 푸시 토큰을 제거하고, 로컬에 저장된 토큰을 삭제합니다.
다음 완료 핸들러 예제는 unregisterPush의 성공 및 실패 처리를 보여줍니다. 콜백 기반 흐름에 사용하고, 로깅 부분을 자체 재시도 로직으로 교체하세요.
1
2
3
4
5
6
7
8
9
// Completion handler
AppDelegate.braze?.notifications.unregisterPush { result in
switch result {
case .success:
print("Push unregistered successfully")
case .failure(let error):
print("Push unregistration failed: \(error.message), isRetriable: \(error.isRetriable)")
}
}
다음 async 예제는 일시 중단 가능한 unregisterPush API를 보여줍니다. 비동기 워크플로에 사용하고, 앱에 맞게 성공 및 실패 분기를 커스터마이즈하세요.
1
2
3
4
5
6
7
// Async/await
do {
try await AppDelegate.braze?.notifications.unregisterPush()
print("Push unregistered successfully")
} catch let error as Braze.PushUnregistrationError {
print("Push unregistration failed: \(error.message), isRetriable: \(error.isRetriable)")
}
이 OBJECTIVE-C 예제는 완료 기반 unregisterPush 처리를 보여줍니다. OBJECTIVE-C 통합에서 사용하고, 로깅 부분을 앱 흐름에 맞게 교체하세요.
1
2
3
4
5
6
7
8
[AppDelegate.braze.notifications unregisterPushWithCompletion:^(NSError * _Nullable error) {
if (error) {
NSNumber *isRetriable = error.userInfo[BRZPushUnregistrationErrorUserInfoKey.isRetriable];
NSNumber *statusCode = error.userInfo[BRZPushUnregistrationErrorUserInfoKey.httpStatusCode];
NSLog(@"Push unregistration failed: %@, isRetriable=%@ status=%@",
error.localizedDescription, isRetriable, statusCode);
}
}];
unregisterPush 후 푸시 다시 등록하기
unregisterPush를 호출한 후, Braze 푸시 알림을 다시 전송하기 전에 Swift 푸시 설정을 따라 OS 또는 푸시 공급자에 알림을 다시 등록하세요.
즉시 등록 해제 호출 방지
OS 또는 푸시 공급자에 푸시 알림을 등록한 직후에 logout 또는 unregisterPush를 호출하지 마세요. 비동기 서버 처리로 인해 드물게 푸시 토큰이 Braze 사용자에게 다시 추가될 수 있습니다.
Live Activities의 push-to-start 토큰 등록 해제
Live Activities는 push-to-start 토큰을 사용하여 원격으로 시작할 수 있습니다. Braze가 기기에서 Live Activities를 원격으로 시작하지 못하도록 하려면, unregisterPushToStart 메서드를 호출하여 현재 등록된 모든 유형(기본값) 또는 지정된 Activity 유형 목록의 등록을 해제하세요.
현재 실행 중인 Live Activities는 계속 업데이트를 수신하며, 이 메서드는 새로운 활동을 원격으로 시작하는 기능만 제거합니다. Live Activities에 대한 자세한 내용은 Live Activities를 참조하세요.

Live Activity에 대해 registerPushToStart를 호출한 직후에 logout 또는 unregisterPushToStart를 호출하지 마세요. 서버 처리의 비동기 특성으로 인해 드물게 push-to-start 토큰이 Braze 사용자에게 다시 추가될 수 있습니다.
다음 예제는 모든 push-to-start Activity 유형의 등록을 해제하는 방법을 보여줍니다. 로그아웃한 사용자가 더 이상 원격으로 시작되는 새로운 Live Activities를 수신하지 않아야 할 때 사용하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Unregister all currently-registered activity types
// Completion handler
AppDelegate.braze?.liveActivities.unregisterPushToStart { result in
switch result {
case .success:
print("Push-to-start unregistered successfully")
case .failure(let error):
print("Push-to-start unregistration failed: \(error.message), isRetriable: \(error.isRetriable)")
}
}
// Async/await
do {
try await AppDelegate.braze?.liveActivities.unregisterPushToStart()
print("Push-to-start unregistered successfully")
} catch let error as Braze.PushUnregistrationError {
print("Push-to-start unregistration failed: \(error.message), isRetriable: \(error.isRetriable)")
}
다음 예제는 특정 Activity 유형의 등록을 해제하는 방법을 보여줍니다. 선택한 Live Activities만 원격 시작을 중지해야 할 때 사용하세요.
1
2
3
4
5
6
7
8
9
// Unregister specific activity types
AppDelegate.braze?.liveActivities.unregisterPushToStart(types: ["ActivityType1", "ActivityType2"]) { result in
switch result {
case .success:
print("Push-to-start unregistered successfully")
case .failure(let error):
print("Push-to-start unregistration failed: \(error.message), isRetriable: \(error.isRetriable)")
}
}

unregisterPushToStart는 Live Activities가 Swift 전용 타입에 의존하므로 OBJECTIVE-C API가 없습니다.
IDFV 수집
이전 버전의 Braze iOS SDK에서는 IDFV(Identifier for Vendor) 필드가 사용자의 기기 ID로 자동 수집되었습니다. Swift SDK v5.7.0부터 IDFV 필드를 선택적으로 비활성화할 수 있게 되었으며, 대신 Braze가 랜덤 UUID를 기기 ID로 설정하도록 변경되었습니다. Swift SDK v7.0.0부터는 IDFV 필드가 기본적으로 수집되지 않으며, 대신 UUID가 기기 ID로 설정됩니다.
useUUIDAsDeviceId 기능은 Swift SDK가 기기 ID를 UUID로 설정하도록 구성합니다. 기존에는 iOS SDK가 Apple에서 생성한 IDFV 값과 동일한 기기 ID를 할당했습니다. 이 기능이 iOS 앱에서 기본적으로 활성화되면, SDK를 통해 생성된 모든 신규 사용자에게 UUID와 동일한 기기 ID가 할당됩니다.
IDFV를 별도로 수집하려면 set(identifierforvendor:)를 사용할 수 있습니다.

braze.deviceId를 읽으면 SDK가 초기화 후 작업을 완료할 때까지 호출 스레드가 차단됩니다. 메인 스레드 또는 지연 시간에 민감한 컨텍스트에서는 대신 비차단 대안을 사용하세요.
1
2
3
4
5
6
7
// Completion handler — always delivers on the main thread.
AppDelegate.braze?.getDeviceId { deviceId in
print("Device ID:", deviceId)
}
// Async/await (iOS 13.0+, tvOS 13.0+, watchOS 6.0+, macOS 10.15+)
let deviceId = await AppDelegate.braze?.getDeviceId()
1
2
3
4
// Completion handler — always delivers on the main thread.
[AppDelegate.braze getDeviceIdWithCompletion:^(NSString *deviceId) {
NSLog(@"Device ID: %@", deviceId);
}];
고려 사항
SDK 버전
Swift SDK v7.0.0+에서 useUUIDAsDeviceId가 활성화된 경우(기본값), 새로 생성된 모든 사용자에게 랜덤 기기 ID가 할당됩니다. 기존에 존재하던 모든 사용자는 동일한 기기 ID 값을 유지하며, 이 값은 IDFV였을 수 있습니다.
이 기능이 활성화되지 않은 경우, 기기는 생성 시 계속 IDFV가 할당됩니다.
다운스트림
기술 파트너: 이 기능이 활성화되면, Braze 기기 ID에서 IDFV 값을 파생하는 기술 파트너는 더 이상 이 데이터에 접근할 수 없습니다. 파트너 통합에 기기에서 파생된 IDFV 값이 필요한 경우, 이 기능을 false로 설정하는 것을 권장합니다.
Currents: useUUIDAsDeviceId를 true로 설정하면 Currents에서 전송되는 기기 ID가 더 이상 IDFV 값과 동일하지 않게 됩니다.
자주 묻는 질문
이 변경 사항이 Braze의 기존 사용자에게 영향을 미치나요?
아니요. 이 기능이 활성화되어도 Braze의 기존 사용자 데이터를 덮어쓰지 않습니다. 새로운 UUID 기기 ID는 새 기기에서만 생성되거나 wipedata()가 호출될 때만 생성됩니다.
이 기능을 켠 후 다시 끌 수 있나요?
네, 이 기능은 필요에 따라 자유롭게 켜고 끌 수 있습니다. 이전에 저장된 기기 ID는 절대 덮어쓰이지 않습니다.
Braze의 다른 곳에서 IDFV 값을 여전히 캡처할 수 있나요?
네, Swift SDK를 통해 IDFV를 선택적으로 수집할 수 있습니다(기본적으로 수집은 비활성화되어 있습니다).
필수 조건
이 기능을 사용하려면 먼저 React Native Braze SDK를 통합해야 합니다.
데이터 추적 비활성화하기
데이터 수집을 비활성화하려면 disableSDK 메서드를 사용합니다. 이 메서드를 호출하면 Braze SDK가 Braze 서버로 데이터를 전송하는 것을 중지합니다.
1
Braze.disableSDK();
데이터 추적 재개하기
데이터 수집을 비활성화한 후 다시 재개하려면 enableSDK 메서드를 사용하세요.
1
Braze.enableSDK();
로컬에 저장된 데이터 삭제하기
기기에 로컬로 저장된 모든 Braze SDK 데이터를 삭제하려면 wipeData 메서드를 사용하세요. 이 메서드를 호출하면 SDK가 비활성화되며, enableSDK를 사용하여 다시 활성화해야 합니다.
1
Braze.wipeData();
데이터 플러시
Braze 서버로 대기 중인 데이터를 즉시 플러시하려면 requestImmediateDataFlush를 사용하세요.
1
Braze.requestImmediateDataFlush();
광고 추적 활성화 설정
Braze에 이 기기에서 광고 추적이 활성화되어 있는지 알리려면 setAdTrackingEnabled 메서드를 사용하세요. SDK는 이 데이터를 자동으로 수집하지 않습니다.
1
Braze.setAdTrackingEnabled(true, "GOOGLE_ADVERTISING_ID");
두 번째 매개변수는 Google 광고 ID이며 Android에서만 사용됩니다.
추적 속성정보 허용 목록 업데이트하기 (iOS 전용)
추적으로 선언된 데이터 유형 목록을 업데이트하려면 updateTrackingPropertyAllowList를 사용하세요. 이 메서드는 Android에서는 아무 작업도 수행하지 않습니다.
1
2
3
4
5
6
7
8
Braze.updateTrackingPropertyAllowList({
adding: [Braze.TrackingProperty.EMAIL, Braze.TrackingProperty.FIRST_NAME],
removing: [],
addingCustomEvents: ["my_custom_event"],
removingCustomEvents: [],
addingCustomAttributes: ["my_custom_attribute"],
removingCustomAttributes: []
});
자세한 내용은 개인정보 보호 매니페스트를 참조하세요.
로그아웃 및 푸시 등록 해제
이 기능은 아직 React Native SDK에서 지원되지 않습니다.
필수 조건
이 기능을 사용하려면 먼저 Roku SDK를 통합해야 합니다.
이전에 저장된 데이터 삭제
Roku SDK에는 wipeData 메서드가 포함되어 있지 않습니다. 다른 Braze SDK의 wipeData()와 기능적으로 동일한 초기화 상태를 만들려면, 네 개의 Braze 레지스트리 섹션을 지운 다음 SDK를 다시 초기화하세요.
Braze Roku SDK는 다음 레지스트리 섹션에 데이터를 유지합니다:
| 섹션 | 내용 |
|---|---|
braze.section.device_id |
Braze에서 이 기기를 식별하는 데 사용되는 기기 UUID입니다. |
braze.section.user_id |
설정된 경우 외부 사용자 ID입니다. |
braze.section.session |
활성 세션 UUID, 시작 시간 및 종료 시간입니다. |
braze.section.config |
캐시된 SDK 구성 및 기능 플래그 데이터입니다. |
1단계: 레지스트리 섹션 지우기
roRegistry.Delete()를 사용하여 각 Braze 섹션을 삭제한 다음, Flush()를 호출하여 변경 사항을 유지합니다:
1
2
3
4
5
6
7
8
sub WipeBrazeData()
registry = CreateObject("roRegistry")
registry.Delete("braze.section.device_id")
registry.Delete("braze.section.user_id")
registry.Delete("braze.section.session")
registry.Delete("braze.section.config")
registry.Flush()
end sub
2단계: Braze SDK 다시 초기화하기
Braze SDK를 초기화하면, SDK는 누락된 레지스트리 데이터를 정상적으로 처리합니다:
- 기기 ID 섹션이 비어 있으므로 SDK가 새 UUID를 생성하고 기기를 익명으로 처리합니다.
- 사용자 ID 섹션이 비어 있으므로 SDK가 익명 사용자(빈 문자열
"")를 기본값으로 사용합니다. - 세션 섹션이 비어 있으므로 SDK가 새 세션을 시작합니다.
- 구성 섹션이 비어 있으므로 SDK가 서버에서 구성을 다시 가져옵니다.

Roku SDK는 레지스트리를 지울 때 서버 측 삭제 요청을 생성하지 않습니다. Braze에서 사용자를 제거해야 하는 경우, 사용자의 external_id 또는 braze_id를 사용하여 /users/delete로 요청을 보내세요.
로그아웃 및 푸시 등록 해제
이 기능은 아직 Roku SDK에서 지원되지 않습니다.