콘텐츠로 건너뛰기

Android SDK 기본 통합 가이드

이 섹션에서는 Pushwoosh SDK를 Android 애플리케이션에 통합하는 방법에 대한 정보를 제공합니다.

전제 조건

Anchor link to

Pushwoosh Android SDK를 앱에 통합하려면 다음이 필요합니다:

통합 단계

Anchor link to

1. Firebase Cloud Messaging 설정

Anchor link to

먼저 Android 프로젝트를 Firebase에 연결합니다:

  • Android Studio에서 프로젝트를 엽니다
  • Tools > Firebase > Cloud Messaging으로 이동하여 “Set up Firebase Cloud Messaging”을 클릭합니다
  • 마법사 지침을 따릅니다. 마지막 단계에서 마법사가 필요한 종속성을 build.gradle 파일에 추가합니다

2. Pushwoosh SDK 추가

Anchor link to

애플리케이션의 build.gradle에 pushwoosh 라이브러리 종속성을 추가합니다:

build.gradle
implementation 'com.pushwoosh:pushwoosh-firebase:6.+'

”+“를 현재 버전의 Pushwoosh Android SDK로 교체하세요

3. AndroidManifest.xml에 Pushwoosh 메타데이터 추가

Anchor link to

AndroidManifest.xml 파일을 열고 <application> 태그 안에 다음 메타데이터를 추가합니다:

<meta-data android:name="com.pushwoosh.appid" android:value="__YOUR_APP_CODE__" />
<meta-data android:name="com.pushwoosh.senderid" android:value="@string/fcm_sender_id" />
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />

여기서:

  • com.pushwoosh.appid는 Pushwoosh 애플리케이션 코드입니다
  • com.pushwoosh.apitokenPushwoosh Device API Token입니다

중요: Pushwoosh Control Panel에서 토큰이 올바른 앱에 액세스할 수 있도록 하세요. 자세히 알아보기

com.pushwoosh.senderid를 설정하려면 프로젝트의 res/values/strings.xml 파일에 fcm_sender_id를 추가하세요:

res/values/strings.xml
<resources>
<string name="fcm_sender_id">__YOUR_FCM_SENDER_ID__</string>
</resources>

4. 초기화 코드

Anchor link to

초기화 로직에 이 코드를 추가하여 푸시 알림을 등록합니다:

Pushwoosh.getInstance().registerForPushNotifications()

5. 프로젝트 실행

Anchor link to
  1. 프로젝트를 빌드하고 실행합니다.
  2. Pushwoosh Control Panel로 이동하여 푸시 알림을 보냅니다.
  3. 앱에서 알림을 볼 수 있습니다.

확장 통합

Anchor link to

이 단계에서는 이미 SDK를 통합했으며 푸시 알림을 보내고 받을 수 있습니다. 이제 핵심 기능을 살펴보겠습니다

푸시 알림

Anchor link to

Pushwoosh SDK에는 푸시 알림 처리를 위해 설계된 두 가지 콜백이 있습니다:

  • onMessageReceived: 이 메서드는 푸시 알림을 수신할 때 호출됩니다.
  • onMessageOpened: 이 메서드는 사용자가 알림과 상호 작용(열기)할 때 호출됩니다.

이러한 콜백을 통해 개발자는 애플리케이션 내에서 푸시 알림 수신 및 사용자 상호 작용을 관리할 수 있습니다:

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_service_extension"
android:value="com.your.package.YourNotificationServiceExtension" />
import android.util.Log
import com.pushwoosh.notification.NotificationServiceExtension
import com.pushwoosh.notification.PushMessage
class YourNotificationServiceExtension : NotificationServiceExtension() {
override fun onMessageReceived(data: PushMessage): Boolean {
Log.d("Pushwoosh", "onMessageReceived: ${data.toJson()}")
return false
}
override fun onMessageOpened(message: PushMessage) {
Log.d("Pushwoosh", "onMessageOpened: ${message.toJson()}")
}
}

사용자 구성

Anchor link to

개별 사용자 행동 및 선호도에 초점을 맞춤으로써 개인화된 콘텐츠를 제공하여 사용자 만족도와 충성도를 높일 수 있습니다

import com.pushwoosh.Pushwoosh
import com.pushwoosh.tags.TagsBundle
import java.util.Date
class Registration {
public void afterUserLogin(User user) {
Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Set user ID
if (user.getUserId() != null) {
pushwoosh.setUserId(user.getUserId())
}
// Set user email
if (user.getEmail() != null) {
pushwoosh.setEmail(user.getEmail())
}
// Setting additional user information as tags for Pushwoosh
if (user.getUserDetails() != null) {
val details = user.getUserDetails()
val tagsBuilder = TagsBundle.Builder()
if (details.getAge() != null) {
tagsBuilder.putInt("age", details.getAge())
}
if (details.getUserName() != null) {
tagsBuilder.putString("name", details.getUserName())
}
if (details.lastLoginDate() != null) {
tagsBuilder.putDate("last_login", details.getLastLoginDate())
}
// Build and send tags
val tags = tagsBuilder.build()
if (!tags.isEmpty()) {
pushwoosh.setTags(tags)
}
}
}
}

