콘텐츠로 건너뛰기

Android SDK 사용자 정의

딥링크를 처리할 액티비티에 scheme, host, pathPrefix 파라미터와 함께 <data> 태그를 추가하세요.

<activity
android:name=".PromoActivity"
android:label="PromoActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.pushwoosh"
android:host="promotion"
android:pathPrefix="" />
</intent-filter
</activity>

위 예시에서 딥링크는 PromoActivity를 엽니다. 아래의 기본 구현은 단순화를 위해 프로모션 ID 값으로 알림을 표시합니다. 애플리케이션에서는 분명히 더 유용한 작업을 수행할 수 있습니다!

public class PromoActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.deep_link);
setTitle("Deep link activity");
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
if (TextUtils.equals(action, Intent.ACTION_VIEW))
{
openUrl(data);
}
}
private void openUrl(Uri uri)
{
String promoId = uri.getQueryParameter("id");
Toast.makeText(getApplicationContext(), promoId, Toast.LENGTH_LONG).show();
}
}

인앱 구매 추적

Anchor link to

Customer Journeys에서 인앱 구매를 추적하려면 다음 메서드를 호출하여 구매 정보를 Pushwoosh로 보내도록 구성하세요:

Pushwoosh.getInstance().sendInappPurchase(@NonNull String sku, @NonNull BigDecimal price, @NonNull String currency);

지오존 푸시 알림

Anchor link to

지오존 푸시를 사용하려면 com.pushwoosh:pushwoosh-location 라이브러리를 추가하고 다음을 호출하세요:

PushwooshLocation.startLocationTracking();

AndroidManifest.xml에 필요한 권한을 포함하세요:

<manifest ... >
<!-- Required for geolocation-based push notifications -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Required for precise location tracking -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Required for background location access on Android 10 (API level 29) and higher -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Pushwoosh와 함께 로컬 알림 사용하기

Anchor link to

Pushwoosh 로컬 알림 API를 사용하는 경우, AndroidManifest.xml에 RECEIVE_BOOT_COMPLETED 권한을 추가하세요:

AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>x

Android에서 배지 번호 사용하기

Anchor link to

Pushwoosh는 다음 Android 런처에서 앱 아이콘 바로 가기에 배지 번호 설정을 지원합니다:
Sony, Samsung, LG, HTC, ASUS, ADW, APEX, NOVA, HUAWEI, ZUK, OPPO.
이 기능을 사용하려면 애플리케이션에 com.pushwoosh:pushwoosh-badge 라이브러리를 추가하기만 하면 됩니다.

사용자 정의 액티비티 열기

Anchor link to

푸시 알림에 응답하여 특정 액티비티를 시작하려면 해당 액티비티에 다음 인텐트 필터를 추가하세요:

AndroidManifest.xml
<activity android:name="YourActivity">
<intent-filter>
<action android:name="${applicationId}.MESSAGE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

로그 레벨 제어

Anchor link to

디버깅 및 통합을 돕기 위해 SDK는 기본적으로 모든 요청을 콘솔에 출력합니다. 프로덕션 빌드를 준비할 때, AndroidManifest.xml에 com.pushwoosh.log_level 메타데이터를 “ERROR” 값으로 추가하세요. 이렇게 하면 오류에 대한 정보만 콘솔에 출력됩니다. 다른 옵션은 다음 중 하나일 수 있습니다:

NONE - SDK에서 로그 없음
ERROR - 콘솔에 오류만 표시
WARN - 경고도 표시
INFO - 정보 메시지 표시
DEBUG - 디버그 정보까지 표시
NOISE - SDK가 출력할 수 있는 모든 것과 그 이상

AndroidManifest.xml
<meta-data android:name="com.pushwoosh.log_level" android:value="ERROR" />

Proguard 사용하기

Anchor link to

Proguard를 사용할 때 다음 옵션을 추가하세요:

proguard-rules.pro
-keep class com.pushwoosh.** { *; }
-dontwarn com.pushwoosh.**

Proguard에 관한 Google Play Services 라이브러리 요구 사항은 여기를 참조하세요:
https://developers.google.com/android/guides/setup

알림 열기 동작 사용자 정의

Anchor link to

