SDK 설치 및 API 적용

Push 발송을 위한 SDK 설치 및 적용을 설명합니다.

SDK 설치 및 초기화

SDK 설치

프로젝트 수준의 build.gradle

프로젝트의 build.gradle ( root 파일 ) 에 아래와 같이 repository 주소를 추가해주세요.

...
allprojects {
    repositories {
        google()
        mavenCentral()
        /* wisetracker sdk repository config */
        maven {
            def endPoint = "https://analytics.wisetracker.co.kr/console/android/sdk/github/credentials.do"
            url = uri(new URL(endPoint+'?name=URI').text)
            credentials {
                username = new URL(endPoint+'?name=USER').text
                password = new URL(endPoint+'?name=TOKEN').text
            }
        }
    }
}
...
buildscript {
  repositories {
    google()
    mavenCentral()
  }
  dependencies {
    ...
    /* Google services */
    classpath 'com.google.gms:google-services:4.3.10'  // Google Services plugin
    ...
  }
}

Android 13 이상의 버전에서 푸시 알림 권한 획득을 위한 설정

프로젝트 수준 혹은, app 수준 "build.gradle"의 "targetSdkVersion = 33" 이상이어야 합니다.

buildscript {
    ext {
        ...
        targetSdkVersion = 33
        ...

app모듈 수준의 build.gradle

프로젝트의 app/build.gradle 파일에 있는 dependencies에 아래와 같이 Wisetracker SDK를 추가해주세요.

이 때, Java와 Kotlin에 따라 이용하는 모듈명이 달라집니다.

...
// Add the following line:
apply plugin: 'com.google.gms.google-services'  // Google Services plugin
...

android {
  ...
}
...
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ....
    // SDK 적용
    implementation "com.sdk.wisetracker:base_module:latest.release"
    implementation "com.sdk.wisetracker:new_dot_module:latest.release"
    
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:29.0.0')
    
    // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-messaging'
}
...

AuthorizationKey 등록

app/res/values/strings.xml

프로젝트의 app/res/values/strings.xml 파일에 아래 코드를 추가합니다. 추가한 코드 중 3번 라인 serviceNumber의 value를 올바른 값으로 변경해야 합니다.

...
<!--
  // =======================================================
  // 이 내용은 Wisetracker 기본 SDK가 이미 적용된 경우에는 새로 적용할
  // 필요가 없습니다.  메시징 서비스만 이용하는 경우 참조해주세요.
  // =======================================================
-->
<string-array name="dotAuthorizationKey">
    <item name="useMode">1</item>
    <item name="serviceNumber">xxxxx</item>
    <item name="expireDate">14</item>
    <item name="isDebug">false</item>
    <item name="isInstallRetention">true</item>
    <item name="isFingerPrint">true</item>
    <item name="accessToken"></item>
</string-array>
...

대시보드 화면 좌측 메뉴에서 "서비스 설정 > 어플리케이션 설정"화면에서 "서비스 번호"를 복사하여

"app/res/values/strings.xml"파일 3번 라인 serviceNumber의 value로 입력해주세요.

HTTP 통신 허용

프로젝트의 Target API가 API Level 28 이상일 경우에 적용하는 설정입니다. 아래와 같이 HTTP 통신을 허용하는 두 가지 설정을 추가해주세요. 하나는 "AndroidManifest.xml"설정이고 다른 하나는 "network_security_config.xml"파일을 새로 만드는 것입니다. // ======================================================= // 이 내용은 Wisetracker 기본 SDK가 이미 적용된 경우에는 새로 적용할 // 필요가 없습니다. 메시징 서비스만 이용하는 경우 참조해주세요. // =======================================================

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:networkSecurityConfig="@xml/network_security_config"
    android:theme="@style/AppTheme">
...

app/res/xml/network_security_config.xml

해당 위치에 "network_security_config.xml"파일을 새로 생성합니다.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">trk.analytics.wisetracker.co.kr</domain>
    </domain-config>
</network-security-config>

MainActivity 찾기

MainActivity에 구현되어야 하는 내용들을 설명하기 전에 내 앱의 Main 은 어떤 Activity 인지 알아야 합니다. 아래 구현되는 내용의 상당 부분은 MainActivity를 대상으로 합니다.

MainActivity는 앱이 실행될 때 처음으로 시작되는 위치를 가리키며 "AndroidManifest.xml"파일에 아래와 같은 "intent-filter"가 적용된 Activity입니다.

<!--
  // =======================================================
  // 아래와 같은 "intent-filter"가 적용된 activity가 Main입니다.
  // 아래 "AndroidManifest.xml"내용을 참조해주세요.
  // =======================================================
-->
<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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>

초기화

Application을 상속받는 클래스가 아닌 Activity를 상속받는 기본 화면의 onCreate() 메쏘드에 적용해 주세요

MainActivity

import com.sdk.wisetracker.new_dot.open.DOT;

public class MainActivity extends AppCompatActivity {
  ...
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    ...
    // =======================================================
    // 이 내용은 Wisetracker 기본 SDK가 이미 적용된 경우에는 새로 적용할
    // 필요가 없습니다.  메시징 서비스만 이용하는 경우 참조해주세요.
    // =======================================================
    // SDK 호출
    DOT.initialization(this);
    ...
  }
  ...
}

