Skip to content

푸시 알림

푸시 알림을 사용하면 중요한 이벤트가 발생할 때 앱에서 알림을 보낼 수 있습니다. 전달할 새 인스턴트 메시지, 송출할 뉴스 속보 알림 또는 오프라인으로 시청할 수 있도록 다운로드할 준비가 된 사용자가 좋아하는 TV 프로그램의 최신 에피소드가 있을 때 푸시 알림을 전송할 수 있습니다. 또한 애플리케이션이 필요할 때만 실행되므로 백그라운드 가져오기보다 더 효율적입니다.

필수 조건

이 기능을 사용하려면 먼저 Web Braze SDK를 통합해야 합니다.

푸시 프로토콜

웹 푸시 알림은 대부분의 주요 브라우저에서 지원하는 W3C 푸시 표준을 사용하여 구현됩니다. 특정 푸시 프로토콜 표준 및 브라우저 지원에 대한 자세한 내용은 Apple MozillaMicrosoft의 리소스를 참조하세요.

푸시 알림 설정하기

1단계: 서비스 종사자 구성하기

프로젝트의 service-worker.js 파일에 다음 스니펫을 추가하고 초기화 옵션을 manageServiceWorkerExternally 초기화 옵션을 true 로 설정합니다.

2단계: 브라우저 등록

브라우저에서 푸시 알림을 받을 수 있도록 사용자에게 푸시 권한을 즉시 요청하려면 braze.requestPushPermission() 으로 전화하세요. 먼저 브라우저에서 푸시가 지원되는지 테스트하려면 braze.isPushSupported() 으로 문의하세요.

푸시 권한을 요청하기 전에 사용자에게 소프트 푸시 프롬프트를 보내 푸시 관련 UI를 직접 표시할 수도 있습니다.

3단계: skipWaiting 사용 안 함(선택 사항)

Braze 서비스 종사자 파일은 설치 시 자동으로 skipWaiting 으로 호출됩니다. 이 기능을 비활성화하려면 Braze를 가져온 후 서비스 종사자 파일에 다음 코드를 추가하세요:

사용자 탈퇴하기

사용자를 탈퇴하려면 braze.unregisterPush() 으로 문의하세요.

대체 도메인

웹 푸시를 통합하려면 도메인이 보안되어야 합니다. 일반적으로 https, localhostW3C 푸시 표준에 정의된 기타 예외를 의미합니다. 또한 도메인 루트에 서비스 종사자를 등록할 수 있거나 최소한 해당 파일의 HTTP 헤더를 제어할 수 있어야 합니다. 이 문서에서는 대체 도메인에서 Braze 웹 푸시를 통합하는 방법을 다룹니다.

사용 사례

W3C 푸시 표준에 설명된 모든 기준을 충족할 수 없는 경우 이 방법을 사용하여 대신 웹사이트에 푸시 프롬프트 대화 상자를 추가할 수 있습니다. 이는 사용자가 http 웹사이트나 브라우저 확장 프로그램 팝업에서 옵트인하도록 하여 푸시 안내 메시지가 표시되지 않도록 하려는 경우에 유용할 수 있습니다.

고려 사항

