Wisetracker Docs
웹사이트블로그콘솔 바로가기도입 문의이용 문의
🧑‍💻 개발자 가이드
🧑‍💻 개발자 가이드
  • 와이즈트래커 개발자 가이드
  • quick start
    • 앱 광고 트래킹을 위한 필수 지식
    • SDK 설정 전 기초 진단
    • SDK 설정 후 체크리스트
      • Android
      • iOS
      • ReactNative
      • Flutter
      • Unity
      • Cordova
      • Cocos2d-x
      • Web
    • SDK 데이터 검증
    • 이벤트 발생 현황
  • SDK 연동
    • Android
      • SDK 삽입
      • 필수 이벤트 설정
      • App Link 설정
      • Android 12 ADID 변경사항
    • iOS
      • SDK 삽입
      • 필수 이벤트 설정
      • App Store '개인정보 세부 사항' 가이드
      • Universal Link 설정
    • HybridApp WebView
      • SDK 삽입
      • 필수 이벤트 설정
    • React Native
      • React Native 플러그인 연동
      • 인앱 분석 API
      • AOS 데이터 검증
      • iOS 데이터 검증
    • Flutter
      • Flutter 플러그인 연동
      • AOS 데이터 검증
      • iOS 데이터 검증
    • Unity
      • Unity 플러그인 연동
      • 인앱 이벤트 API
      • AOS 데이터 검증
      • iOS 데이터 검증
    • Website
      • Javascript SDK Integration
      • 웹사이트 이벤트 분석하기
    • CPC 광고 분석 연동
      • Web-To-App SDK 적용
      • App 으로 이동시키기
  • 앱심사 개인정보 처리 가이드
    • SDK 개인정보 처리 가이드
  • SDK 데이터 검증
    • Android 데이터 검증
    • iOS 데이터 검증
    • 웹사이트 데이터 검증
  • In-App Event
    • 인앱 이벤트 설정
      • 페이지 분석
      • 커스텀 차원(Custom Dimension)
    • 인앱 이벤트 리스트
      • Basic : 공통 이벤트
      • Messaging : 푸시/인앱 메시지
      • e-Commerce : 이커머스
      • Education : 교육
      • Travel : 여행 및 레저
      • Entertainment : 엔터테인먼트
      • Game : 게임
      • Fintech : 금융
      • Mobility : 모빌리티
    • 인앱 이벤트 태깅(Tagging)
  • Google Tag Manager 연동
    • 연동 방법
  • Server-to-Server 연동
    • 연동 방법
    • 연동 이벤트
    • 연동 데이터 요약
  • 푸시메세지 가이드
    • 앱 푸시메시지 연동
      • Android
        • FCM 인증서 설정
        • 대시보드 설정
        • SDK 설치 및 API 적용
        • 푸시 알림 데이터 이용
      • iOS
        • APNS 설정
        • 대시보드 설정
        • SDK 설치 및 API 적용
        • 푸시 알림 데이터 이용
      • React Native
        • 준비 사항 안내
        • Android 기초 설정
        • iOS 기초 설정
        • ReactNative 푸시메세지 설정
      • Flutter
        • 준비 사항 안내
        • Android 기초 설정
        • iOS 기초 설정
        • Flutter 푸시메세지 설정
    • 푸시 알림 데이터 이용
Powered by GitBook
On this page
  • 딥링크 데이터 이용시 주의사항
  • 앱이 포그라운드 상태일 때
  • jsonDict 에 포함된 데이터 Key/Value
  • 앱이 백그라운드 상태일 때

Was this helpful?

  1. 푸시메세지 가이드
  2. 앱 푸시메시지 연동
  3. Android

푸시 알림 데이터 이용

푸시 알림 메시지가 수신되거나 사용자에 의해 탭될 때 호출되는 메쏘드와 해당 상황에서 데이터를 추출하여 이용하는 방법에 대해 안내합니다.

앱이 포그라운드 상태일 때 화면에 알림 메시지가 보여지도록 구현하지 않은 이상 화면에 배너 형태로 알림 메시지가 보이지 않습니다.

앱이 포그라운드 상태인데 화면에 배너 형태로 알림 메시지가 보인다면 이미 고객님께서 알림 메시지가 보여지도록 구현한 것입니다. 이 경우, 해당 구현부분 상단에 아래의 내용을 참조하여 수정해주셔야 합니다.

알림 메시지가 보이지 않거나 Delegation 메쏘드가 구현되지 않은 경우에는 아래 내용 참고하셔서 해당 메쏘드를 추가하여 데이터를 추출할 수 있습니다.

딥링크 데이터 이용시 주의사항