푸시 알림의 결과로 표시할 액티비티를 프로그래밍 방식으로 선택해야 하는 경우, 사용자 정의 NotificationServiceExtension을 생성하고 com.pushwoosh.notification_service_extension 값 아래의 메타데이터에 NotificationServiceExtension의 정규화된 클래스 이름을 포함할 수 있습니다.

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_service_extension"
android:value="com.your.package.YourNotificationServiceExtension" />
YourNotificationServiceExtension.java
public class YourNotificationServiceExtension extends NotificationServiceExtension {
@Override
protected void startActivityForPushMessage(PushMessage message) {
// super.startActivityForPushMessage()는 기본 런처 액티비티 또는
// ${applicationId}.MESSAGE 액션으로 표시된 액티비티를 시작합니다.
// 이 동작을 재정의하려면 간단히 호출하지 마세요.
// super.startActivityForPushMessage(message);
// 대신 사용자 정의 액티비티를 시작합니다:
Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (선택 사항) 알림 데이터를 액티비티로 전달
launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent);
}
}

푸시 알림 사용자 정의

Anchor link to

푸시 알림의 뷰를 사용자 정의하려면 사용자 정의 팩토리를 생성해야 합니다. 사용자 정의 NotificationFactory를 생성하고 com.pushwoosh.notification_factory 값 아래의 메타데이터에 NotificationFactory의 정규화된 클래스 이름을 포함할 수 있습니다.

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_factory"
android:value="com.your.package.YourNotificationFactory" />
YourNotificationFactory
public class YourNotificationFactory extends PushwooshNotificationFactory {
@Override
public Notification onGenerateNotification(@NonNull PushMessage pushMessage) {
if (customNotification) {
// TODO: 사용자 정의 알림 생성 및 반환
}
// 기본 Pushwoosh 알림 반환
return super.onGenerateNotification(pushMessage);
}
}

그룹 요약 사용자 정의

Anchor link to

그룹 요약의 모양을 사용자 정의하려면 사용자 정의 팩토리를 생성하세요. 사용자 정의 SummaryNotificationFactory를 생성하고 com.pushwoosh.summary_notification_factory 값 아래의 메타데이터에 SummaryNotificationFactory의 정규화된 클래스 이름을 포함할 수 있습니다.

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.summary_notification_factory"
android:value="com.your.package.YourSummaryNotificationFactory" />
YourSummaryNotificationFactory
public class YourSummaryNotificationFactory extends PushwooshSummaryNotificationFactory {
@Override
public String summaryNotificationMessage(int notificationsAmount) {
// 원하는 메시지 반환
return super.summaryNotificationMessage(notificationsAmount);
}
@Override
public int summaryNotificationIconResId() {
// 원하는 아이콘 리소스 ID 반환
return super.summaryNotificationIconResId();
}
}

프라이빗 엔드포인트 URL

Anchor link to

Pushwoosh는 Custom Plan 구독 고객을 위해 프라이빗 엔드포인트를 제공합니다. Android SDK용 프라이빗 엔드포인트를 설정하려면 AndroidManifest.xml 파일에 다음을 추가해야 합니다:

AndroidManifest.xml
<meta-data android:name="com.pushwoosh.base_url" android:value="PUSHWOOSH_PRIVATE_ENDPOINT_URL_PROVIDED" />

리치 미디어 큐 생성

Anchor link to

동시에 표시할 여러 리치 미디어 페이지가 있는 경우(예: 둘 이상의 인앱에 대한 트리거 이벤트가 동시에 발생하거나, 다른 트리거 이벤트가 발생할 때 이미 리치 미디어 페이지가 표시되고 있는 경우), 리치 미디어 페이지 표시를 위한 큐를 설정할 수 있습니다. 큐를 생성하려면 프로젝트에 다음 코드를 추가하세요:

Application.java
package com.pushwoosh.testingapp;
import com.pushwoosh.RichMediaManager;
import com.pushwoosh.exception.PushwooshException;
import com.pushwoosh.richmedia.RichMediaPresentingDelegate;
import com.pushwoosh.richmedia.RichMedia;
import com.pushwoosh.internal.utils.PWLog;
import java.util.ArrayDeque;
import java.util.concurrent.locks.ReentrantLock;
public class DefaultRichMediaPresentingDelegate implements RichMediaPresentingDelegate {
private final String TAG = DefaultRichMediaPresentingDelegate.class.getSimpleName();
private ArrayDeque<RichMedia> richMediaQueue = new ArrayDeque<>();
private RichMedia currentRichMedia = null;
private ReentrantLock reentrantLock;
public DefaultRichMediaPresentingDelegate() {
PWLog.noise(TAG, "new DefaultRichMediaPresentingDelegate:" + this);
reentrantLock = new ReentrantLock();
}
@Override
public boolean shouldPresent(RichMedia richMedia) {
PWLog.noise(TAG, "shouldPresent:" + richMedia);
if (currentRichMedia == null) {
PWLog.noise(TAG, "currentRichMedia is null");
}
if (richMedia.isLockScreen()) {
PWLog.noise(TAG, "isLockScreen is true");
return true;
}
try {
reentrantLock.lock();
if (currentRichMedia == null) {
PWLog.noise(TAG, "show:" + richMedia);
currentRichMedia = richMedia;
return true;
} else {
PWLog.noise(TAG, "add to queue:" + richMedia);
richMediaQueue.add(richMedia);
return false;
}
} finally {
reentrantLock.unlock();
}
}
@Override
public void onPresent(RichMedia richMedia) {
PWLog.noise(TAG, "onPresent" + richMedia);
}
@Override
public void onError(RichMedia richMedia, PushwooshException pushwooshException) {
PWLog.error(TAG, pushwooshException + " richMedia:"+richMedia.toString());
tryShowNextRichMediaThreadSafety();
}
@Override
public void onClose(RichMedia richMedia) {
PWLog.noise(TAG, "onClose:" + richMedia);
tryShowNextRichMediaThreadSafety();
}
private void tryShowNextRichMediaThreadSafety() {
try {
reentrantLock.lock();
tryShowNextRichMedia();
} finally {
reentrantLock.unlock();
}
}
private void tryShowNextRichMedia() {
if (!richMediaQueue.isEmpty()) {
currentRichMedia = richMediaQueue.poll();
PWLog.noise(TAG, "try manual show:" + currentRichMedia);
RichMediaManager.present(currentRichMedia);
} else {
PWLog.noise(TAG, "richMediaQueue is empty");
currentRichMedia = null;
}
}
}

