Skip to content

딥링크 푸시 관련

jinsang edited this page Aug 29, 2023 · 2 revisions

구성


딥링크

  • 에이스카운터는 트래킹 링크를 생성하는 기능을 제공하지 않습니다.
  • 과거 딥링크, 유니버셜 링크, 앱링크 제작 방법은 각 플랫폼 가이드 참조 바랍니다.
  • 에이스카운터는 마케팅 코드를 제공해 딥링크로 앱 실행 또는 포그라운드 됐을때 SDK 가 함께 실행되면서 마케팅 코드를 NHN DATA 에이스카운터 서버로 전송합니다.
    • SDK 전송 후 분석통계 > 마케팅효과 > 앱마케팅 에서 약 40분정도 분석 간격뒤에 확인 가능합니다.
    • 설정 > 캠페인 > 앱마케팅 에서 추가 완료된 마케팅 코드에 대해서만 분석통계 화면에서 확인 가능합니다.
  • 다음 연동 예제에서 딥링크 수신을 위해 "react-native": "0.71.10" 를 사용했습니다.

메서드

static send(value: ACParams, callback: (error?: object, result?: ACEResponseToCaller) => void): void;
static send(value: ACParams): Promise<ACEResponseToCaller>;

매개변수

  • ACParams.init(type: ParamType, value?: string): 이벤트 정보 전송에 사용되는 static 메서드
    • type: 이벤트 종류
      • 딥링크의 경우: ACParams.TYPE.DEEPLINK
  • params.keyword: http GET URL 형태의 파라미터를 기대하며, 최소 ? 또는 & 로 시작하는 query param 을 key, value 파싱합니다. (필수)
    • 보안을 이유로 또는 이미 동일한 key 를 사용중인 경우 앱에서 딥링크 수신 후 더미로 URL 포맷으로 생성 후 마케팅 코드를 kw 키의 값으로 설정 해주셔도 됩니다.
    • 예를 들어
      1. https://aceapp.acecounter.com/com.rnfornhndata?kw=00008E 링크가 클릭 될 경우
      2. 위 링크 문자열을 SDK가 params.keyword 로 전달받아 decodeURIComponent 로 1회 디코딩 합니다.
      3. query parmas 영역에서 에이스카운터의 마케팅 코드 key인 kw 키와 값 00008E 을/를 파싱해 NHN DATA 에이스카운터 서버로 전송합니다.
    • 아래 예제코드를 참고 해주세요.

예제코드

import { Linking } from 'react-native'
import { ACParams, ACS } from 'acecounter.sdk.react-native'

useEffect(() => {
  // 백그라운드 상태에서 딥링크
  const onLinkingEvent = async (event: { url: string }) => {
    if (event.url) {
      const params = ACParams.init(ACParams.TYPE.DEEPLINK)
      params.keyword = event.url == null ? undefined : event.url

      ACS.send(params)
        .then((response) => {
          if (response) {
            console.log('response: ' + JSON.stringify(response))
          }
          console.log('success sdk send')
        })
        .catch((err) => {
          if (err) {
            console.log('err: ' + JSON.stringify(err))
          }
        })
    }
  }
  Linking.addEventListener('url', onLinkingEvent)

  const getUrlAsync = async () => {
    // 포그라운드 상태에서 딥링크
    const initialUrl = await Linking.getInitialURL()
    console.log(`딥링크 확인::initialUrl: >>${initialUrl}<<`)

    const params = ACParams.init(ACParams.TYPE.DEEPLINK)
    params.keyword = initialUrl == null ? undefined : initialUrl

    ACS.send(params)
      .then((response) => {
        if (response) {
          console.log('response: ' + JSON.stringify(response))
        }
        console.log('success sdk send')
      })
      .catch((err) => {
        if (err) {
          console.log('err: ' + JSON.stringify(err))
        }
      })
  }

  getUrlAsync()
}, [])

푸시

  • 푸시 기능을 먼저 구현하시고, SDK를 연동합니다.
  • 앱이 완전 종료, 앱이 켜진 상황, 앱이 백그라운드된 상황에서도 아래 예제와 같이 API를 실행할 수 있도록 수정합니다.
  • 대시보드 > 설정(왼쪽 사이드 메뉴) > 캠페인 > 앱푸시 에서 캠페인 추가 후 코드보기로 "kw" : "00000X" 와 같이 확인할 수 있습니다.
    • SDK 내부에서는 { [key: string]: string } 타입인 RemoteMessage.data? 속성에서 kw 키의 값을 추출해 NHN DATA 에이스카운터 서버로 전송합니다.
  • 다음 연동 예제에서 푸시를 수신하기 위해 "@react-native-firebase/messaging": "^14.5.0" 를 사용했습니다.