딥링크 데이터를 이용할 때 아래와 같은 점에 유의해주세요.

  1. 앱이 Foreground상태일 때 딥링크 URL로 화면이 바로 이동하면 이용자가 당황스러울 수 있습니다. 이에 대해 기획단계부터 어떻게 할 것인지 고민해주세요. 보통은 로컬 노티피케이션을 한 번 더 띄우기도 합니다.

  2. 앱의 세 가지 상태 (Foreground, Background, Killed)에 따라 작동 매카니즘이 다릅니다. 간혹, 저희가 제시하는 메쏘드 호출이 되지 않는 경우에는 MainActivity의 onNewIntent() 메쏘드 구현부로 호출될 수 있습니다.

위에서 딥링크와 관련해서 안내드렸는데요, 푸시를 통해 전달되는 데이터를 이용하는 것에 모두 해당되는 내용입니다.

앱이 포그라운드 상태일 때

FirebaseMessagingService를 상속받아 구현한 FcmService 의 "onMessageReceived" 메쏘드가 호출됩니다.

// FirebaseMessagingService를 상속받아 구현한 FcmService
public class FcmService extends FirebaseMessagingService {
    // =======================================================
    // Start : Push 토큰 수집
    // =======================================================
    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        // call Wisetracker API
        DOT.setPushToken(token);
    }
    // =======================================================
    // End : Push 토큰 수집
    // =======================================================
    
    // =======================================================
    // Start : Push 메시지 수신
    // =======================================================
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {    
        super.onMessageReceived(remoteMessage);    
        // call Wisetracker API    
        DOT.setPushClick(getApplicationContext(), remoteMessage.toIntent());
        
        // =======================================================
        // Start : 필요한 데이터 추출하기 <-- 새로 추가된 부분
        // =======================================================
        Map<String, String> rootDict = remoteMessage.getData();
        String jsonDict = rootDict.get("RW_push_payload_WP");
        Log.d("PUSH", "jsonDict : " + jsonDict);
        // =================
        // intent 로부터 와이즈트래커를 통해 발송된 푸시 알림 메시지내부의 데이터를
        // 추출하는 방법을 예시로 들었습니다.
        // 여기서는 Gson 라이브러리를 사용했는데요,
        // 고객님이 사용하시는 JSON 라이브러리를 사용하시면 됩니다.
        // =================
        Map dict = new Gson().fromJson(bundle.getString("RW_push_payload_WP"), Map.class);
        if (dict != null) {
          String title = (String) dict.get("RW_push_payload_TT");
          String body = (String) dict.get("RW_push_payload_BD");
          String deepLink = (String) dict.get("RW_push_payload_deeplink");
          // =================
          // 여기에서 필요한 데이터를 추출했습니다.
          // 필요한 용도에 맞게 사용하시면 됩니다.
          // ex: deepLink 데이터를 이용하여 화면전환을 하실 수 있어요.
          // =================
          Log.d("PUSH", "title: " + title + ", body: " + body + ", deepLink: " + deepLink);
        } else {
          Log.d("PUSH", "dictionary was NULL, intent.getData(): " + intent.getData() + ", intent.getExtras(): " + intent.getExtras());
        }
        // =======================================================
        // End : 필요한 데이터 추출하기
        // =======================================================
    }
    // =======================================================
    // End : Push 메시지 수신
    // =======================================================
}
// FirebaseMessagingService를 상속받아 구현한 FcmService
class FcmService : FirebaseMessagingService() {
  // =======================================================
  // S: Push 토큰 수집
  // =======================================================
  override fun onNewToken(token: String) {
    super.onNewToken(token)
    // call Wisetracker API
    DOT.setPushToken(token)
  }
  // =======================================================
  // E: Push 토큰 수집
  // =======================================================
​
  // =======================================================
  // S: Push 메시지 수신
  // =======================================================
  override fun onMessageReceived(remoteMessage: RemoteMessage) {
    super.onMessageReceived(remoteMessage)
    // call Wisetracker API
    DOT.setPushClick(applicationContext, remoteMessage.toIntent())
    
    // =======================================================
    // S: 필요한 데이터 추출하기 <-- 새로 추가된 부분
    // =======================================================
    val rootDict = remoteMessage.data
    val jsonDict = rootDict["RW_push_payload_WP"]
    Log.d("PUSH", "jsonDict : " + jsonDict)
    val dict = Gson().fromJson<Map<*, *>>(
      jsonDict,
      MutableMap::class.java
    )
    if (dict != null) {
      val title = dict["RW_push_payload_TT"] as String?
      val body = dict["RW_push_payload_BD"] as String?
      val deepLink = dict["RW_push_payload_deeplink"] as String?
      // =================
      // 여기에서 필요한 데이터를 추출했습니다.
      // 필요한 용도에 맞게 사용하시면 됩니다.
      // ex: deepLink 데이터를 이용하여 화면전환을 하실 수 있어요.
      // =================
      Log.d("PUSH", "title: $title, body: $body, deepLink: $deepLink")
    } else {
      Log.d("PUSH", "dictionary was NULL, intent.getData(): " + intent.data + ", intent.getExtras(): " + intent.extras)
    }
    // =======================================================
    // E: 필요한 데이터 추출하기
    // =======================================================
  }
  // =======================================================
  // E: Push 메시지 수신
  // =======================================================
}