사용자 정의 사운드 푸시

Anchor link to
  1. 오디오 파일을 적절한 폴더에 넣으세요. 네이티브 Android 프레임워크의 경우, 파일은 /app/src/main/res/raw 폴더에 위치해야 합니다.

2. 알림 채널을 생성하세요.

3. 푸시 메시지를 구성하는 동안 사운드를 선택하세요.

푸시 메시지에서 사용자 정의 사운드 선택

4. 메시지가 속할 알림 채널을 설정하세요. 이렇게 하려면 “Android root params” 필드에 다음을 지정하세요: {"pw_channel": "PUSH NOTIFICATION CHANNEL NAME"} // _여기에 사용자 정의 사운드가 있는 채널의 이름을 지정해야 합니다_

원격 API를 사용하는 경우, /createMessage API 요청 내에서 파라미터를 다음과 같이 설정하세요:

"android_root_params": {"pw_channel": "push"} // 여기에 사용자 정의 사운드가 있는 채널의 이름을 지정해야 합니다. 예를 들어, push.wav 사운드가 있는 알림의 경우 "push"입니다.
"android_sound": "push" // 여기에는 확장자 없이 파일 이름을 지정해야 합니다.

이러한 파라미터를 지정하여 푸시를 보내면, 선택한 사운드가 있는 알림 채널이 Android 8 이상을 사용하는 모든 기기에 생성됩니다.

이제 사용자 정의 사운드로 푸시를 보내려면 해당 사운드와 연결된 채널만 지정하면 됩니다.

사용자 정의 알림 사운드를 위한 Proguard 규칙

Anchor link to

앱이 코드 및 리소스 축소를 위해 proguard를 사용하는 경우, 사운드 파일을 그대로 유지하고 외부 라이브러리에서 사용할 수 있도록 하는 것이 중요합니다. build.gradleminifyEnabled = true 속성을 사용하는 경우, proguard-rules.pro에 다음 규칙을 추가하세요:

-keep public class your.package.name.R$raw {
*;
}