웹 브라우저는 다른 많은 해결 방법과 마찬가지로 계속 발전하고 있으며, 이 방법은 향후에는 실행되지 않을 수도 있습니다. 계속하기 전에 다음 사항을 확인하세요:

  • 별도의 보안 도메인(https://)을 소유하고 있으며 해당 도메인에 서비스 종사자를 등록할 수 있는 권한이 있습니다.
  • 사용자가 웹사이트에 로그인하면 푸시 토큰이 올바른 프로필과 일치하는지 확인합니다.

대체 푸시 도메인 설정하기

다음 예제를 명확히 살펴보기 위해 방문자가 http://insecure.com 에서 푸시를 등록하는 것을 목표로 http://insecure.comhttps://secure.com을 두 개의 도메인으로 사용합니다. 이 예제는 브라우저 확장의 팝업 페이지에 대한 chrome-extension:// 스키마에도 적용할 수 있습니다.

1단계: 프롬프트 흐름 시작

insecure.com 에서 URL 매개변수를 사용하여 보안 도메인의 새 창을 열어 현재 로그인한 사용자의 Braze 외부 ID를 전달합니다.

http://insecure.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<button id="opt-in">Opt-In For Push</button>
<script>
// the same ID you would use with `braze.changeUser`:
const user_id = getUserIdSomehow();
// pass the user ID into the secure domain URL:
const secure_url = `https://secure.com/push-registration.html?external_id=${user_id}`;

// when the user takes some action, open the secure URL in a new window
document.getElementById("opt-in").onclick = function(){
    if (!window.open(secure_url, 'Opt-In to Push', 'height=500,width=600,left=150,top=150')) {
        window.alert('The popup was blocked by your browser');
    } else {
        // user is shown a popup window
        // and you can now prompt for push in this window
    }
}
</script>

2단계: 푸시 등록하기

이때 secure.com에서 동일한 사용자 ID에 대해 Braze 웹 SDK를 초기화하고 웹 푸시에 대한 사용자의 권한을 요청할 수 있는 팝업 창이 열립니다.

https://secure.com/push-registration.html

3단계: 도메인 간 통신(선택 사항)

사용자가 insecure.com에서 시작된 이 워크플로우에서 옵트인할 수 있으므로 사용자가 이미 옵트인했는지 여부에 따라 사이트를 수정할 수 있습니다. 이미 푸시 등록을 한 사용자에게 푸시 등록을 요청하는 것은 의미가 없습니다.

아이프레임과 postMessage API를 사용하여 두 도메인 간에 통신할 수 있습니다.

insecure.com

insecure.com 도메인에서 보안 도메인(푸시가 실제로 등록된 곳)에 현재 사용자의 푸시 등록에 대한 정보를 요청합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Create an iframe to the secure domain and run getPushStatus onload-->
<iframe id="push-status" src="https://secure.com/push-status.html" onload="getPushStatus()" style="display:none;"></iframe>

<script>
function getPushStatus(event){
    // send a message to the iframe asking for push status
    event.target.contentWindow.postMessage({type: 'get_push_status'}, 'https://secure.com');
    // listen for a response from the iframe's domain
    window.addEventListener("message", (event) => {
        if (event.origin === "http://insecure.com" && event.data.type === 'set_push_status') {
            // update the page based on the push permission we're told
            window.alert(`Is user registered for push? ${event.data.isPushPermissionGranted}`);
        }
    }   
}
</script>

secure.com/push-status.html

자주 묻는 질문(FAQ)

서비스 작업자

루트 디렉터리에 서비스 워커를 등록할 수 없으면 어떻게 하나요?

기본적으로 서비스 종사자는 등록된 동일한 디렉토리 내에서만 사용할 수 있습니다. 예를 들어 서비스 종사자 파일이 /assets/service-worker.js에 있는 경우 example.com/assets/* 또는 assets 폴더의 하위 디렉토리에만 등록할 수 있으며 홈 페이지(example.com/)에는 등록할 수 없습니다. 따라서 서비스 종사자를 루트 디렉토리(예: https://example.com/service-worker.js)에 호스팅하고 등록하는 것이 좋습니다.

루트 도메인에 서비스 종사자를 등록할 수 없는 경우 다른 방법은 서비스 종사자 파일을 제공할 때 Service-Worker-Allowed HTTP 헤더를 사용하는 것입니다. 서비스 워커에 대한 응답으로 Service-Worker-Allowed: / 을 반환하도록 서버를 구성하면 브라우저가 범위를 넓혀 다른 디렉토리 내에서 사용할 수 있도록 지시합니다.

Tag Manager를 사용하여 서비스 종사자를 생성할 수 있나요?

아니요, 서비스 워커는 웹사이트의 서버에서 호스팅되어야 하며 태그 관리자를 통해 로드할 수 없습니다.

사이트 보안

HTTPS가 필수인가요?

예. 웹 표준에서는 푸시 알림 권한을 요청하는 도메인의 보안을 요구합니다.

언제 사이트가 “안전한” 것으로 간주되나요?

사이트가 다음 보안 출처 패턴 중 하나와 일치하면 안전한 것으로 간주됩니다. Braze 웹 푸시 알림은 이러한 개방형 표준을 기반으로 구축되었으므로 중간자 공격을 방지할 수 있습니다.

  • (https, , *)
  • (wss, *, *)
  • (, localhost, )
  • (, .localhost, *)
  • (, 127/8, )
  • (, ::1/128, *)
  • (file, *, —)
  • (chrome-extension, *, —)

보안 사이트를 사용할 수 없는 경우 어떻게 하나요?

업계 모범 사례는 전체 사이트를 보안하는 것이지만, 사이트 도메인을 보안할 수 없는 고객은 보안 Modal을 사용하여 요구 사항을 해결할 수 있습니다. 대체 푸시 도메인 사용 관련 가이드 또는 작업 데모를 참조하세요.

필수 조건

이 기능을 사용하려면 먼저 Android Braze SDK를 통합해야 합니다.

기본 제공 기능

Braze 소프트웨어 개발 키트에는 다음 기능이 구축되어 있습니다. 다른 푸시 알림 기능을 사용하려면 앱에 푸시 알림을 설정해야 합니다.

푸시 알림 수명 주기 정보

다음 순서도는 권한 프롬프트, 토큰 생성 및 메시지 전달과 같은 푸시 알림 수명 주기를 Braze가 처리하는 방법을 보여줍니다.

---
config:
  theme: neutral
---
flowchart TD

%% Permission flow
subgraph Permission[Push Permissions]
    B{Android version of the device?}
    B -->|Android 13+| C["requestPushPermissionPrompt() called"]
    B -->|Android 12 and earlier| D[No permissions required]
    
    %% Connect Android 12 path to Braze state
    D --> H3[Braze: user subscription state]
    H3 --> J3[Defaults to 'subscribed' when user profile created]
    
    C --> E{Did the user grant push permission?}
    E -->|Yes| F[POST_NOTIFICATIONS permission granted]
    E -->|No| G[POST_NOTIFICATIONS permission denied]
    
    %% Braze subscription state updates
    F --> H1[Braze: user subscription state]
    G --> H2[Braze: user subscription state]
    
    H1 --> I1{Automatically opt in after permission granted?}
    I1 -->|true| J1[Set to 'opted-in']
    I1 -->|false| J2[Remains 'subscribed']
    
    H2 --> K1[Remains 'subscribed'<br/>or 'unsubscribed']
    
    %% Subscription state legend
    subgraph BrazeStates[Braze subscription states]
        L1['Subscribed' - default state<br/>when user profile created]
        L2['Opted-in' - user explicitly<br/>wants push notifications]
        L3['Unsubscribed' - user explicitly<br/>opted out of push]
    end
    
    %% Note about user-level states
    note1[Note: These states are user-level<br/>and apply across all devices for the user]
    
    %% Connect states to legend
    J1 -.-> L2
    J2 -.-> L1
    J3 -.-> L1
    K1 -.-> L3
    note1 -.-> BrazeStates
end

%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px

class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass
---
config:
  theme: neutral
---
flowchart TD

%% Token generation flow
subgraph Token[Token Generation]
    H["Braze SDK initialized"] --> Q{Is FCM auto-registration enabled?}
    Q -->|Yes| L{Is required configuration present?}
    Q -->|No| M[No FCM token generated]
    L -->|Yes| I[Generate FCM token]
    L -->|No| M
    I --> K[Register token with Braze]

    %% Configuration requirements
    subgraph Config[Required configuration]
        N['google-services.json' file is present]
        O['com.google.firebase:firebase-messaging' in gradle]
        P['com.google.gms.google-services' plugin in gradle]
    end

    %% Connect config to check
    N -.-> L
    O -.-> L
    P -.-> L
end

%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px

class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass
---
config:
  theme: neutral
  fontSize: 10
---
flowchart TD

subgraph Display[Push Display]
    %% Push delivery flow
    W[Push sent to FCM servers] --> X{Did FCM receive push?}
    X -->|App is terminated| Y[FCM cannot deliver push to the app]
    X -->|Delivery conditions met| X1[App receives push from FCM]
    X1 --> X2[Braze SDK receives push]
    X2 --> R[Push type?]

    %% Push Display Flow
    R -->|Standard push| S{Is push permission required?}
    R -->|Silent push| T[Braze SDK processes silent push]
    S -->|Yes| S1{Did the user grant push permission?}
    S -->|No| V[Notification is shown to the user]
    S1 -->|Yes| V
    S1 -->|No| U[Notification is not shown to the user]
end

%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px

class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass

푸시 알림 설정하기

Rate limits

Firebase 클라우드 메시징(FCM) API의 기본 사용량 제한은 분당 600,000건의 요청입니다. 이 제한에 도달하면 Braze는 몇 분 후에 자동으로 다시 시도합니다. 증액을 요청하려면 Firebase 지원팀에 문의하세요.

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

먼저, Android 프로젝트에 Firebase를 추가합니다. 단계별 지침은 Google의 Firebase 설정 가이드를 참조하세요.

2단계: 종속성에 클라우드 메시징 추가

다음으로 프로젝트 종속성에 클라우드 메시징 라이브러리를 추가합니다. Android 프로젝트에서 build.gradle 을 열고 dependencies 블록에 다음 줄을 추가합니다.

1
implementation "google.firebase:firebase-messaging:+"

종속성은 다음과 비슷합니다.

1
2
3
4
dependencies {
  implementation project(':android-sdk-ui')
  implementation "com.google.firebase:firebase-messaging:+"
}

3단계: Firebase 클라우드 메시징 API 활성화

Google Cloud에서 Android 앱이 사용 중인 프로젝트를 선택한 다음, Firebase 클라우드 메시징 API를 활성화합니다.

인에이블된 Firebase 클라우드 메시징 API

4단계: 서비스 계정 만들기

다음으로 Braze가 FCM 토큰을 등록할 때 승인된 API 호출을 할 수 있도록 새 서비스 계정을 생성합니다. Google Cloud에서 서비스 계정으로 이동한 다음 프로젝트를 선택합니다. 서비스 계정 페이지에서 서비스 계정 생성을 선택합니다.

"서비스 계정 만들기"가 강조 표시된 프로젝트의 서비스 계정 홈 페이지.

서비스 계정 이름, ID, 설명을 입력한 다음, 생성 후 계속을 선택합니다.

"서비스 계정 세부 정보" 양식입니다.

역할 필드에서 역할 목록에서 Firebase Cloud Messaging API 관리자를 찾아 선택합니다. 보다 제한적인 액세스를 원하면 cloudmessaging.messages.create 권한으로 커스텀 역할을 생성한 다음, 목록에서 해당 역할을 선택합니다. 완료했으면 완료를 선택합니다.

"이 서비스 계정에 프로젝트에 대한 액세스 권한 부여" 양식에 "Firebase Cloud 메시징 API 관리자"가 역할로 선택되어 있습니다.

5단계: JSON 자격 증명 생성하기

다음으로 FCM 서비스 계정에 대한 JSON 자격 증명을 생성합니다. Google Cloud IAM & 관리자에서 서비스 계정으로 이동한 다음 프로젝트를 선택합니다. 이전에 만든 FCM 서비스 계정을 찾은 다음, 작업 > 키 관리를 선택합니다.

프로젝트의 서비스 계정 홈페이지에서 '작업' 메뉴가 열려 있습니다.

키 추가 > 새 키 생성을 선택합니다.

"키 추가" 메뉴가 열려 있는 선택한 서비스 계정이 열립니다.

JSON을 선택한 다음, 생성을 선택합니다. FCM 프로젝트 ID 이외의 Google Cloud 프로젝트 ID를 사용하여 서비스 계정을 생성한 경우, JSON 파일에서 project_id에 할당된 값을 수동으로 업데이트해야 합니다.

키를 다운로드한 위치를 기억해야 합니다. 다음 단계에 필요합니다.

'JSON'을 선택한 상태에서 비공개 키를 만드는 양식입니다.

6단계: Braze에 JSON 자격 증명 업로드하기

다음으로, Braze 대시보드에 JSON 자격 증명을 업로드합니다. Braze에서  설정 > 앱 설정을 선택합니다.

"설정" 메뉴가 "앱 설정"이 강조 표시된 상태로 Braze에서 열립니다.

Android 앱의 푸시 알림 설정에서 Firebase를 선택한 다음, JSON 파일 업로드를 선택하고 앞서 생성한 자격 증명을 업로드합니다. When you’re finished, select Save.

푸시 제공업체로 "Firebase"를 선택한 '푸시 알림 설정' 양식입니다.

7단계: 자동 토큰 등록 설정

사용자 중 한 명이 푸시 알림을 옵트인하면 앱에서 해당 사용자의 기기에서 FCM 토큰을 생성해야 푸시 알림을 보낼 수 있습니다. Braze SDK를 사용하면 프로젝트의 Braze 구성 파일에서 각 사용자의 기기에 대한 FCM 토큰 자동 등록을 활성화할 수 있습니다.

먼저 Firebase 콘솔로 이동하여 프로젝트를 연 다음, 설정 > 프로젝트 설정을 선택합니다.

"설정" 메뉴가 열려 있는 Firebase 프로젝트입니다.

클라우드 메시징을 선택하고 Firebase 클라우드 메시징 API(V1)에서 발신자 ID 필드의 숫자를 복사합니다.

"발신자 ID"가 강조 표시된 Firebase 프로젝트의 "클라우드 메시징" 페이지.

그런 다음, Android Studio 프로젝트를 열고 Firebase 발신자 ID를 사용하여 braze.xml 또는 BrazeConfig에서 FCM 토큰 자동 등록을 활성화합니다.

FCM 토큰 자동 등록을 구성하려면 braze.xml 파일에 다음 줄을 추가합니다:

1
2
<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>

FIREBASE_SENDER_ID를 Firebase 프로젝트 설정에서 복사한 값으로 바꿉니다. braze.xml은 다음과 비슷합니다.

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string translatable="false" name="com_braze_api_key">12345ABC-6789-DEFG-0123-HIJK456789LM</string>
  <bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">603679405392</string>
</resources>

FCM 토큰 자동 등록을 구성하려면 BrazeConfig 에 다음 줄을 추가합니다:

1
2
.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("FIREBASE_SENDER_ID")
1
2
.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("FIREBASE_SENDER_ID")

FIREBASE_SENDER_ID를 Firebase 프로젝트 설정에서 복사한 값으로 바꿉니다. BrazeConfig은 다음과 비슷합니다.

1
2
3
4
5
6
7
8
9
10
BrazeConfig brazeConfig = new BrazeConfig.Builder()
  .setApiKey("12345ABC-6789-DEFG-0123-HIJK456789LM")
  .setCustomEndpoint("sdk.iad-01.braze.com")
  .setSessionTimeout(60)
  .setHandlePushDeepLinksAutomatically(true)
  .setGreatNetworkDataFlushInterval(10)
  .setIsFirebaseCloudMessagingRegistrationEnabled(true)
  .setFirebaseCloudMessagingSenderIdKey("603679405392")
  .build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
6
7
8
9
10
val brazeConfig = BrazeConfig.Builder()
  .setApiKey("12345ABC-6789-DEFG-0123-HIJK456789LM")
  .setCustomEndpoint("sdk.iad-01.braze.com")
  .setSessionTimeout(60)
  .setHandlePushDeepLinksAutomatically(true)
  .setGreatNetworkDataFlushInterval(10)
  .setIsFirebaseCloudMessagingRegistrationEnabled(true)
  .setFirebaseCloudMessagingSenderIdKey("603679405392")
  .build()
Braze.configure(this, brazeConfig)

8단계: 애플리케이션 클래스에서 자동 요청 제거

무음 푸시 알림을 보낼 때마다 Braze가 불필요한 네트워크 요청을 트리거하지 않도록 하려면 Application 클래스의 onCreate() 메서드에 구성된 모든 자동 네트워크 요청을 제거합니다. 자세한 내용은 Android 개발자 참조를 참조하십시오: 애플리케이션.

알림 표시

1단계: Braze Firebase 메시징 서비스 등록

새 서비스, 기존 서비스 또는 Braze 이외의 메시징 서비스를 만들 수 있습니다. 특정 요구 사항에 가장 적합한 것을 선택하세요.

Braze에는 푸시 수신 및 공개 의도를 처리하는 서비스가 포함되어 있습니다. BrazeFirebaseMessagingService 클래스는 AndroidManifest.xml에 등록되어야 합니다.

1
2
3
4
5
6
<service android:name="com.braze.push.BrazeFirebaseMessagingService"
  android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT" />
  </intent-filter>
</service>

또한 알림 코드는 BrazeFirebaseMessagingService 를 사용하여 열기 및 클릭 동작 추적을 처리합니다. 이 서비스가 제대로 작동하려면 AndroidManifest.xml 에 등록해야 합니다. 또한 Braze는 시스템에서 보낸 알림만 렌더링하도록 시스템의 알림에 고유한 키를 접두사로 추가합니다. 추가 서비스를 별도로 등록하여 다른 FCM 서비스에서 전송되는 알림을 표시할 수 있습니다. 참조 AndroidManifest.xml 를 참조하세요.

이미 Firebase 메시징 서비스가 등록되어 있는 경우, 다음을 통해 RemoteMessage 객체를 Braze에 전달할 수 있습니다. BrazeFirebaseMessagingService.handleBrazeRemoteMessage(). 이 메서드는 객체가 RemoteMessage 객체가 Braze에서 발생한 경우에만 알림을 표시하고 그렇지 않은 경우 안전하게 무시합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyFirebaseMessagingService extends FirebaseMessagingService {
  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
      // This Remote Message originated from Braze and a push notification was displayed.
      // No further action is needed.
    } else {
      // This Remote Message did not originate from Braze.
      // No action was taken and you can safely pass this Remote Message to other handlers.
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
class MyFirebaseMessagingService : FirebaseMessagingService() {
  override fun onMessageReceived(remoteMessage: RemoteMessage?) {
    super.onMessageReceived(remoteMessage)
    if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
      // This Remote Message originated from Braze and a push notification was displayed.
      // No further action is needed.
    } else {
      // This Remote Message did not originate from Braze.
      // No action was taken and you can safely pass this Remote Message to other handlers.
    }
  }
}

또한 사용하려는 다른 Firebase 메시징 서비스가 있는 경우, 애플리케이션이 Braze가 아닌 푸시를 수신할 경우 호출할 대체 Firebase 메시징 서비스를 지정할 수 있습니다.

braze.xml에서 다음을 지정합니다.

1
2
<bool name="com_braze_fallback_firebase_cloud_messaging_service_enabled">true</bool>
<string name="com_braze_fallback_firebase_cloud_messaging_service_classpath">com.company.OurFirebaseMessagingService</string>

또는 런타임 구성을 통해 설정합니다.

1
2
3
4
5
BrazeConfig brazeConfig = new BrazeConfig.Builder()
        .setFallbackFirebaseMessagingServiceEnabled(true)
        .setFallbackFirebaseMessagingServiceClasspath("com.company.OurFirebaseMessagingService")
        .build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
val brazeConfig = BrazeConfig.Builder()
        .setFallbackFirebaseMessagingServiceEnabled(true)
        .setFallbackFirebaseMessagingServiceClasspath("com.company.OurFirebaseMessagingService")
        .build()
Braze.configure(this, brazeConfig)

2단계: 작은 아이콘을 디자인 가이드라인에 따르기

Android 알림 아이콘에 대한 일반적인 정보는 알림 개요를 참조하세요.

Android N부터는 색상이 포함된 작은 알림 아이콘 에셋을 업데이트하거나 제거해야 합니다. Android 시스템(Braze SDK가 아님)은 작업 아이콘과 작은 알림 아이콘에서 알파 및 투명도가 아닌 모든 채널을 무시합니다. 즉, Android는 투명한 영역을 제외한 작은 알림 아이콘의 모든 부분을 흑백으로 변환합니다.

제대로 표시되는 알림 작은 아이콘 자산을 만들려면 다음과 같이 하세요:

  • 이미지에서 흰색을 제외한 모든 색상을 제거합니다.
  • 자산의 흰색이 아닌 다른 모든 영역은 투명해야 합니다.

다음에 표시된 큰 아이콘 및 작은 아이콘은 적절하게 디자인된 아이콘 예제입니다.

"Hey I'm on my way to the bar..."라는 메시지 옆의 큰 아이콘 하단 모서리에 작은 아이콘이 나타납니다.

3단계: 알림 아이콘 구성

braze.xml에서 아이콘 지정

Braze를 사용하면 braze.xml 에서 그리기 가능한 리소스를 지정하여 알림 아이콘을 구성할 수 있습니다:

1
2
<drawable name="com_braze_push_small_notification_icon">REPLACE_WITH_YOUR_ICON</drawable>
<drawable name="com_braze_push_large_notification_icon">REPLACE_WITH_YOUR_ICON</drawable>

작은 알림 아이콘을 설정해야 합니다. 설정하지 않으면 Braze는 기본적으로 애플리케이션 아이콘을 작은 알림 아이콘으로 사용하게 되며, 이는 최선이 아닌 것처럼 보일 수 있습니다.

큰 알림 아이콘을 설정하는 것은 선택 사항이지만 권장됩니다.

아이콘 강조 색상 지정

알림 아이콘 강조 색상은 braze.xml 에서 재정의할 수 있습니다. 색상을 지정하지 않으면 기본 색상은 Lollipop이 시스템 알림에 사용하는 것과 동일한 회색입니다.

1
<integer name="com_braze_default_notification_accent_color">0xFFf33e3e</integer>

선택적으로 색상 참조를 사용할 수도 있습니다:

1
<color name="com_braze_default_notification_accent_color">@color/my_color_here</color>

4단계: 딥링크 추가

자동 딥링크 열기 활성화

푸시 알림을 클릭할 때 Braze가 앱과 딥링크를 자동으로 열도록 설정하려면 braze.xml에서 com_braze_handle_push_deep_links_automaticallytrue로 설정합니다.

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

이 플래그는 런타임 구성을 통해서도 설정할 수 있습니다:

1
2
3
4
BrazeConfig brazeConfig = new BrazeConfig.Builder()
        .setHandlePushDeepLinksAutomatically(true)
        .build();
Braze.configure(this, brazeConfig);
1
2
3
4
val brazeConfig = BrazeConfig.Builder()
        .setHandlePushDeepLinksAutomatically(true)
        .build()
Braze.configure(this, brazeConfig)

딥링크의 커스텀 처리를 설정하려면 Braze에서 푸시를 수신하고 여는 의도를 수신 대기하는 푸시 콜백을 만들어야 합니다. 자세한 내용은 푸시 이벤트에 콜백 사용하기를 참조하세요.

사용자 지정 딥링크 만들기

앱에 딥링킹을 아직 추가하지 않은 경우 Android 개발자 설명서에 있는 딥링킹에 대한 지침을 따르세요. 딥링크 개념에 대한 자세한 내용은 FAQ 문서를 참조하세요.

딥링크 추가하기

Braze 대시보드는 푸시 알림 캠페인과 캔버스에서 알림을 클릭할 때 열 딥링크 또는 웹 URL 설정을 지원합니다.

드롭다운에서 '애플리케이션에 딥링크'를 선택한 상태에서 Braze 대시보드의 '클릭 시 동작' 설정을 선택합니다.

백 스택 동작 사용자 지정

기본적으로 Android SDK는 푸시 딥링크를 따라갈 때 호스트 앱의 기본 런처 활동을 백 스택에 배치합니다. Braze를 사용하면 기본 런처 활동 대신 백 스택에서 열리도록 커스텀 활동을 설정하거나 백 스택을 완전히 비활성화할 수 있습니다.

예를 들어 런타임 구성을 사용하여 YourMainActivity 이라는 활동을 백스택 활동으로 설정합니다:

1
2
3
4
5
BrazeConfig brazeConfig = new BrazeConfig.Builder()
        .setPushDeepLinkBackStackActivityEnabled(true)
        .setPushDeepLinkBackStackActivityClass(YourMainActivity.class)
        .build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
val brazeConfig = BrazeConfig.Builder()
        .setPushDeepLinkBackStackActivityEnabled(true)
        .setPushDeepLinkBackStackActivityClass(YourMainActivity.class)
        .build()
Braze.configure(this, brazeConfig)

braze.xml에 해당하는 구성을 참조하세요. 클래스 이름은 Class.forName()에서 반환한 것과 동일해야 합니다.

1
2
<bool name="com_braze_push_deep_link_back_stack_activity_enabled">true</bool>
<string name="com_braze_push_deep_link_back_stack_activity_class_name">your.package.name.YourMainActivity</string>

5단계: 알림 채널 정의

Braze 안드로이드 SDK는 안드로이드 알림 채널을 지원합니다. Braze 알림에 알림 채널의 ID가 포함되어 있지 않거나 Braze 알림에 유효하지 않은 채널 ID가 포함되어 있는 경우, Braze는 SDK에 정의된 기본 알림 채널로 알림을 표시합니다. Braze 사용자는 플랫폼 내에서 Android 알림 채널을 사용하여 알림을 그룹화할 수 있습니다.

기본 Braze 알림 채널의 사용자 대면 이름을 설정하려면 BrazeConfig.setDefaultNotificationChannelName().

기본 Braze 알림 채널의 사용자 대면 설명을 설정하려면 BrazeConfig.setDefaultNotificationChannelDescription().

notification_channel 필드를 포함하도록 Android 푸시 개체 매개변수를 사용하여 모든 API 캠페인을 업데이트합니다. 이 필드를 지정하지 않으면 Braze는 대시보드 폴백 채널 ID와 함께 알림 페이로드를 전송합니다.

기본 알림 채널 외에는 Braze에서 어떠한 채널도 생성하지 않습니다. 다른 모든 채널은 호스트 앱에서 프로그래밍 방식으로 정의한 다음, Braze 대시보드에 입력해야 합니다.

기본 채널 이름과 설명은 braze.xml 에서도 구성할 수 있습니다.

1
2
<string name="com_braze_default_notification_channel_name">Your channel name</string>
<string name="com_braze_default_notification_channel_description">Your channel description</string>

6단계: 테스트 알림 표시 및 분석

디스플레이 테스트

이 시점에서 Braze에서 보낸 알림을 볼 수 있을 것입니다. 이를 테스트하려면 Braze 대시보드의 캠페인 페이지로 이동하여 푸시 알림 캠페인을 생성하세요. Android 푸시를 선택하고 메시지를 디자인합니다. 그런 다음, 작성기에서 눈 아이콘을 클릭하여 테스트 발신자를 가져옵니다. 현재 사용자의 사용자 ID 또는 이메일 주소를 입력하고 테스트 보내기를 클릭합니다. 기기에 푸시가 표시됩니다.

Braze 대시보드에서 푸시 알림 캠페인의 '테스트' 탭을 클릭합니다.

푸시 표시와 관련된 문제는 문제 해결 가이드를 참조하세요.

분석 테스트

이 시점에서 푸시 알림 열기에 대한 분석 로깅도 있어야 합니다. 알림이 도착했을 때 클릭하면 캠페인 결과 페이지의 직접 열기 수가 1씩 증가합니다. 푸시 분석에 대한 자세한 내용은 푸시 보고 문서를 참조하세요.

푸시 애널리틱스와 관련된 문제는 문제 해결 가이드를 참조하세요.

명령줄에서 테스트

명령줄 인터페이스를 통해 인앱 및 푸시 알림을 테스트하려면 터미널을 통해 cURL 및 메시징 API를 통해 단일 알림을 보낼 수 있습니다. 다음 필드를 테스트 케이스에 맞는 올바른 값으로 바꿔야 합니다:

  • YOUR_API_KEY ( 설정 > API 키로 이동합니다.)
  • YOUR_EXTERNAL_USER_ID ( 사용자 검색 페이지에서 프로필을 검색합니다.)
  • YOUR_KEY1 (선택 사항)
  • YOUR_VALUE1 (선택 사항)
1
2
3
4
5
6
7
8
9
10
11
12
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer {YOUR_API_KEY}" -d '{
  "external_user_ids":["YOUR_EXTERNAL_USER_ID"],
  "messages": {
    "android_push": {
      "title":"Test push title",
      "alert":"Test push",
      "extra": {
        "YOUR_KEY1":"YOUR_VALUE1"
      }
    }  
  }
}' https://rest.iad-01.braze.com/messages/send

이 예에서는 US-01 인스턴스를 사용합니다. 이 인스턴스를 사용하지 않는 경우 US-01 엔드포인트를 사용자 엔드포인트로 바꾸세요.

대화 푸시 알림

사람과 대화 이니셔티브는 휴대폰의 시스템 표면에서 사람과 대화의 개선을 목표로 하는 다년간의 Android 이니셔티브입니다. 이 우선순위는 모든 인구 통계학적 특성에 걸쳐 대부분의 Android 사용자에게 있어 다른 사람들과의 의사소통 및 상호작용이 여전히 가장 가치 있고 중요한 기능 영역이라는 사실에 기반합니다.

사용 요구 사항

  • 이 알림 유형에는 Braze Android SDK v15.0.0 이상 및 Android 11 이상 기기가 필요합니다.
  • 지원되지 않는 기기 또는 SDK에서는 표준 푸시 알림으로 대체됩니다.

이 기능은 Braze REST API를 통해서만 사용할 수 있습니다. 자세한 내용은 Android 푸시 개체를 참조하세요.

FCM 할당량 초과 오류

FCM(Firebase 클라우드 메시징) 한도를 초과하면 Google에서 “할당량 초과” 오류를 반환합니다. FCM의 기본값은 분당 600,000건의 요청입니다. Braze는 Google의 권장 모범 사례에 따라 전송을 다시 시도합니다. 그러나 이러한 오류가 대량으로 발생하면 전송 시간이 몇 분씩 길어질 수 있습니다. 잠재적인 영향을 완화하기 위해 Braze는 요금 한도가 초과되고 있다는 알림과 오류를 방지하기 위해 취할 수 있는 조치를 보내드립니다.

현재 한도를 확인하려면 Google Cloud 콘솔 > APIs & 서비스 > Firebase Cloud 메시징 API > 할당량 & 시스템 제한으로 이동하거나 FCM API 할당량 페이지를 방문하세요.

Best practices

이러한 오류 볼륨을 낮게 유지하려면 다음 모범 사례를 권장합니다.

FCM에 요금 한도 인상 요청하기

FCM에 요금 한도 인상을 요청하려면 Firebase 지원팀에 직접 문의하거나 다음과 같이 하세요:

  1. FCM API 쿼터 페이지로 이동합니다.
  2. 분당 요청 보내기 할당량을 찾습니다.
  3. 할당량 편집을 선택합니다.
  4. 새 값을 입력하고 요청을 제출합니다.

Braze를 통해 글로벌 요금 제한 요청하기

Android 푸시 알림에 대해 워크스페이스 전체에 제한을 적용하려면 Braze 지원팀에 문의하세요.

Rate limits

푸시 알림은 전송 횟수에 제한이 있으므로 애플리케이션에 필요한 만큼 많이 보내는 것을 두려워하지 마세요. iOS 및 Apple 푸시 알림 서비스(APN) 서버가 알림 전송 빈도를 제어하므로 너무 많이 보내도 문제가 발생하지 않습니다. 푸시 알림이 제한되는 경우, 기기가 다음 번에 연결 유지 패킷을 보내거나 다른 알림을 받을 때까지 지연될 수 있습니다.

푸시 알림 설정하기

1단계: APN 토큰 업로드

Braze를 사용하여 iOS 푸시 알림을 보내려면 먼저 Apple의 개발자 설명서에 설명된 대로 .p8 푸시 알림 파일을 업로드해야 합니다:

  1. Apple 개발자 계정에서 다음 위치로 이동합니다. 인증서, 식별자 & 프로필.
  2. 에서 모두를 선택하고 오른쪽 상단에 있는 추가 버튼(+)을 클릭합니다.
  3. 키 설명에 서명 키의 고유한 이름을 입력합니다.
  4. 주요 서비스에서 Apple 푸시 알림 서비스(APN) 확인란을 선택한 다음 계속을 클릭합니다. 확인을 클릭합니다.
  5. 키 ID를 기록해 두세요. 다운로드를 클릭하여 키를 생성하고 다운로드합니다. 다운로드한 파일은 두 번 이상 다운로드할 수 없으므로 안전한 곳에 저장하세요.
  6. Braze에서 설정 > 앱 설정으로 이동하여 Apple 푸시 인증서 아래에 .p8 파일을 업로드합니다. 개발 또는 프로덕션 푸시 인증서를 업로드할 수 있습니다. 앱이 App Store에 출시된 후 푸시 알림을 테스트하려면 앱의 개발 버전을 위한 별도의 워크스페이스를 설정하는 것이 좋습니다.
  7. 메시지가 표시되면 앱의 번들 ID, 키 ID팀 ID를 입력합니다. 또한 앱의 개발자 환경으로 알림을 보낼지 프로비저닝 프로필로 정의된 프로덕션 환경으로 보낼지 지정해야 합니다.
  8. When you’re finished, select Save.

2단계: 푸시 기능 사용

Xcode에서 기본 앱 타겟의 서명 & 기능 섹션으로 이동하여 푸시 알림 기능을 추가합니다.

Xcode 프로젝트의 '서명 & 기능' 섹션.

3단계: 푸시 처리 설정하기

Swift 소프트웨어 개발 키트를 사용하여 Braze에서 수신한 원격 알림 처리를 자동화할 수 있습니다. 이는 푸시 알림을 처리하는 가장 간단한 방법이며 권장되는 처리 방법입니다.

3.1 단계: 푸시 속성에서 자동화 인에이블먼트하기

자동 푸시 통합을 활성화하려면 push 구성의 automation 속성정보를 true로 설정합니다.

1
2
let configuration = Braze.Configuration(apiKey: "{YOUR-BRAZE-API-KEY}", endpoint: "{YOUR-BRAZE-API-ENDPOINT}")
configuration.push.automation = true
1
2
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:@"{YOUR-BRAZE-API-KEY}" endpoint:@"{YOUR-BRAZE-API-ENDPOINT}"];
configuration.push.automation = [[BRZConfigurationPushAutomation alloc] initEnablingAllAutomations:YES];

이렇게 하면 SDK에 다음을 지시합니다:

  • 시스템에서 푸시 알림 신청을 등록하세요.
  • 초기화 시 푸시 알림 승인/허가를 요청하세요.
  • 푸시 알림 관련 시스템 위임 메서드에 대한 구현을 동적으로 제공합니다.

3.2 단계: 개별 구성 재정의(선택 사항)

보다 세분화된 제어를 위해 각 자동화 단계를 개별적으로 활성화 또는 비활성화할 수 있습니다:

1
2
3
// Enable all automations and disable the automatic notification authorization request at launch.
configuration.push.automation = true
configuration.push.automation.requestAuthorizationAtLaunch = false
1
2
3
// Enable all automations and disable the automatic notification authorization request at launch.
configuration.push.automation = [[BRZConfigurationPushAutomation alloc] initEnablingAllAutomations:YES];
configuration.push.automation.requestAuthorizationAtLaunch = NO;

사용 가능한 모든 옵션은 Braze.Configuration.Push.Automation을 참조하고, 자동화 동작에 대한 자세한 내용은 automation을 참조하세요.

3.1 단계: APN으로 푸시 알림 등록하기

앱의 application:didFinishLaunchingWithOptions: 델리게이트 메서드에 적절한 코드 샘플을 포함시켜 사용자의 디바이스가 APN에 등록할 수 있도록 합니다. 애플리케이션의 메인 스레드에서 모든 푸시 연동 코드를 호출해야 합니다.

Braze는 푸시 액션 버튼 지원을 위한 기본 푸시 카테고리도 제공하며, 이 카테고리는 푸시 등록 코드에 수동으로 추가해야 합니다. 추가 통합 단계는 푸시 작업 버튼을 참조하세요.

앱 위임의 application:didFinishLaunchingWithOptions: 메소드에 다음 코드를 추가합니다.

1
2
3
4
5
6
7
8
9
10
11
application.registerForRemoteNotifications()
let center = UNUserNotificationCenter.current()
center.setNotificationCategories(Braze.Notifications.categories)
center.delegate = self
var options: UNAuthorizationOptions = [.alert, .sound, .badge]
if #available(iOS 12.0, *) {
  options = UNAuthorizationOptions(rawValue: options.rawValue | UNAuthorizationOptions.provisional.rawValue)
}
center.requestAuthorization(options: options) { granted, error in
  print("Notification authorization, granted: \(granted), error: \(String(describing: error))")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[application registerForRemoteNotifications];
UNUserNotificationCenter *center = UNUserNotificationCenter.currentNotificationCenter;
[center setNotificationCategories:BRZNotifications.categories];
center.delegate = self;
UNAuthorizationOptions options = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
if (@available(iOS 12.0, *)) {
  options = options | UNAuthorizationOptionProvisional;
}
[center requestAuthorizationWithOptions:options
                      completionHandler:^(BOOL granted, NSError *_Nullable error) {
                        NSLog(@"Notification authorization, granted: %d, "
                              @"error: %@)",
                              granted, error);
}];

3.2 단계: Braze에 푸시 토큰 등록

APN 등록이 완료되면 결과 deviceToken을 Braze에 전달하여 사용자에 대한 푸시 알림을 활성화합니다.

앱의 application(_:didRegisterForRemoteNotificationsWithDeviceToken:) 메소드에 다음 코드를 추가합니다:

1
AppDelegate.braze?.notifications.register(deviceToken: deviceToken)

앱의 application:didRegisterForRemoteNotificationsWithDeviceToken: 메소드에 다음 코드를 추가합니다:

1
[AppDelegate.braze.notifications registerDeviceToken:deviceToken];

Step 3.3: 푸시 처리 사용

다음으로, 수신한 푸시 알림을 Braze에 전달합니다. 이 단계는 푸시 분석 및 링크 처리를 로깅하는 데 필요합니다. 애플리케이션의 메인 스레드에서 모든 푸시 연동 코드를 호출해야 합니다.

기본 푸시 처리

Braze 기본값 푸시 처리를 인에이블하려면 앱의 application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 메소드에 다음 코드를 추가하세요:

1
2
3
4
5
6
7
if let braze = AppDelegate.braze, braze.notifications.handleBackgroundNotification(
  userInfo: userInfo,
  fetchCompletionHandler: completionHandler
) {
  return
}
completionHandler(.noData)

다음으로 앱의 userNotificationCenter(_:didReceive:withCompletionHandler:) 메소드에 다음을 추가합니다:

1
2
3
4
5
6
7
if let braze = AppDelegate.braze, braze.notifications.handleUserNotification(
  response: response,
  withCompletionHandler: completionHandler
) {
  return
}
completionHandler()

Braze 기본값 푸시 처리를 인에이블먼트하려면 애플리케이션의 application:didReceiveRemoteNotification:fetchCompletionHandler: 메소드에 다음 코드를 추가하세요:

1
2
3
4
5
6
7
BOOL processedByBraze = AppDelegate.braze != nil && [AppDelegate.braze.notifications handleBackgroundNotificationWithUserInfo:userInfo
                                                                                                       fetchCompletionHandler:completionHandler];
if (processedByBraze) {
  return;
}

completionHandler(UIBackgroundFetchResultNoData);

다음으로 앱의 (void)userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: 메소드에 다음 코드를 추가합니다:

1
2
3
4
5
6
7
BOOL processedByBraze = AppDelegate.braze != nil && [AppDelegate.braze.notifications handleUserNotificationWithResponse:response
                                                                                                  withCompletionHandler:completionHandler];
if (processedByBraze) {
  return;
}

completionHandler();
포 그라운드 푸시 처리

포그라운드 푸시 알림을 활성화하고 수신 시 Braze에서 이 알림을 인식하려면 UNUserNotificationCenter.userNotificationCenter(_:willPresent:withCompletionHandler:)를 구현합니다. 사용자가 포그라운드 알림을 탭하면 userNotificationCenter(_:didReceive:withCompletionHandler:) 푸시 델리게이트가 호출되고 Braze는 푸시 클릭 이벤트를 기록합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func userNotificationCenter(
  _ center: UNUserNotificationCenter,
  willPresent notification: UNNotification,
  withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions
) -> Void) {
  if let braze = AppDelegate.braze {
    // Forward notification payload to Braze for processing.
    braze.notifications.handleForegroundNotification(notification: notification)
  }

  // Configure application's foreground notification display options.
  if #available(iOS 14.0, *) {
    completionHandler([.list, .banner])
  } else {
    completionHandler([.alert])
  }
}

포그라운드 푸시 알림을 활성화하고 수신 시 Braze에서 이 알림을 인식하려면 userNotificationCenter:willPresentNotification:withCompletionHandler:를 구현합니다. 사용자가 포그라운드 알림을 탭하면 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: 푸시 델리게이트가 호출되고 Braze는 푸시 클릭 이벤트를 기록합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
  if (AppDelegate.braze != nil) {
    // Forward notification payload to Braze for processing.
    [AppDelegate.braze.notifications handleForegroundNotificationWithNotification:notification];
  }

  // Configure application's foreground notification display options.
  if (@available(iOS 14.0, *)) {
    completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);
  } else {
    completionHandler(UNNotificationPresentationOptionAlert);
  }
}

테스트 알림

명령줄을 통해 인앱 및 푸시 알림을 테스트하려면 터미널을 통해 CURL 및 메시징 API를 통해 단일 알림을 보낼 수 있습니다. 다음 필드를 테스트 케이스에 맞는 올바른 값으로 바꿔야 합니다:

  • YOUR_API_KEY - 설정 > API 키에서 사용할 수 있습니다.
  • YOUR_EXTERNAL_USER_ID - 사용자 검색 페이지에서 사용할 수 있습니다. 자세한 내용은 사용자 ID 할당하기를 참조하세요.
  • YOUR_KEY1 (선택 사항)
  • YOUR_VALUE1 (선택 사항)

다음 예제에서는 US-01 인스턴스를 사용하고 있습니다. 이 인스턴스를 사용하고 있지 않다면 API 설명서를 참조하여 요청할 엔드포인트를 확인하세요.

1
2
3
4
5
6
7
8
9
10
11
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer {YOUR_API_KEY}" -d '{
  "external_user_ids":["YOUR_EXTERNAL_USER_ID"],
  "messages": {
    "apple_push": {
      "alert":"Test push",
      "extra": {
        "YOUR_KEY1":"YOUR_VALUE1"
      }
    }
  }
}' https://rest.iad-01.braze.com/messages/send

푸시 알림 업데이트 구독하기

Braze에서 처리하는 푸시 알림 페이로드에 액세스하려면 Braze.Notifications.subscribeToUpdates(payloadTypes:_:) 메서드를 사용합니다.

payloadTypes 매개변수를 사용하여 푸시 열람 이벤트, 푸시 수신 이벤트 또는 둘 다와 관련된 알림의 가입 여부를 지정할 수 있습니다.

1
2
3
4
5
6
// This subscription is maintained through a Braze cancellable, which will observe for changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
let cancellable = AppDelegate.braze?.notifications.subscribeToUpdates(payloadTypes: [.open, .received]) { payload in
  print("Braze processed notification with title '\(payload.title)' and body '\(payload.body)'")
}
1
2
3
4
5
NSInteger filtersValue = BRZNotificationsPayloadTypeFilter.opened.rawValue | BRZNotificationsPayloadTypeFilter.received.rawValue;
BRZNotificationsPayloadTypeFilter *filters = [[BRZNotificationsPayloadTypeFilter alloc] initWithRawValue: filtersValue];
BRZCancellable *cancellable = [notifications subscribeToUpdatesWithPayloadTypes:filters update:^(BRZNotificationsPayload * _Nonnull payload) {
  NSLog(@"Braze processed notification with title '%@' and body '%@'", payload.title, payload.body);
}];

푸시 프라이머

푸시 프라이머 캠페인은 사용자가 기기에서 앱에 대한 푸시 알림을 활성화할 것을 권장합니다. 노코드 푸시 프라이머를 사용하면 SDK 사용자 지정 없이도 이 작업을 수행할 수 있습니다.

동적 APN 게이트웨이 관리

동적 Apple 푸시 알림 서비스(APN) 게이트웨이 매니저는 올바른 APN 환경을 자동으로 감지하여 iOS 푸시 알림의 안정성과 효율성을 향상시킵니다. 이전에는 푸시 알림을 위한 APN 환경(개발 또는 프로덕션)을 수동으로 선택해야 했기 때문에 잘못된 게이트웨이 구성, 전달 실패 및 BadDeviceToken 오류가 발생하는 경우가 있었습니다.

동적 APN 게이트웨이 관리가 가능합니다:

  • 안정성이 향상되었습니다: 알림은 항상 올바른 APN 환경으로 전달되므로 전달 실패를 줄일 수 있습니다.
  • 간소화된 구성: 더 이상 APN 게이트웨이 설정을 수동으로 관리할 필요가 없습니다.
  • 오류 복원력: 유효하지 않거나 누락된 게이트웨이 값은 정상적으로 처리되어 중단 없는 서비스를 제공합니다.

필수 조건

Braze는 다음 소프트웨어 개발 키트 버전 요구 사항과 함께 iOS에서 푸시 알림을 위한 동적 APN 게이트웨이 관리를 지원합니다:

작동 방식

iOS 앱이 Braze Swift SDK와 통합되면 다음과 같은 기기 관련 데이터를 전송합니다. aps-environment 를 포함한 기기 관련 데이터를 Braze 소프트웨어 개발 키트 API로 전송합니다(사용 가능한 경우). apns_gateway 값은 앱이 개발자(dev) 또는 프로덕션(prod) APN 환경을 사용하는지 여부를 나타냅니다.

Braze는 각 기기에 대해 보고된 게이트웨이 값도 저장합니다. 유효한 새 게이트웨이 값이 수신되면 Braze는 저장된 값을 자동으로 업데이트합니다.

Braze가 푸시 알림을 보내는 경우:

  • 기기에 대해 유효한 게이트웨이 값(개발 또는 프로덕트)이 저장되어 있으면 Braze는 이를 사용하여 올바른 APN 환경을 결정합니다.
  • 게이트웨이 값이 저장되지 않은 경우, Braze는 앱 설정 페이지에 구성된 APN 환경으로 기본값을 설정합니다.

Frequently asked questions

이 기능이 도입된 이유는 무엇인가요?

동적 APN 게이트웨이 매니저를 사용하면 올바른 환경이 자동으로 선택됩니다. 이전에는 APN 게이트웨이를 수동으로 구성해야 했기 때문에 BadDeviceToken 오류, 토큰 무효화, 잠재적인 APN 속도 제한 문제가 발생할 수 있었습니다.

이것이 푸시 전달 성능/성과에 어떤 영향을 미칠까요?

이 기능은 푸시 토큰을 항상 올바른 APN 환경으로 라우팅하여 잘못 구성된 게이트웨이로 인한 장애를 방지함으로써 전달 속도를 향상시킵니다.

이 기능을 비활성화할 수 있나요?

동적 APN 게이트웨이 관리는 기본값으로 켜져 있으며 안정성 향상을 제공합니다. 수동 게이트웨이 선택이 필요한 특정 사용 사례가 있는 경우 Braze 지원팀에 문의하세요.

Android TV용 푸시 알림 정보

기본 기능은 아니지만 Braze Android SDK와 Firebase 클라우드 메시징을 활용하여 Android TV용 푸시 토큰을 등록하면 Android TV 푸시 통합이 가능합니다. 그러나 알림 페이로드가 수신된 후 이를 표시하는 UI를 빌드해야 합니다.

필수 조건

이 기능을 사용하려면 다음을 완료해야 합니다:

푸시 알림 설정하기

Android TV용 푸시 알림을 설정하려면 다음과 같이 하세요:

  1. 앱에서 커스텀 보기를 만들어 알림을 표시하세요.
  2. 커스텀 알림 팩토리를 만듭니다. 그러면 기본 SDK 동작이 재정의되고 알림을 수동으로 표시할 수 있습니다. null을 반환하면 SDK가 처리되지 않으며, 알림을 표시할 커스텀 코드가 필요합니다. 이 단계가 완료되면 Android TV로 푸시 전송을 시작할 수 있습니다!

  3. (선택 사항) 클릭 분석을 효과적으로 추적하려면 클릭 분석 추적을 설정하세요. Braze 푸시 열기 및 수신 의도를 수신 대기하도록 푸시 콜백을 생성하면 됩니다.

Android TV 푸시 알림 테스트하기

푸시 구현이 성공적인지 테스트하려면 평소 Android 기기에서와 마찬가지로 Braze 대시보드에서 알림을 보냅니다.

  • 신청이 마감된 경우: 푸시 메시지가 화면에 건배 알림을 표시합니다.
  • 애플리케이션이 열려 있는 경우: 자체 호스팅 UI에 메시지를 표시할 수 있습니다. Android 모바일 SDK 인앱 메시지의 UI 스타일을 따르는 것이 좋습니다.

Best practices

Braze를 사용하는 마케터의 경우, Android TV에 캠페인을 시작하는 것은 Android 모바일 앱에 푸시를 시작하는 것과 동일합니다. 이러한 기기를 독점적으로 타겟팅하려면 세분화에서 Android TV 앱을 선택하는 것이 좋습니다.

FCM이 반환하는 전달 및 클릭 응답은 모바일 Android 기기와 동일한 규칙을 따르므로 메시지 활동 로그에 오류가 표시됩니다.

필수 조건

이 기능을 사용하려면 먼저 Cordova Braze SDK를 통합해야 합니다. SDK를 통합하면 기본 푸시 알림 기능이 기본값으로 인에이블먼트됩니다. 리치 푸시 알림과 푸시 스토리를 사용하려면 개별적으로 설정해야 합니다. iOS 푸시 메시지를 사용하려면 유효한 푸시 인증서도 업로드해야 합니다.

기본 푸시 알림 비활성화하기(iOS만 해당)

iOS용 Braze Cordova SDK를 통합하면 기본 푸시 알림 기능이 기본값으로 인에이블먼트됩니다. iOS 앱에서 이 기능을 비활성화하려면 config.xml 파일에 다음을 추가하세요. 자세한 내용은 선택적 구성을 참조하세요.

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

필수 조건

이 기능을 사용하려면 먼저 Flutter Braze SDK를 통합해야 합니다.

푸시 알림 설정하기

1단계: 초기 설정을 완료하십시오

1.1단계: 푸시 등록하기

Google의 Firebase 클라우드 메시징(FCM) API를 사용하여 푸시에 등록합니다. 전체 안내 과정은 기본 Android 푸시 통합 가이드의 다음 단계를 참조하세요:

  1. 프로젝트에 Firebase를 추가합니다.
  2. 종속성에 클라우드 메시징을 추가합니다.
  3. 서비스 계정을 만듭니다.
  4. JSON 자격 증명을 생성합니다.
  5. Braze에 JSON 자격 증명을 업로드합니다.

1.2단계: Google 발신자 ID 가져오기

먼저 Firebase 콘솔로 이동하여 프로젝트를 연 다음, 설정 > 프로젝트 설정을 선택합니다.

"설정" 메뉴가 열려 있는 Firebase 프로젝트입니다.

클라우드 메시징을 선택하고 Firebase 클라우드 메시징 API(V1)에서 발신자 ID를 클립보드에 복사합니다.

"발신자 ID"가 강조 표시된 Firebase 프로젝트의 "클라우드 메시징" 페이지.

1.3단계: braze.xml 업데이트

braze.xml 파일에 다음을 추가합니다. FIREBASE_SENDER_ID를 이전에 복사한 발신자 ID로 바꿉니다.

1
2
<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>

1.1단계: APN 인증서 업로드

Apple 푸시 알림 서비스(APN) 인증서를 생성하고 이를 Braze 대시보드에 업로드합니다. 전체 안내 과정은 APN 인증서 업로드를 참조하세요.

1.2단계: 앱에 푸시 알림 지원 추가

기본 iOS 통합 가이드를 따르세요.

2단계: 푸시 알림 이벤트 수신(선택 사항)

Braze가 감지하고 처리한 푸시 알림 이벤트를 수신하려면 subscribeToPushNotificationEvents()를 호출하고 실행할 인수를 전달합니다.

1
2
3
4
5
6
7
8
9
10
// Create stream subscription
StreamSubscription pushEventsStreamSubscription;

pushEventsStreamSubscription = braze.subscribeToPushNotificationEvents((BrazePushEvent pushEvent) {
  print("Push Notification event of type ${pushEvent.payloadType} seen. Title ${pushEvent.title}\n and deeplink ${pushEvent.url}");
  // Handle push notification events
});

// Cancel stream subscription
pushEventsStreamSubscription.cancel();
푸시 알림 이벤트 필드

푸시 알림 필드의 전체 목록은 아래 표를 참조하세요:

3단계: 푸시 알림 표시 테스트

네이티브 레이어에서 푸시 알림을 구성한 후 통합을 테스트합니다:

  1. Flutter 애플리케이션에서 활성 사용자를 설정합니다. 이렇게 하려면 braze.changeUser('your-user-id')를 호출하여 플러그인을 초기화합니다.
  2. 캠페인으로 이동하여 새 푸시 알림 캠페인을 만듭니다. 테스트할 플랫폼을 선택합니다.
  3. 테스트 알림을 작성하고 테스트 탭으로 이동합니다. 테스트 사용자와 동일한 user-id를 추가하고 테스트 보내기를 클릭합니다.
  4. 곧 기기에서 알림을 받습니다. 알림 센터에서 확인하거나 표시되지 않는 경우 설정을 업데이트해야 할 수 있습니다.

필수 조건

이 기능을 사용하려면 먼저 Android Braze SDK를 통합해야 합니다.

푸시 알림 설정하기

Huawei에서 제조한 최신 휴대폰에는 Google의 Firebase 클라우드 메시징(FCM) 대신 푸시 전송에 사용되는 서비스인 Huawei 모바일 서비스(HMS)가 탑재되어 있습니다.

1단계: Huawei 개발자 계정 등록

시작하기 전에 Huawei 개발자 계정을 등록하고 설정해야 합니다. Huawei 계정에서 내 프로젝트 > 프로젝트 설정 > 앱 정보로 이동하고 App IDApp secret을 기록해 둡니다.

2단계: Braze 대시보드에서 새 Huawei 앱 생성

Braze 대시보드의 설정 탐색 아래에 있는 앱 설정으로 이동합니다.

+ 앱 추가를 클릭하고 이름(예: 내 Huawei 앱)을 입력한 다음, 플랫폼으로 Android를 선택합니다.

새 Braze 앱이 생성되면 푸시 알림 설정에서 푸시 공급자로 Huawei를 선택합니다. 다음으로, Huawei Client SecretHuawei App ID를 입력합니다.

3단계: 앱에 Huawei 메시징 SDK 통합

Huawei는 애플리케이션에 Huawei 메시징 서비스를 통합하는 방법을 자세히 설명하는 Android 통합 코드랩을 제공합니다. 시작하려면 다음 단계를 따르세요.

코드랩을 완료한 후에는 커스텀 Huawei 메시지 서비스를 생성하여 푸시 토큰을 얻고 메시지를 Braze SDK로 전달해야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class CustomPushService extends HmsMessageService {
  @Override
  public void onNewToken(String token) {
    super.onNewToken(token);
    Braze.getInstance(this.getApplicationContext()).setRegisteredPushToken(token);
  }

  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    if (BrazeHuaweiPushHandler.handleHmsRemoteMessageData(this.getApplicationContext(), remoteMessage.getDataOfMap())) {
      // Braze has handled the Huawei push notification
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
class CustomPushService: HmsMessageService() {
  override fun onNewToken(token: String?) {
    super.onNewToken(token)
    Braze.getInstance(applicationContext).setRegisteredPushToken(token!!)
  }

  override fun onMessageReceived(hmsRemoteMessage: RemoteMessage?) {
    super.onMessageReceived(hmsRemoteMessage)
    if (BrazeHuaweiPushHandler.handleHmsRemoteMessageData(applicationContext, hmsRemoteMessage?.dataOfMap)) {
      // Braze has handled the Huawei push notification
    }
  }
}

커스텀 푸시 서비스를 추가한 후 AndroidManifest.xml에 다음을 추가합니다.

1
2
3
4
5
6
7
<service
  android:name="package.of.your.CustomPushService"
  android:exported="false">
  <intent-filter>
    <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
  </intent-filter>
</service>

4단계: 푸시 알림 테스트(선택 사항)

지금까지 Braze 대시보드에서 새 Huawei Android 앱을 생성하고, Huawei 개발자 자격 증명으로 앱을 구성한 후 Braze 및 Huawei SDK를 앱에 통합했습니다.

다음으로, Braze에서 새로운 푸시 캠페인을 테스트하여 통합을 테스트할 수 있습니다.

Step 4.1: 새 푸시 알림 캠페인 생성

캠페인 페이지에서 새 캠페인을 생성하고 메시지 유형으로 푸시 알림을 선택합니다.

캠페인 이름을 지정한 후 푸시 플랫폼으로 Android 푸시를 선택합니다.

사용 가능한 푸시 플랫폼을 표시하는 캠페인 생성 작성기입니다.

다음으로, 제목과 메시지와 함께 푸시 캠페인을 작성합니다.

Step 4.2: 테스트 푸시 전송

테스트 탭에서 changeUser(USER_ID_STRING) 메서드를 사용하여 앱에서 설정한 사용자 ID를 입력하고 테스트 보내기를 클릭하여 테스트 푸시를 보냅니다.

캠페인 작성기의 테스트 탭에서 사용자 ID를 제공하고 '개별 사용자 추가' 필드에 입력하면 자신에게 테스트 메시지를 보낼 수 있습니다.

이 시점에서 Braze로부터 Huawei(HMS) 기기로 테스트 푸시 알림을 받습니다.

Step 4.3: Huawei 세그먼트 세분화 설정(선택 사항)

Braze 대시보드의 Huawei 앱은 Android 푸시 플랫폼을 기반으로 빌드되었으므로 모든 Android 사용자(Firebase 클라우드 메시징 및 Huawei 모바일 서비스)에게 푸시를 보내거나 특정 앱으로 캠페인 오디언스를 세분화할 수 있는 유연성을 지원합니다.

화웨이 앱에만 푸시를 보내려면 새 세그먼트 만들기 ]를 클릭하고 섹션에서 화웨이 앱을 선택합니다.

물론 모든 Android 푸시 공급자로 동일한 푸시를 보내려면 현재 워크스페이스 내에 구성된 모든 Android 앱에 보낼 앱을 지정하지 않도록 선택할 수 있습니다.

필수 조건

이 기능을 사용하려면 먼저 React Native Braze SDK를 통합해야 합니다.

푸시 알림 설정하기

1단계: 초기 설정을 완료하십시오

필수 조건

푸시 알림에 Expo를 사용하려면 먼저 Braze Expo 플러그인을 설정해야 합니다.

1.1단계: app.json 파일 업데이트

다음으로 Android 및 iOS용 app.json 파일을 업데이트합니다:

  • Android: enableFirebaseCloudMessaging 옵션을 추가합니다.
  • iOS: enableBrazeIosPush 옵션을 추가합니다.

1.2단계: Google 발신자 ID 추가

먼저 Firebase 콘솔로 이동하여 프로젝트를 연 다음, 설정 > 프로젝트 설정을 선택합니다.

"설정" 메뉴가 열려 있는 Firebase 프로젝트입니다.

클라우드 메시징을 선택하고 Firebase 클라우드 메시징 API(V1)에서 발신자 ID를 클립보드에 복사합니다.

"발신자 ID"가 강조 표시된 Firebase 프로젝트의 "클라우드 메시징" 페이지.

그런 다음, 프로젝트의 app.json 파일을 열고 firebaseCloudMessagingSenderId 속성정보를 클립보드의 발신자 ID로 설정합니다. 예를 들어, 다음과 같습니다.

1
"firebaseCloudMessagingSenderId": "693679403398"

1.3단계: Google 서비스 JSON에 경로 추가

프로젝트의 app.json 파일에 google-services.json 파일의 경로를 추가합니다. 이 파일은 구성에서 enableFirebaseCloudMessaging: true를 설정할 때 필요합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
  "expo": {
    "android": {
      "googleServicesFile": "PATH_TO_GOOGLE_SERVICES"
    },
    "plugins": [
      [
        "@braze/expo-plugin",
        {
          "androidApiKey": "YOUR-ANDROID-API-KEY",
          "iosApiKey": "YOUR-IOS-API-KEY",
          "enableBrazeIosPush": true,
          "enableFirebaseCloudMessaging": true,
          "firebaseCloudMessagingSenderId": "YOUR-FCM-SENDER-ID",
          "androidHandlePushDeepLinksAutomatically": true
        }
      ],
    ]
  }
}

Expo 알림과 같은 추가 푸시 알림 라이브러리를 사용하는 경우 기본 설정 지침 대신 이 설정을 사용해야 합니다.

Braze Expo 플러그인을 사용하지 않거나 대신 이러한 설정을 네이티브로 구성하려는 경우 네이티브 Android 푸시 통합 가이드를 참조하여 푸시 등록을 하세요.

Braze Expo 플러그인을 사용하지 않거나 대신 이러한 설정을 네이티브로 구성하려는 경우 네이티브 iOS 푸시 통합 가이드의 다음 단계를 참조하여 푸시 등록을 하세요:

1.1단계: 푸시 권한 요청하기

앱이 실행될 때 푸시 권한을 요청하지 않을 계획이라면 앱디렉티브에서 requestAuthorizationWithOptions:completionHandler: 호출을 생략하세요. 그런 다음 2단계로 건너뜁니다. 그렇지 않은 경우 기본 iOS 통합 가이드를 따르세요.

1.2단계(선택 사항): 푸시 키 마이그레이션

이전에 expo-notifications를 사용하여 푸시 키를 관리했다면 애플리케이션의 루트 폴더에서 expo fetch:ios:certs를 실행합니다. 이렇게 하면 푸시 키(.p8 파일)가 다운로드되며, 이를 Braze 대시보드에 업로드할 수 있습니다.

2단계: 푸시 알림 권한 요청하기

Braze.requestPushPermission() 메서드(v1.38.0 이상에서 사용 가능)를 사용하여 iOS 및 Android 13 이상에서 사용자에게 푸시 알림에 대한 권한을 요청합니다. Android 12 이하에서는 이 방법을 사용할 수 없습니다.

이 메서드는 SDK가 iOS에서 사용자에게 요청할 권한을 지정하는 필수 매개변수를 사용합니다. 이러한 옵션은 Android에는 적용되지 않습니다.

1
2
3
4
5
6
7
8
const permissionOptions = {
  alert: true,
  sound: true,
  badge: true,
  provisional: false
};

Braze.requestPushPermission(permissionOptions);

2.1단계: 푸시 알림 듣기(선택 사항)

Braze가 수신 푸시 알림을 감지하고 처리한 이벤트를 추가로 구독할 수 있습니다. 리스너 키 Braze.Events.PUSH_NOTIFICATION_EVENT를 사용합니다.

1
2
3
4
Braze.addListener(Braze.Events.PUSH_NOTIFICATION_EVENT, data => {
  console.log(`Push Notification event of type ${data.payload_type} seen. Title ${data.title}\n and deeplink ${data.url}`);
  console.log(JSON.stringify(data, undefined, 2));
});
푸시 알림 이벤트 필드

푸시 알림 필드의 전체 목록은 아래 표를 참조하세요:

3단계: 딥링킹 활성화(선택 사항)

푸시 알림을 클릭했을 때 Braze가 React 컴포넌트 내부의 딥링킹을 처리하도록 인에이블먼트하려면 먼저 React Native 링크 라이브러리 또는 선택한 솔루션에 설명된 단계를 구현하세요. 그런 다음 아래의 추가 단계를 따르세요.

딥링크 개념에 대한 자세한 내용은 FAQ 문서를 참조하세요.

Braze Expo 플러그인을 사용하는 경우 app.json 에서 androidHandlePushDeepLinksAutomaticallytrue 으로 설정하여 푸시 알림 딥링크를 자동으로 처리할 수 있습니다.

대신 딥링크를 수동으로 처리하려면 기본 Android 설명서를 참조하세요: 딥링크 추가하기.

3.1 단계: 앱 실행 시 푸시 알림 페이로드 저장하기

iOS의 경우 AppDelegate의 didFinishLaunchingWithOptions 메서드에 populateInitialPayloadFromLaunchOptions를 추가합니다. 예를 들어, 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.moduleName = @"BrazeProject";
  self.initialProps = @{};

  BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:apiKey endpoint:endpoint];
  configuration.triggerMinimumTimeInterval = 1;
  configuration.logger.level = BRZLoggerLevelInfo;
  Braze *braze = [BrazeReactBridge initBraze:configuration];
  AppDelegate.braze = braze;

  [self registerForPushNotifications];
  [[BrazeReactUtils sharedInstance] populateInitialPayloadFromLaunchOptions:launchOptions];

  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

3.2 단계: 닫힌 상태에서 딥링크 처리하기

React Native Linking에서 처리하는 기본 시나리오 외에도 Braze.getInitialPushPayload 메서드를 구현하고 url 값을 검색하여 앱이 실행 중이 아닐 때 앱을 여는 푸시 알림의 딥링킹을 고려하세요. For example:

1
2
3
4
5
6
7
8
9
// Handles deep links when an iOS app is launched from a hard close via push click.
// This edge case is not handled in the React Native Linking library and is provided as a workaround by Braze.
Braze.getInitialPushPayload(pushPayload => {
  if (pushPayload) {
    console.log('Braze.getInitialPushPayload is ' + pushPayload);
    showToast('Initial URL is ' + pushPayload.url);
    handleOpenUrl({ pushPayload.url });
  }
});

3.3 단계: 유니버설 링크 인에이블먼트(선택 사항)

유니버설 링크 지원을 인에이블하려면 iOS 디렉터리에 BrazeReactDelegate.h 파일을 만든 다음 다음 코드 스니펫을 추가하세요.

1
2
3
4
5
6
#import <Foundation/Foundation.h>
#import <BrazeKit/BrazeKit-Swift.h>

@interface BrazeReactDelegate: NSObject<BrazeDelegate>

@end

그런 다음 BrazeReactDelegate.m 파일을 만든 다음 다음 코드 스니펫을 추가합니다. YOUR_DOMAIN_HOST 을 실제 도메인으로 바꿉니다.

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 "BrazeReactDelegate.h"
#import <UIKit/UIKit.h>

@implementation BrazeReactDelegate

/// This delegate method determines whether to open a given URL.
///
/// Reference the `BRZURLContext` object to get additional details about the URL payload.
- (BOOL)braze:(Braze *)braze shouldOpenURL:(BRZURLContext *)context {
  if ([[context.url.host lowercaseString] isEqualToString:@"YOUR_DOMAIN_HOST"]) {
    // Sample custom handling of universal links
    UIApplication *application = UIApplication.sharedApplication;
    NSUserActivity* userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
    userActivity.webpageURL = context.url;
    // Routes to the `continueUserActivity` method, which should be handled in your `AppDelegate`.
    [application.delegate application:application
                 continueUserActivity:userActivity restorationHandler:^(NSArray<id<UIUserActivityRestoring>> * _Nullable restorableObjects) {}];
    return NO;
  }
  // Let Braze handle links otherwise
  return YES;
}

@end

그런 다음 프로젝트의 AppDelegate.m 파일에 BrazeReactDelegate 을 생성하고 didFinishLaunchingWithOptions 에 등록합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import "BrazeReactUtils.h"
#import "BrazeReactDelegate.h"

@interface AppDelegate ()

// Keep a strong reference to the BrazeDelegate to ensure it is not deallocated.
@property (nonatomic, strong) BrazeReactDelegate *brazeDelegate;

@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // Other setup code

  self.brazeDelegate = [[BrazeReactDelegate alloc] init];
  braze.delegate = self.brazeDelegate;
}

통합 예시는 여기에서 샘플 앱을 참조하세요.

4단계: 테스트 푸시 알림 보내기

이 시점에서 기기에 알림을 보낼 수 있어야 합니다. 다음 단계에 따라 푸시 연동을 테스트하세요.

  1. Braze.changeUserId('your-user-id') 메서드를 호출하여 React Native 애플리케이션에서 활성 사용자를 설정합니다.
  2. 캠페인으로 이동하여 새 푸시 알림 캠페인을 만듭니다. 테스트할 플랫폼을 선택합니다.
  3. 테스트 알림을 작성하고 테스트 탭으로 이동합니다. 테스트 사용자와 동일한 user-id를 추가하고 테스트 보내기를 클릭합니다. 곧 기기에서 알림을 받습니다.

자신의 사용자 아이디를 테스트 수신자로 추가하여 푸시 알림을 테스트할 수 있는 Braze 푸시 캠페인을 보여줍니다.

엑스포 플러그인 사용

엑스포에 대한 푸시 알림을 설정한 후에는 기본 Android 또는 iOS 레이어에서 코드를 작성할 필요 없이 다음 푸시 알림 동작을 처리하는 데 사용할 수 있습니다.

Android 푸시를 추가 FMS로 전달하기

추가 Firebase 메시징 서비스(FMS)를 사용하려는 경우 애플리케이션에서 Braze에서 보낸 푸시가 아닌 푸시를 수신할 경우 호출할 대체 FMS를 지정할 수 있습니다. For example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "expo": {
    "plugins": [
      [
        "@braze/expo-plugin",
        {
          ...
          "androidFirebaseMessagingFallbackServiceEnabled": true,
          "androidFirebaseMessagingFallbackServiceClasspath": "com.company.OurFirebaseMessagingService"
        }
      ]
    ]
  }
}

Expo 애플리케이션 서비스로 앱 확장 사용

Expo 애플리케이션 서비스(EAS)를 사용하고 enableBrazeIosRichPush 또는 enableBrazeIosPushStories를 활성화한 경우 프로젝트의 각 앱 확장에 해당하는 번들 식별자를 선언해야 합니다. 이 단계에는 EAS로 코드 서명을 관리하도록 프로젝트를 구성한 방식에 따라 여러 가지 방법으로 접근할 수 있습니다.

한 가지 방법은 Expo의 앱 확장 설명서에 따라 app.json 파일에서 appExtensions 구성을 사용하는 것입니다. 또는 Expo의 로컬 자격 증명 설명서에 따라 credentials.json 파일에서 multitarget 설정을 구성할 수도 있습니다.

문제 해결

다음은 Braze React Native SDK 및 Expo 플러그인과의 푸시 알림 통합에 대한 일반적인 문제 해결 단계입니다.

푸시 알림이 작동을 멈췄습니다.

엑스포 플러그인을 통한 푸시 알림이 작동을 멈춘 경우:

  1. Braze 소프트웨어 개발 키트에서 세션을 추적하고 있는지 확인합니다.
  2. wipeData 에 대한 명시적 또는 암시적 호출로 소프트웨어 개발 키트가 비활성화되지 않았는지 확인합니다.
  3. 최근 업그레이드된 Expo 또는 관련 라이브러리가 Braze 구성과 충돌할 수 있으므로 이를 검토하세요.
  4. 최근에 추가된 프로젝트 종속성을 검토하고 기존 푸시 알림 델리게이트 메서드를 수동으로 재정의하고 있는지 확인하세요.

기기 토큰이 Braze에 등록되지 않습니다.

기기 토큰이 Braze에 등록되지 않는 경우 먼저 푸시 알림 작동 중지를 검토하세요.

문제가 지속되면 별도의 종속성이 Braze 푸시 알림 구성을 방해하고 있을 수 있습니다. 대신 제거하거나 Braze.registerPushToken 으로 직접 문의할 수 있습니다.

필수 조건

이 기능을 사용하려면 먼저 Web Braze SDK를 통합해야 합니다. 또한 웹 소프트웨어 개발 키트에 대한 푸시 알림을 설정해야 합니다. Safari v16.4 이상을 사용하는 iOS 및 iPadOS 사용자에게만 푸시 알림을 보낼 수 있다는 점에 유의하세요.

모바일용 Safari 푸시 설정하기

1단계: 매니페스트 파일 만들기

웹 애플리케이션 매니페스트는 웹사이트가 사용자의 홈 화면에 설치될 때 표시되는 방식을 제어하는 JSON 파일입니다.

예를 들어 앱 스위처에서 사용하는 배경 테마 색상과 아이콘, 기본 앱과 비슷하게 전체 화면으로 렌더링할지, 앱을 가로 또는 세로 모드로 열지 여부를 설정할 수 있습니다.

웹사이트의 루트 디렉터리에 다음과 같은 필수 필드를 사용하여 manifest.json 파일을 새로 만듭니다.

1
2
3
4
5
6
7
8
9
{
  "name": "your app name",
  "short_name": "your app name",
  "display": "fullscreen",
  "icons": [{
    "src": "favicon.ico",
    "sizes": "128x128",
  }]
}

지원되는 전체 필드 목록은 여기에서 확인할 수 있습니다.

웹사이트의 <head> 요소에 매니페스트 파일이 호스팅되는 위치를 가리키는 다음 <link> 태그를 추가합니다.

1
<link rel="manifest" href="/manifest.json" />

3단계: 서비스 종사자 추가

웹 푸시 통합 가이드에 설명된 대로 웹사이트에 Braze 서비스 워커 라이브러리를 가져오는 서비스 워커 파일이 있어야 합니다.

4단계: 홈 화면에 추가

인기 있는 웹 브라우저(예: Safari, Chrome, FireFox, Edge)는 모두 이후 버전에서 웹 푸시 알림을 지원합니다. iOS 또는 iPadOS에서 푸시 권한을 요청하려면 공유 대상 > 홈 화면에 추가를 선택하여 웹사이트를 사용자의 홈 화면에 추가해야 합니다. 홈 화면에 추가를 사용하면 사용자가 웹사이트를 북마크에 추가하여 귀사의 아이콘을 소중한 홈 화면 공간에 추가할 수 있습니다.

웹사이트를 북마크하고 홈 화면에 저장하는 옵션을 보여주는 iPhone

5단계: 기본 푸시 프롬프트 표시

앱을 홈 화면에 추가한 후 사용자가 버튼을 클릭하는 등의 동작을 수행할 때 푸시 권한을 요청할 수 있습니다. requestPushPermission 메서드를 사용하거나 노코드 푸시 프라이머 인앱 메시지를 사용하여 수행할 수 있습니다.

알림을 '허용' 또는 '허용하지 않음'으로 설정할지 묻는 푸시 메시지

예를 들어, 다음과 같습니다.

1
2
3
4
5
6
7
8
9
import { requestPushPermission } from "@braze/web-sdk";

button.onclick = function(){
    requestPushPermission(() => {
        console.log(`User accepted push prompt`);
    }, (temporary) => {
        console.log(`User ${temporary ? "temporarily dismissed" : "permanently denied"} push prompt`);
    });
};

다음 단계

그런 다음 테스트 메시지를 보내 통합을 검증합니다. 통합이 완료되면 코드가 없는 푸시 프라이머 메시지를 사용하여 푸시 옵트인율을 최적화할 수 있습니다.

필수 조건

이 기능을 사용하려면 먼저 Unity Braze SDK를 통합해야 합니다.

푸시 알림 설정하기

1단계: 플랫폼 설정

1.1단계: Firebase 활성화

시작하려면 Firebase Unity 설정 설명서를 따르세요.

1.2단계: Firebase 자격 증명 설정

Braze 대시보드에 Firebase 서버 키와 발신자 ID를 입력해야 합니다. 이렇게 하려면 Firebase 개발자 콘솔에 로그인하고 Firebase 프로젝트를 선택합니다. 다음으로, 설정에서 클라우드 메시징을 선택하고 서버 키와 발신자 ID를 복사합니다:

Braze에서 설정 관리 아래의 앱 설정 페이지에서 Android 앱을 선택합니다. 다음으로, Firebase 클라우드 메시징 서버 키 필드에 Firebase 서버 키를 입력하고 Firebase 클라우드 메시징 발신자 ID 필드에 Firebase 발신자 ID를 입력합니다.

1.1단계: 통합 방법 확인

Braze는 iOS 푸시 통합 자동화를 위한 네이티브 Unity 솔루션을 제공합니다. 대신 통합을 수동으로 설정하고 관리하려면 Swift를 참조하세요: 푸시 알림.

그렇지 않으면 다음 단계로 계속 진행합니다.

1.1단계: ADM 활성화

  1. 아직 계정을 만들지 않았다면 Amazon 앱 & 게임 개발자 포털에 계정을 만드세요.
  2. OAuth 자격 증명(클라이언트 ID 및 클라이언트 비밀)과 ADM API 키를 구합니다.
  3. Unity Braze 구성 창에서 자동 ADM 등록 활성화됨을 활성화합니다.
    • 또는 다음 줄을 res/values/braze.xml 파일에 추가하여 ADM 등록을 활성화할 수 있습니다:
1
  <bool name="com_braze_push_adm_messaging_registration_enabled">true</bool>

2단계: 푸시 알림 구성

2.1 단계: 푸시 설정 구성하기

Braze SDK는 푸시 알림을 받기 위해 Firebase 클라우드 메시징 서버에 푸시 등록을 자동으로 처리할 수 있습니다. Unity에서 자동화 Unity Android 통합을 인에이블한 다음 다음 푸시 알림 설정을 구성합니다.

2.1 단계: APN 토큰 업로드

Braze를 사용하여 iOS 푸시 알림을 보내려면 먼저 Apple의 개발자 설명서에 설명된 대로 .p8 푸시 알림 파일을 업로드해야 합니다:

  1. Apple 개발자 계정에서 다음 위치로 이동합니다. 인증서, 식별자 & 프로필.
  2. 에서 모두를 선택하고 오른쪽 상단에 있는 추가 버튼(+)을 클릭합니다.
  3. 키 설명에 서명 키의 고유한 이름을 입력합니다.
  4. 주요 서비스에서 Apple 푸시 알림 서비스(APN) 확인란을 선택한 다음 계속을 클릭합니다. 확인을 클릭합니다.
  5. 키 ID를 기록해 두세요. 다운로드를 클릭하여 키를 생성하고 다운로드합니다. 다운로드한 파일은 두 번 이상 다운로드할 수 없으므로 안전한 곳에 저장하세요.
  6. Braze에서 설정 > 앱 설정으로 이동하여 Apple 푸시 인증서 아래에 .p8 파일을 업로드합니다. 개발 또는 프로덕션 푸시 인증서를 업로드할 수 있습니다. 앱이 App Store에 출시된 후 푸시 알림을 테스트하려면 앱의 개발 버전을 위한 별도의 워크스페이스를 설정하는 것이 좋습니다.
  7. 메시지가 표시되면 앱의 번들 ID, 키 ID팀 ID를 입력합니다. 또한 앱의 개발자 환경으로 알림을 보낼지 프로비저닝 프로필로 정의된 프로덕션 환경으로 보낼지 지정해야 합니다.
  8. When you’re finished, select Save.

2.2 단계: 자동 푸시 인에이블먼트 사용

Unity 편집기에서 Braze > Braze 구성으로 이동하여 Braze 구성 설정을 엽니다.

푸시 알림에 사용자를 자동으로 등록하고, 푸시 토큰을 Braze에 전달하며, 푸시 열람 분석을 추적하고, 기본 푸시 알림 처리 기능을 활용하려면 Braze와 푸시 통합을 선택합니다.

2.3 단계: 백그라운드 푸시 사용(선택 사항)

푸시 알림에 대해 background mode를 활성화하려면 백그라운드 푸시 활성화를 선택합니다. 그러면 푸시 알림이 도착할 때 시스템이 애플리케이션을 suspended 상태에서 해제하여 애플리케이션이 푸시 알림에 대한 응답으로 콘텐츠를 다운로드할 수 있습니다. 제거 추적 기능을 사용하려면 이 옵션을 선택해야 합니다.

Unity 에디터에 Braze 구성 옵션이 표시됩니다. 이 편집기에서는 'Unity iOS 통합 자동화', 'Braze와 푸시 통합', '백그라운드 푸시 활성화'가 활성화되어 있습니다.

2.4 단계: 자동 등록 비활성화(선택 사항)

푸시 알림을 아직 옵트인하지 않은 사용자는 애플리케이션을 열 때 자동으로 푸시 권한이 부여됩니다. 이 기능을 비활성화하고 푸시에 대해 사용자를 수동으로 등록하려면 자동 푸시 등록 비활성화를 선택합니다.

  • iOS 12 이상에서 임시 권한 부여 비활성화를 선택하지 않으면 사용자에게 무음 푸시 수신 권한이 임시로(자동으로) 부여됩니다. 이 옵션을 선택하면 사용자에게 기본 푸시 프롬프트가 표시됩니다.
  • 런타임에 프롬프트가 표시되는 시점을 정확하게 구성해야 하는 경우, Braze 구성 편집기에서 자동 등록을 비활성화하고 대신 AppboyBinding.PromptUserForPushPermissions()를 사용합니다.

Unity 에디터에 Braze 구성 옵션이 표시됩니다. 이 편집기에서는 'Unity iOS 통합 자동화', 'Braze와 푸시 통합', '자동 푸시 등록 비활성화'가 활성화되어 있습니다.

2.1 단계: 업데이트 AndroidManifest.xml

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

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
<?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" />
  <permission
    android:name="REPLACE_WITH_YOUR_PACKAGE_NAME.permission.RECEIVE_ADM_MESSAGE"
    android:protectionLevel="signature" />
  <uses-permission android:name="REPLACE_WITH_YOUR_PACKAGE_NAME.permission.RECEIVE_ADM_MESSAGE" />
  <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />

  <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: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>

    <receiver android:name="com.braze.push.BrazeAmazonDeviceMessagingReceiver" android:permission="com.amazon.device.messaging.permission.SEND">
      <intent-filter>
          <action android:name="com.amazon.device.messaging.intent.RECEIVE" />
          <action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
          <category android:name="REPLACE_WITH_YOUR_PACKAGE_NAME" />
      </intent-filter>
    </receiver>
  </application>
</manifest>

2.2 단계: ADM API 키를 저장하세요

먼저 앱의 ADM API 키를 생성한 다음 api_key.txt 이라는 파일에 키를 저장하고 프로젝트의 Assets/ 디렉토리에 추가합니다.

다음으로 mainTemplate.gradle 파일에 다음을 추가합니다:

1
2
3
4
5
6
7
task copyAmazon(type: Copy) {
    def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
    from unityProjectPath + '/Assets/api_key.txt'
    into new File(projectDir, 'src/main/assets')
}

preBuild.dependsOn(copyAmazon)

2.3 단계: ADM Jar 추가

필수 ADM Jar 파일은 Unity JAR 문서에 따라 프로젝트의 어느 곳에나 배치할 수 있습니다.

2.4 단계: Braze 대시보드에 클라이언트 비밀 및 클라이언트 ID 추가하기

마지막으로 1단계에서 얻은 클라이언트 비밀과 클라이언트 ID를 Braze 대시보드의 설정 관리 페이지에 추가해야 합니다.

3단계: 푸시 리스너 설정

3.1 단계: 푸시 수신 리스너 인에이블먼트

사용자가 푸시 알림을 받을 때 푸시 수신 리스너가 실행됩니다. 푸시 페이로드를 Unity로 보내려면 게임 오브젝트의 이름을 설정하고 푸시 수신 리스너 설정 아래에 수신된 리스너 콜백 메서드를 푸시합니다.

3.2 단계: 푸시 열린 리스너 인에이블먼트 사용

사용자가 푸시 알림을 클릭하여 앱을 실행하면 푸시 열람 리스너가 실행됩니다. 푸시 페이로드를 Unity로 전송하려면 푸시 열람 리스너 설정 아래 게임 오브젝트의 이름과 푸시 열람 리스너 콜백 메서드를 설정합니다.

Step 3.3: 푸시 삭제된 리스너 인에이블먼트하기

푸시 삭제 리스너는 사용자가 푸시 알림을 밀거나 해제할 때 실행됩니다. 푸시 페이로드를 Unity로 전송하려면 푸시 삭제 리스너 설정 아래 게임 오브젝트의 이름과 푸시 삭제 리스너 콜백 메서드를 설정합니다.

푸시 리스너 예제

다음 예제는 각각 PushNotificationReceivedCallback, PushNotificationOpenedCallback, PushNotificationDeletedCallback이라는 콜백 메서드 이름을 사용하여 BrazeCallback 게임 오브젝트를 구현합니다.

이 구현 예제 그래픽에서는 이전 섹션에서 언급한 Braze 구성 옵션과 C# 코드 스니펫을 보여줍니다.

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
public class MainMenu : MonoBehaviour {
  void PushNotificationReceivedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationReceivedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification received: " + pushNotification);   
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push received Notification event: " + pushNotification);   
#endif  
  }

  void PushNotificationOpenedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationOpenedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification opened: " + pushNotification);  
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push opened Notification event: " + pushNotification);   
#endif  
  }

  void PushNotificationDeletedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationDeletedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification dismissed: " + pushNotification);  
#endif
  }
}

3.1 단계: 푸시 수신 리스너 인에이블먼트

푸시 수신 리스너는 사용자가 애플리케이션을 적극적으로 사용하는 동안(예: 앱이 포그라운드 상태일 때) 푸시 알림을 수신할 때 실행됩니다. Braze 설정 에디터에서 푸시 수신 리스너를 설정합니다. 런타임에 게임 오브젝트 리스너를 구성해야 하는 경우 AppboyBinding.ConfigureListener()를 사용하고 BrazeUnityMessageType.PUSH_RECEIVED를 지정합니다.

Unity 에디터에 Braze 구성 옵션이 표시됩니다. 이 편집기에서는 '푸시 수신 리스너 설정' 옵션이 확장되어 있고 '게임 오브젝트 이름'(AppBoyCallback)과 '콜백 메서드 이름'(PushNotificationReceivedCallback)이 제공됩니다.

3.2 단계: 푸시 열린 리스너 인에이블먼트 사용

사용자가 푸시 알림을 클릭하여 앱을 실행하면 푸시 열람 리스너가 실행됩니다. 푸시 페이로드를 Unity로 전송하려면 푸시 열람 리스너 설정 옵션에서 게임 오브젝트의 이름과 푸시 열람 리스너 콜백 메서드를 설정합니다.

Unity 에디터에 Braze 구성 옵션이 표시됩니다. 이 편집기에서는 '푸시 수신 리스너 설정' 옵션이 확장되어 있고 '게임 오브젝트 이름'(AppBoyCallback)과 '콜백 메서드 이름'(PushNotificationOpenedCallback)이 제공됩니다.

런타임에 게임 오브젝트 리스너를 구성해야 하는 경우 AppboyBinding.ConfigureListener()를 사용하고 BrazeUnityMessageType.PUSH_OPENED를 지정합니다.

푸시 리스너 예제

다음 예제는 각각 PushNotificationReceivedCallbackPushNotificationOpenedCallback이라는 콜백 메서드 이름을 사용하여 AppboyCallback 게임 오브젝트를 구현합니다.

이 구현 예제 그래픽에서는 이전 섹션에서 언급한 Braze 구성 옵션과 C# 코드 스니펫을 보여줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MainMenu : MonoBehaviour {
  void PushNotificationReceivedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationReceivedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification received: " + pushNotification);   
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push received Notification event: " + pushNotification);   
#endif  
  }

  void PushNotificationOpenedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationOpenedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification opened: " + pushNotification);  
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push opened Notification event: " + pushNotification);   
#endif  
  }
}

이전 단계에서 AndroidManifest.xml 을 업데이트하면 다음 줄을 추가하면 푸시 리스너가 자동으로 설정됩니다. 따라서 추가 설정이 필요하지 않습니다.

1
2
<action android:name="com.amazon.device.messaging.intent.RECEIVE" />
<action android:name="com.amazon.device.messaging.intent.REGISTRATION" />

선택적 구성

인앱 리소스에 대한 딥링킹

Braze는 기본적으로 표준 딥링크(웹사이트 URL, Android URI 등)를 처리할 수 있지만, 커스텀 딥링크를 생성하려면 추가적인 매니페스트 설정이 필요합니다.

설정 지침은 인앱 리소스에 대한 딥링킹을 참조하세요.

Braze 푸시 알림 아이콘 추가하기

프로젝트에 푸시 아이콘을 추가하려면 아이콘 이미지 파일이 포함된 안드로이드 아카이브(AAR) 플러그인 또는 안드로이드 라이브러리를 생성하세요. 단계와 자세한 내용은 유니티 설명서를 참조하세요: 안드로이드 라이브러리 프로젝트 및 안드로이드 아카이브 플러그인.

푸시 토큰 콜백

OS에서 Braze 기기 토큰의 사본을 수신하려면 AppboyBinding.SetPushTokenReceivedFromSystemDelegate()를 사용하여 위임을 설정합니다.

현재 ADM에 대한 선택적 구성은 없습니다.

필수 조건

이 기능을 사용하려면 먼저 .NET MAUI Braze SDK를 통합해야 합니다.

푸시 알림 설정하기

.NET MAUI(이전의 Xamarin)에 대한 푸시 알림을 통합하려면 기본 Android 푸시 알림에 대한 단계를 완료해야 합니다. 다음 단계는 요약에 불과합니다. 전체 설명을 보려면 네이티브 푸시 알림 가이드를 참조하세요.

1단계: 프로젝트를 업데이트하세요

  1. Android 프로젝트에 Firebase를 추가하세요.
  2. Android 프로젝트의 build.gradle에 Cloud 메시징 라이브러리를 추가합니다.
    1
    
      implementation "google.firebase:firebase-messaging:+"
    

2단계: JSON 자격 증명 생성

  1. Google Cloud에서 Firebase 클라우드 메시징 API를 활성화하세요.
  2. 서비스 계정 > 프로젝트 > 서비스 계정 생성을 선택한 다음, 서비스 계정 이름, ID 및 설명을 입력합니다. 완료되면 생성하고 계속을 선택하십시오.
  3. 역할 필드에서 역할 목록에서 Firebase Cloud Messaging API 관리자를 찾아 선택합니다.
  4. 서비스 계정에서 프로젝트를 선택한 다음, 작업 > 키 관리 > 키 추가 > 새 키 생성을 선택합니다. JSON을 선택한 다음, 생성을 선택합니다.

3단계: JSON 자격 증명을 업로드하세요

  1. Braze에서  설정 > 앱 설정을 선택합니다. Android 앱의 푸시 알림 설정에서 Firebase를 선택한 다음 JSON 파일 업로드를 선택하고 이전에 생성한 자격 증명을 업로드합니다. 완료되면 저장을 선택하십시오.
  2. Firebase Console로 이동하여 자동 FCM 토큰 등록을 활성화합니다. 프로젝트를 열고 설정 > 프로젝트 설정을 선택합니다. 클라우드 메시징을 선택하고 Firebase 클라우드 메시징 API(V1)에서 발신자 ID 필드의 숫자를 복사합니다.
  3. Android Studio 프로젝트에서 다음을 braze.xml에 추가합니다.
1
2
  <bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
  <string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>

1단계: 초기 설정을 완료하십시오

푸시를 사용해 애플리케이션을 설정하고 서버에 자격 증명을 저장하는 방법은 Swift 통합 지침을 참조하세요. 자세한 내용은 iOS MAUI 샘플 애플리케이션을 참조하세요.

2단계: 푸시 알림 권한 요청하기

이제 .NET MAUI 소프트웨어 개발 키트에서 자동 푸시 설정을 지원합니다. 다음 코드를 Braze 인스턴스 구성에 추가하여 푸시 자동화 및 권한을 설정합니다.

1
2
configuration.Push.Automation = new BRZConfigurationPushAutomation(true);
configuration.Push.Automation.RequestAuthorizationAtLaunch = false;

자세한 내용은 iOS MAUI 샘플 애플리케이션을 참조하세요. 자세한 내용은 Xamarin 설명서의 Xamarin.iOS의 향상된 사용자 알림을 참조하세요.

New Stuff!