jsonDict 에 포함된 데이터 Key/Value

jsonDict 는 일반 문자열입니다. 해당 문자열은 JSON 형식으로 되어있으니 사용하시는 JSON Parser를 이용하여 JSON 객체로 전환하여 사용해주세요.

  • 최상위 객체의 구조

최상위 Payload 키
Payload 값
필수여부

RW_push_payload_WP

Sub객체 (아래 Sub객체 참조)

필수

  • Sub객체의 구조

Payload 키
Payload 값
필수여부

RW_push_payload_TT

메시지 타이틀

필수

RW_push_payload_BD

메시지 내용

필수

RW_push_payload_IM

이미지 URL

X

RW_push_payload_MV

유튜브 동영상 URL

X

RW_push_payload_deeplink

딥링크 URL

X

앱이 백그라운드 상태일 때

앱이 백그라운드이거나 Killed 된 상태인 경우, 위의 메쏘드가 호출되지 않습니다.

알림 메시지는 앱이 백그라운드 상태에서 알림 표시줄에 배너 형태 등으로 표시됩니다. 해당 알림 메시지를 탭하면 아래와 같은 메쏘드가 호출됩니다. 해당 메쏘드에서 데이터를 추출하여 사용합니다.

"AndroidManifest.xml" 에 아래와 같이 "" 설정된 activity의 "onCreate()" 가 실행됩니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.support.wisetracker">
​
  <application
      ...>
    ...
    <activity
        android:name=".MainActivity"
        android:exported="true"
        android:screenOrientation="fullSensor"
        android:theme="@style/Theme.SdkSample.NoActionBar">
      <!--
        // =======================================================
        // 아래와 같은 "intent-filter"가 적용된 activity가 Main입니다.
        // =======================================================
      -->
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    ...
  </application>
​
</manifest>

주로 "MainActivity.java" 가 될 것입니다.

public class MainActivity extends AppCompatActivity {
  ...
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // =======================================================
    // 이 내용은 Wisetracker 기본 SDK가 이미 적용된 경우에는 새로 적용할
    // 필요가 없습니다.  메시징 서비스만 이용하는 경우 참조해주세요.
    // =======================================================
    // SDK 호출
    DOT.initialization(this);
​
    // =======================================================
    // Start : Push 메시지 수신을 위한 설정
    // =======================================================
    FirebaseMessaging.getInstance().getToken()
        .addOnCompleteListener(new OnCompleteListener<String>() {
          @Override
          public void onComplete(@NonNull Task<String> task) {
            if (!task.isSuccessful()) {
              Log.w("FCM", "Fetching FCM registration token failed", task.getException());
              return;
            }
            // Get new FCM registration token
            String token = task.getResult();
            // 푸시 토큰 서버 전송
            DOT.setPushToken(token);
          }
        });
    // =======================================================
    // End : Push 메시지 수신을 위한 설정
    // =======================================================
​
    // =======================================================
    // Start : Push 메시지 클릭 처리
    // =======================================================
    DOT.setPushClick(this, getIntent());
    // =======================================================
    // End : Push 메시지 클릭 처리
    // =======================================================
   