PushMessage API 적용

Device Token 수집

푸시 메시지를 보내기 위해서는 우선 푸시 토큰을 수집해야 합니다. 우선 Activity 수준에서 푸시 토큰을 수집할 수 있도록 아래와 같이 설정합니다.

MainActivity

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 메시지 수신을 위한 설정
        // =======================================================
        ...
    }
    ...
}

FirebaseMessagingService를 상속받은 FcmService.java 파일을 새로 생성하고 푸시 토큰을 수집하도록 아래와 같이 설정합니다.

FcmService

import com.google.firebase.messaging.FirebaseMessagingService;
import com.sdk.wisetracker.new_dot.open.DOT;

public class FcmService extends FirebaseMessagingService {
    // =======================================================
    // Start : Push 토큰 수집 <-- 새로 추가된 부분
    // =======================================================
    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        // call Wisetracker API
        DOT.setPushToken(token);
    }
    // =======================================================
    // End : Push 토큰 수집
    // =======================================================
}

AndroidManifest

  1. FcmService.java 파일을 서비스로 등록합니다.

  2. 푸시 알림 권한을 선언합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.support.wisetracker">
    
    <!--
      // ==================================================
      // Wisetracker SDK Push: 푸시 알림 권한을 선언합니다. <-- 새로 추가된 부분
      // ==================================================
    -->
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

  <application
      ...>
    ...
    <!--
      // ==================================================
      // Start : SDK FCM 서비스 적용 <-- 새로 추가된 부분
      // ==================================================
    -->
    <service
        android:name=".FcmService"
        android:exported="false">
      <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
      </intent-filter>
    </service>
    <!--
      // ==================================================
      // End : SDK FCM 서비스 적용
      // ==================================================
    -->
    ...
  </application>

</manifest>

푸시메시지 클릭 측정

푸시 메시지를 클릭하는 것을 측정하기 위해 푸시 메시지를 통해 진입하는 최초ActivitysetPushClick을 추가합니다.

아래 MainActivity 에 해당하는 Activity 는 "AndroidManifest.xml"에 아래와 같이 Main action 으로 지정된 Activity에 적용되어야 합니다. 대부분의 경우, MainActivity 이나 앱 개발에 따라 다릅니다.

MainActivity

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 메시지 클릭 처리 <-- 새로 추가된 부분 (1/2)
    // =======================================================
    DOT.setPushClick(this, getIntent());
    // =======================================================
    // End : Push 메시지 클릭 처리
    // =======================================================
    ...
  }
  ...
  
  // =======================================================
  // Start : Push 메시지 클릭 처리 <-- 새로 추가된 부분 (2/2)
  // =======================================================
  @Override
  protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // 푸시 메시지를 클릭할 때의 처리
    DOT.setPushClick(this, intent);
    ...
  }
  // =======================================================
  // End : Push 메시지 클릭 처리
  // =======================================================
  ...
}

푸시 수신동의

푸시발송은 기본 적용에서는 "수신거부"입니다. 아래 링크를 참조하여 화면에서 수신동의/거부를 진행 후 해당 데이터를 "태깅"작업을 통해 남겨주세요.

수신 동의 여부 기록

축하합니다 🎉

이제 Android SDK 설정이 완료되었습니다.

Last updated