shrinkResources=true 속성을 사용하여 코드 축소 외에 앱의 리소스를 축소하는 경우, 유지하려는 리소스를 추가로 지정해야 합니다. 이렇게 하려면 아무 이름으로나 새 XML 파일을 만들고 프로젝트의 어딘가(예: res/xml)에 저장한 다음, resources 태그의 tools:keep 파라미터 아래에 리소스 이름을 지정하세요:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/*"
/>

Android SDK 메타데이터 플래그 전체 목록

Anchor link to

플래그를 설정하려면 application 태그 내의 AndroidManifest.xml 파일에 메타데이터 블록을 추가해야 합니다. 예를 들어, Pushwoosh 애플리케이션 ID를 설정하려면 AndroidManifest.xml 파일에 다음 코드를 추가하세요:

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.appid"
android:value="XXXXX-XXXXX" />
플래그설명가능한 값
com.pushwoosh.appidPushwoosh 애플리케이션 ID를 설정합니다.XXXXX-XXXXX
com.pushwoosh.senderidFirebase 프로젝트 발신자 ID를 설정합니다.123456789000
com.pushwoosh.log_level로깅 레벨을 설정합니다. 자세한 내용은 로그 레벨 제어를 참조하세요.NONE / ERROR / WARN / INFO / DEBUG (기본값) / NOISE
com.pushwoosh.base_urlPushwoosh 서버 기본 URL을 재정의합니다.https://cp.pushwoosh.com/json/1.3/ (기본값)
com.pushwoosh.notification_service_extension사용자 정의 NotificationServiceExtension. 자세한 내용은 알림 열기 동작 사용자 정의를 참조하세요.com.myapp.MyNotificationServiceExtension
com.pushwoosh.notification_factory

사용자 정의 NotificationFactory.

자세한 내용은 푸시 알림 사용자 정의를 참조하세요.

com.myapp.MyNotificationFactory
com.pushwoosh.summary_notification_factory사용자 정의 SummaryNotificationFactory.com.myapp.MySummaryNotificationFactory
com.pushwoosh.multi_notification_modetrue이면 알림이 그룹화됩니다. false이면 마지막으로 받은 알림만 표시됩니다.true / false (기본값)
com.pushwoosh.allow_server_communicationtrue이면 SDK가 Pushwoosh 서버로 네트워크 요청을 보낼 수 있습니다.true (기본값) / false
com.pushwoosh.handle_notifications_using_workmanagertrue이면 WorkManager가 알림을 처리하도록 설정됩니다.true / false (기본값)
com.pushwoosh.notification_icon사용자 정의 알림 (작은) 아이콘 리소스 이름. null이면 기본 애플리케이션 아이콘이 사용됩니다.res/drawable-xxhdpi-v11/notification_small_icon.png / null
com.pushwoosh.notification_icon_color알림 (작은) 아이콘 배경색.#FFFFFF
com.pushwoosh.allow_collecting_device_datatrue이면 SDK가 기기 데이터를 수집하여 Pushwoosh로 보낼 수 있습니다.true (기본값) / false
com.pushwoosh.allow_collecting_device_os_versiontrue이면 SDK가 기기 OS 버전을 수집하여 Pushwoosh로 보낼 수 있습니다.true (기본값) / false
com.pushwoosh.allow_collecting_device_localetrue이면 SDK가 기기 로케일을 수집하여 Pushwoosh로 보낼 수 있습니다.true (기본값) / false
com.pushwoosh.allow_collecting_device_modeltrue이면 SDK가 기기 모델을 수집하여 Pushwoosh로 보낼 수 있습니다.true (기본값) / false
com.pushwoosh.in_app_business_solutions_cappingpush-unregister 인앱이 하루에 표시될 수 있는 횟수를 제한합니다.1 (기본값), 2, …, n
com.pushwoosh.start_foreground_servicetrue이면 PushwooshLocation.startLocationTracking() 호출과 함께 Foreground Service가 시작됩니다.true / false (기본값)
com.pushwoosh.foreground_service_notification_text”com.pushwoosh.start_foreground_service” 키에 대해 Foreground Service가 시작될 때 생성되는 알림의 텍스트를 설정합니다.Work in progress (기본값)
com.pushwoosh.foreground_service_notification_channel_name”com.pushwoosh.start_foreground_service” 키에 대해 Foreground Service가 시작될 때 생성되는 알림의 채널 이름을 설정합니다.Foreground service (기본값)
com.pushwoosh.trusted_package_names지정된 패키지와 Pushwoosh HWID를 공유할 수 있도록 허용합니다.”com.mycompany.myapp1, com.mycompany.myapp2”

TTL(Time-To-Live)을 통해 푸시 알림 삭제하기

Anchor link to

TTL(Time-to-Live)을 사용하여 지정된 시간 후에 푸시 알림을 자동으로 삭제하려면 다음 단계를 따르세요:

  1. 사용자 정의 NotificationFactory를 생성합니다. 자세히 알아보기

  2. onGenerateNotification() 메서드에서 Notification.Builder 또는 NotificationCompat.Builder 클래스를 사용하여 알림을 생성하고 setTimeoutAfter 메서드를 호출합니다:

public class YourNotificationFactory extends PushwooshNotificationFactory {
@Override
public Notification onGenerateNotification(@NonNull PushMessage pushMessage) {
Notification.Builder builder = new Notification.Builder(getApplicationContext(), addChannel(pushData));
Notification notification = builder.setContentText(pushData.getMessage())
.setContentTitle(title)
.setContentText(text)
// 나머지 알림 생성 코드
.setTimeoutAfter(timeout) // 알림이 취소되기 전의 시간(밀리초)
.build();
}
}

피드백 공유하기

Anchor link to

여러분의 피드백은 더 나은 경험을 만드는 데 도움이 됩니다. SDK 통합 과정에서 문제가 발생하면 언제든지 알려주세요. 어려움을 겪으시면 주저하지 마시고 이 양식을 통해 의견을 공유해 주세요.