    // =======================================================
    // Start : Push 메시지 데이터 추출 및 이용 <-- 새로 추가된 부분
    // =======================================================
    Intent intent = getIntent();
    if (intent != null) {
      Bundle bundle = intent.getExtras();
      if (bundle != null) {
        // =================
        // intent 로부터 와이즈트래커를 통해 발송된 푸시 알림 메시지내부의 데이터를
        // 추출하는 방법을 예시로 들었습니다.
        // 여기서는 Gson 라이브러리를 사용했는데요,
        // 고객님이 사용하시는 JSON 라이브러리를 사용하시면 됩니다.
        // =================
        Map dict = new Gson().fromJson(bundle.getString("RW_push_payload_WP"), Map.class);
        if (dict != null) {
          String title = (String) dict.get("RW_push_payload_TT");
          String body = (String) dict.get("RW_push_payload_BD");
          String deepLink = (String) dict.get("RW_push_payload_deeplink");
          // =================
          // 여기에서 필요한 데이터를 추출했습니다.
          // 필요한 용도에 맞게 사용하시면 됩니다.
          // ex: deepLink 데이터를 이용하여 화면전환을 하실 수 있어요.
          // =================
          Log.d("PUSH", "title: " + title + ", body: " + body + ", deepLink: " + deepLink);
        } else {
          Log.d("PUSH", "dictionary was NULL, intent.getData(): " + intent.getData() + ", intent.getExtras(): " + intent.getExtras());
        }
      } else {
        Log.d("PUSH", "bundle was NULL");
      }
    } else {
      Log.d("PUSH", "intent was NULL");
    }
    // =======================================================
    // End : Push 메시지 데이터 추출 및 이용
    // =======================================================
    ...
  }
  ...
  
  // =======================================================
  // Start : Push 메시지 클릭 처리
  // =======================================================
  @Override
  protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // 푸시 메시지를 클릭할 때의 처리
    DOT.setPushClick(this, intent);
    ...
  }
  // =======================================================
  // End : Push 메시지 클릭 처리
  // =======================================================
  ...
}
class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    ...
    // =======================================================
    // 이 내용은 Wisetracker 기본 SDK가 이미 적용된 경우에는 새로 적용할
    // 필요가 없습니다.  메시징 서비스만 이용하는 경우 참조해주세요.
    // =======================================================
    // SDK 호출
    DOT.initialization(this)

    // =======================================================
    // S: Push 메시지 수신을 위한 설정
    // =======================================================
    FirebaseMessaging.getInstance().getToken()
      .addOnCompleteListener(OnCompleteListener<String?> { task ->
        if (!task.isSuccessful) {
          Log.w("FCM", "Fetching FCM registration token failed", task.exception)
          return@OnCompleteListener
        }

        // Get new FCM registration token
        val token = task.result

        // Log and toast
        DOT.setPushToken(token)
      })
    // =======================================================
    // E: Push 메시지 수신을 위한 설정
    // =======================================================

    // =======================================================
    // S: Push 메시지 클릭 처리 <-- 새로 추가된 부분
    // =======================================================
    DOT.setPushClick(this, intent)
    // =======================================================
    // E: Push 메시지 클릭 처리
    // =======================================================
    
    // =======================================================
    // S: Push 메시지 데이터 추출 및 이용 <-- 새로 추가된 부분
    // =======================================================
    val intent = intent
    if (intent != null) {
      val bundle = intent.extras
      if (bundle != null) {
        // =================
        // intent 로부터 와이즈트래커를 통해 발송된 푸시 알림 메시지내부의 데이터를
        // 추출하는 방법을 예시로 들었습니다.
        // 여기서는 Gson 라이브러리를 사용했는데요,
        // 고객님이 사용하시는 JSON 라이브러리를 사용하시면 됩니다.
        // =================
        val dict = Gson().fromJson<Map<*, *>>(
          bundle.getString("RW_push_payload_WP"),
          MutableMap::class.java
        )
        if (dict != null) {
          val title = dict["RW_push_payload_TT"] as String?
          val body = dict["RW_push_payload_BD"] as String?
          val deepLink = dict["RW_push_payload_deeplink"] as String?
          // =================
          // 여기에서 필요한 데이터를 추출했습니다.
          // 필요한 용도에 맞게 사용하시면 됩니다.
          // ex: deepLink 데이터를 이용하여 화면전환을 하실 수 있어요.
          // =================
          Log.d("PUSH", "title: $title, body: $body, deepLink: $deepLink")
        } else {
          Log.d("PUSH", "dictionary was NULL, intent.getData(): " + intent.data + ", intent.getExtras(): " + intent.extras)
        }
      } else {
        Log.d("PUSH", "bundle was NULL")
      }
    } else {
      Log.d("PUSH", "intent was NULL")
    }
    // =======================================================
    // E: Push 메시지 데이터 추출 및 이용
    // =======================================================
    ...
  }
  ...

  // =======================================================
  // S: Push 메시지 클릭 처리
  // =======================================================
  override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    // 푸시 메시지를 클릭할 때의 처리
    DOT.setPushClick(this, intent)
  }
  // =======================================================
  // E: Push 메시지 클릭 처리
  // =======================================================
  ...
}

앱을 구현하는 과정에서 설정/구현상의 이유로 위의 onNewIntent() 메쏘드에서 푸시 데이터를 꺼내야 할 수도 있습니다. 이는 테스트를 통해 onCreate() 메쏘드에서 처리해야 할지 아니면 onNewIntent() 메쏘드에서 처리해야 할지 판단해야 합니다.

PreviousSDK 설치 및 API 적용NextiOS

Last updated 2 years ago

Was this helpful?