메서드

static send(value: ACParams, callback: (error?: object, result?: ACEResponseToCaller) => void): void;
static send(value: ACParams): Promise<ACEResponseToCaller>;

매개변수

  • ACParams.init(type: ParamType, value?: string): 이벤트 정보 전송에 사용되는 static 메서드
    • type: 이벤트 종류
      • 푸시의 경우: ACParams.TYPE.PUSH
  • params.data: { [key: string]: string } 타입으로 FCM push 기능의 RemoteMessage.data? 속성과 동일합니다.
    • 아래 예제코드를 참고 해주세요.
  • params.push: FCM 외에 임의로 사용하는 푸시 기능에서 타입문제가 있으실 경우 kw key 값을 직접 추출해 string 타입으로 설정 가능합니다.
    • params.push 파라미터가 params.data 보다 우선순위가 높습니다.
    • params.push 파라미터가 존재할 경우 params.data 를 사용하지 않습니다.

예제코드

import messaging, {
  FirebaseMessagingTypes,
} from '@react-native-firebase/messaging'
import { ACParams, ACS } from 'acecounter.sdk.react-native'

...(중략)...

const params = ACParams.init(ACParams.TYPE.PUSH)
params.data = remoteMessage.data

ACS.send(params)
  .then((response) => {
    if (response) {
      console.log('response: ' + JSON.stringify(response))
    }
    console.log('success sdk send')
  })
  .catch((err) => {
    if (err) {
      console.log('err: ' + JSON.stringify(err))
    }
  })
import messaging, {
  FirebaseMessagingTypes,
} from '@react-native-firebase/messaging'
import { ACParams, ACS } from 'acecounter.sdk.react-native'

...(중략)...

const params = ACParams.init(ACParams.TYPE.PUSH)
// params.data 를 사용하지 않고 params.push 에 kw 값 평문 그대로 입력합니다.
params.push = '00000X'

ACS.send(params)
  .then((response) => {
    if (response) {
      console.log('response: ' + JSON.stringify(response))
    }
    console.log('success sdk send')
  })
  .catch((err) => {
    if (err) {
      console.log('err: ' + JSON.stringify(err))
    }
  })

Install Referrer

  • Install Referrer 기능을 먼저 구현하시고, SDK를 연동합니다.
  • https://play.google.com/store/apps/details?id=com.myapp&referrer=my_install_referrer 와 같이 referrer URL 을 사용해 앱을 설치 할 경우
    • SDK 내부에서는 string 타입인 my_install_referrerdecodeURIComponent(my_install_referrer) 와 같이 1회 디코딩 후 kw 키의 값을 추출해 NHN DATA 에이스카운터 서버로 전송합니다.
    • 예) https://play.google.com/store/apps/details?id=고객앱&referrer=kw%3D0000XX
  • 대시보드 > 설정(왼쪽 사이드 메뉴) > 캠페인 > 앱마케팅 에서 캠페인 추가 후 코드보기로 gc=YOUR_ACECOUNTER_GCODE&kw=0000XX 와 같이 확인할 수 있습니다.
  • 다음 연동 예제에서 Referrer 수신을 위해 "react-native-device-info": "^8.4.9" 를 사용했습니다.

메서드

static send(value: ACParams, callback: (error?: object, result?: ACEResponseToCaller) => void): void;
static send(value: ACParams): Promise<ACEResponseToCaller>;

매개변수

  • ACParams.init(type: ParamType, value?: string): 이벤트 정보 전송에 사용되는 static 메서드
    • type: 이벤트 종류
      • Referrer의 경우: ACParams.TYPE.REFERRER
  • params.keyword: kw=00008E 또는 kw%3D00008E 와 같은 포맷을 기대합니다. (필수)

예제코드

import DeviceInfo from 'react-native-device-info'
import { ACParams, ACS } from 'acecounter.sdk.react-native'

...(중략)...

if (Platform.OS === 'android') {
  DeviceInfo.getInstallReferrer()
    .then((installReferrer) => {
      const params = ACParams.init(ACParams.TYPE.REFERRER)
      params.keyword = installReferrer
      ACS.send(params)
        .then((response) => {
          if (response) {
            console.log('response: ' + JSON.stringify(response))
          }
          console.log('success sdk send')
        })
        .catch((err) => {
          if (err) {
            console.log('err: ' + JSON.stringify(err))
          }
        })
    })
    .catch((e) => {
      console.log(`installReferrer::e: ${JSON.stringify(e)}`)
    })
}