Tag는 사용자 또는 기기에 할당된 키-값 쌍으로, 선호도나 행동과 같은 속성을 기반으로 세분화를 허용하여 타겟 메시징을 가능하게 합니다.

import com.pushwoosh.Pushwoosh
import com.pushwoosh.tags.TagsBundle
import java.util.List
class UpdateUser {
public void afterUserUpdateProfile(User user) {
val pushwoosh = Pushwoosh.getInstance()
val tagsBuilder = TagsBundle.Builder()
// Set list of favorite categories
if (user.favoriteCategories != null && user.favoriteCategories.isNotEmpty()) {
tagsBuilder.putList("favorite_categories", user.getFavoriteCategories())
}
// Set payment information
tagsBuilder.putBoolean("is_subscribed", user.isSubscribed())
tagsBuilder.putString("payment_status", user.getPaymentStatus())
tagsBuilder.putString("billing_address", user.getBillingAddress())
// Build and send tags
pushwoosh.setTags(tagsBuilder.build())
}
}

Event는 행동을 분석하고 해당 메시지나 작업을 트리거하기 위해 추적할 수 있는 앱 내의 특정 사용자 작업 또는 발생입니다

import com.pushwoosh.Pushwoosh
import com.pushwoosh.inapp.InAppManager
import com.pushwoosh.tags.TagsBundle
import java.util.Date
class Registration {
public void afterUserLogin(User user) {
if (user.getUserName() != null && user.getLastLoginDate() != null) {
val attributes = TagsBundle.Builder()
.putString("name", user.getUserName())
.putDate("last_login", user.getLastLoginDate())
.build()
InAppManager.getInstance().postEvent("login", attributes)
}
}
public void afterUserPurchase(User user, Product product) {
Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Track purchase event
val purchaseAttributes = TagsBundle.Builder()
.putString("product_id", product.getId())
.putString("product_name", product.getName())
.putDouble("price", product.getPrice())
.putInt("quantity", product.getQuantity())
.build()
InAppManager.getInstance().postEvent("purchase", purchaseAttributes)
// Set user tags
val tagsBuilder = TagsBundle.Builder()
tagsBuilder.putDate("last_purchase_date", Date())
val lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice()
tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend())
pushwoosh.setTags(tagsBuilder.build())
}
}

Rich Media

Anchor link to

Rich Media는 사용자 참여를 향상시키기 위해 알림 및 인앱 메시지에 사용되는 이미지, 비디오 또는 HTML과 같은 대화형 멀티미디어 콘텐츠를 의미합니다

Modal Rich Media 기능을 활성화하려면 애플리케이션의 AndroidManifest.xml 파일에 다음 메타데이터 항목을 추가하여 구성해야 합니다:

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.rich_media_type"
android:value="Modal" />
import android.util.Log
import com.pushwoosh.richmedia.RichMedia
import com.pushwoosh.richmedia.RichMediaManager
import com.pushwoosh.richmedia.RichMediaPresentingDelegate
import com.pushwoosh.inapp.view.config.ModalRichmediaConfig
import com.pushwoosh.inapp.view.config.enums.*
class MainActivity : AppCompatActivity(), RichMediaPresentingDelegate {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
RichMediaManager.setDelegate(this)
// Configure the modal rich media
val config = ModalRichmediaConfig()
.setViewPosition(ModalRichMediaViewPosition.BOTTOM)
.setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP)
.setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN)
// Apply the configuration
RichMediaManager.setDefaultRichMediaConfig(config)
}
override fun shouldPresent(richMedia: RichMedia): Boolean {
Log.d("Pushwoosh", "Rich media will be presented with: ${richMedia.content}")
return true
}
override fun onPresent(richMedia: RichMedia) {
Log.d("Pushwoosh", "Rich media has been presented: ${richMedia.content}")
}
override fun onClose(richMedia: RichMedia) {
Log.d("Pushwoosh", "Rich media has been closed: ${richMedia.content}")
}
override fun onError(richMedia: RichMedia, pushwooshException: PushwooshException) {
Log.e("Pushwoosh", "Failed to present rich media: ${richMedia.content}. Error: ${pushwooshException.message}")
}
}

문제 해결

Anchor link to

통합 과정에서 문제가 발생하면 지원 및 커뮤니티 섹션을 참조하세요.