คู่มือการผสานการทำงานพื้นฐานสำหรับ Android SDK
ส่วนนี้ประกอบด้วยข้อมูลเกี่ยวกับวิธีการผสานการทำงาน Pushwoosh SDK เข้ากับแอปพลิเคชัน Android ของคุณ
ข้อกำหนดเบื้องต้น
Anchor link toในการผสานการทำงาน Pushwoosh Android SDK เข้ากับแอปของคุณ คุณจะต้องมีสิ่งต่อไปนี้:
ขั้นตอนการผสานการทำงาน
Anchor link to1. ตั้งค่า Firebase Cloud Messaging
Anchor link toขั้นแรก เชื่อมต่อโปรเจกต์ Android ของคุณกับ Firebase:
- เปิดโปรเจกต์ของคุณใน Android Studio
- ไปที่ Tools > Firebase > Cloud Messaging และคลิก “Set up Firebase Cloud Messaging”
- ทำตามคำแนะนำของ wizard ในขั้นตอนสุดท้าย wizard จะเพิ่ม dependencies ที่จำเป็นลงในไฟล์
build.gradle
ของคุณ
2. เพิ่ม Pushwoosh SDK
Anchor link toเพิ่ม dependency ของไลบรารี pushwoosh ลงใน build.gradle ของแอปพลิเคชันของคุณ:
implementation 'com.pushwoosh:pushwoosh-firebase:6.+'
แทนที่ ”+” ด้วยเวอร์ชันปัจจุบันของ Pushwoosh Android SDK
3. เพิ่มเมทาเดตาของ Pushwoosh ไปยัง AndroidManifest.xml
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 Application Code ของคุณcom.pushwoosh.apitoken
คือ Pushwoosh Device API Token ของคุณ
สำคัญ: ตรวจสอบให้แน่ใจว่าได้ให้สิทธิ์โทเค็นในการเข้าถึงแอปที่ถูกต้องใน Pushwoosh Control Panel ของคุณ เรียนรู้เพิ่มเติม
ในการตั้งค่า com.pushwoosh.senderid
ให้เพิ่ม fcm_sender_id ไปยังไฟล์ res/values/strings.xml ของโปรเจกต์ของคุณ:
<resources> <string name="fcm_sender_id">__YOUR_FCM_SENDER_ID__</string></resources>
4. โค้ดสำหรับ Initialization
Anchor link toลงทะเบียนเพื่อรับการแจ้งเตือนแบบพุชโดยเพิ่มโค้ดนี้ลงใน logic การเริ่มต้น (initialization) ของคุณ:
Pushwoosh.getInstance().registerForPushNotifications()
5. รันโปรเจกต์
Anchor link to- บิวด์และรันโปรเจกต์
- ไปที่ Pushwoosh Control Panel และ ส่งการแจ้งเตือนแบบพุช
- คุณควรจะเห็นการแจ้งเตือนในแอป
การผสานการทำงานขั้นสูง
Anchor link toณ จุดนี้ คุณได้ผสานการทำงาน SDK เรียบร้อยแล้วและสามารถส่งและรับการแจ้งเตือนแบบพุชได้ ตอนนี้ เรามาสำรวจฟังก์ชันการทำงานหลักกัน
การแจ้งเตือนแบบพุช (Push notifications)
Anchor link toใน Pushwoosh SDK มี callback สองตัวที่ออกแบบมาเพื่อจัดการกับการแจ้งเตือนแบบพุช:
onMessageReceived
: เมธอดนี้จะถูกเรียกใช้เมื่อได้รับการแจ้งเตือนแบบพุชonMessageOpened
: เมธอดนี้จะถูกเรียกใช้เมื่อผู้ใช้มีปฏิสัมพันธ์กับ (เปิด) การแจ้งเตือน
callback เหล่านี้ช่วยให้นักพัฒนาสามารถจัดการกับการรับและการโต้ตอบของผู้ใช้กับการแจ้งเตือนแบบพุชภายในแอปพลิเคชันของตนได้:
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.your.package.YourNotificationServiceExtension" />
import android.util.Logimport com.pushwoosh.notification.NotificationServiceExtensionimport 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()}") }
}
import android.util.Log;import com.pushwoosh.notification.NotificationServiceExtension;import com.pushwoosh.notification.PushMessage;
public class YourNotificationServiceExtensionJava extends NotificationServiceExtension {
@Override public boolean onMessageReceived(PushMessage data) { Log.d("Pushwoosh", "onMessageReceived: " + data.toJson()); return false; }
@Override public void onMessageOpened(PushMessage message) { Log.d("Pushwoosh", "onMessageOpened: " + message.toJson()); }}
การกำหนดค่าผู้ใช้
Anchor link toการมุ่งเน้นไปที่พฤติกรรมและความชอบของผู้ใช้แต่ละรายจะช่วยให้คุณสามารถส่งมอบเนื้อหาที่ปรับให้เหมาะกับแต่ละบุคคลได้ ซึ่งนำไปสู่ความพึงพอใจและความภักดีของผู้ใช้ที่เพิ่มขึ้น
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public fun afterUserLogin(user: User) { val 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) } } }}
import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public 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) { UserDetails details = user.getUserDetails(); TagsBundle.Builder tagsBuilder = new TagsBundle.Builder();
if (details.getAge() != null) { tagsBuilder.putInt("age", details.getAge()); }
if (details.getUserName() != null) { tagsBuilder.putString("name", details.getUserName()); }
if (details.getLastLoginDate() != null) { tagsBuilder.putDate("last_login", details.getLastLoginDate()); }
// Build and send tags TagsBundle tags = tagsBuilder.build(); if (!tags.isEmpty()) { pushwoosh.setTags(tags); } } }}
แท็ก (Tags)
Anchor link toแท็กคือคู่ของคีย์-ค่า (key-value) ที่กำหนดให้กับผู้ใช้หรืออุปกรณ์ ช่วยให้สามารถแบ่งกลุ่มตามคุณลักษณะต่างๆ เช่น ความชอบหรือพฤติกรรม ทำให้สามารถส่งข้อความที่ตรงเป้าหมายได้
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.List
class UpdateUser { public fun 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()) }}
import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.List;
public class UpdateUser { public void afterUserUpdateProfile(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance(); TagsBundle.Builder tagsBuilder = new TagsBundle.Builder();
// Set list of favorite categories if (user.getFavoriteCategories() != null && !user.getFavoriteCategories().isEmpty()) { 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()); }}
อีเวนต์ (Events)
Anchor link toอีเวนต์คือการกระทำหรือเหตุการณ์ที่เกิดขึ้นโดยผู้ใช้ภายในแอป ซึ่งสามารถติดตามเพื่อวิเคราะห์พฤติกรรมและกระตุ้นให้เกิดการส่งข้อความหรือการกระทำที่สอดคล้องกัน
import com.pushwoosh.Pushwooshimport com.pushwoosh.inapp.InAppManagerimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public fun 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 fun afterUserPurchase(user: User, product: Product) { val 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()) }}
import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public class Registration {
public void afterUserLogin(User user) { if (user.getUserName() != null && user.getLastLoginDate() != null) { TagsBundle attributes = new TagsBundle.Builder() .putString("name", user.getUserName()) .putDate("last_login", user.getLastLoginDate()) .build();
Pushwoosh.getInstance().postEvent("login", attributes); } }
public void afterUserPurchase(User user, Product product) { Pushwoosh pushwoosh = Pushwoosh.getInstance();
// Track purchase event TagsBundle purchaseAttributes = new TagsBundle.Builder() .putString("product_id", product.getId()) .putString("product_name", product.getName()) .putDouble("price", product.getPrice()) .putInt("quantity", product.getQuantity()) .build();
Pushwoosh.getInstance().postEvent("purchase", purchaseAttributes);
// Set user tags TagsBundle.Builder tagsBuilder = new TagsBundle.Builder(); tagsBuilder.putDate("last_purchase_date", new Date()); double lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice(); tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend()); pushwoosh.setTags(tagsBuilder.build()); }}
Rich Media
Anchor link toRich Media หมายถึงเนื้อหาเชิงโต้ตอบและมัลติมีเดีย เช่น รูปภาพ วิดีโอ หรือ HTML ที่ใช้ในการแจ้งเตือนและข้อความในแอปเพื่อเพิ่มการมีส่วนร่วมของผู้ใช้
ในการเปิดใช้งานฟีเจอร์ Modal Rich Media คุณต้องกำหนดค่าในไฟล์ AndroidManifest.xml
ของแอปพลิเคชันของคุณโดยเพิ่มรายการเมทาเดตาต่อไปนี้:
<meta-data android:name="com.pushwoosh.rich_media_type" android:value="Modal" />
import android.util.Logimport com.pushwoosh.richmedia.RichMediaimport com.pushwoosh.richmedia.RichMediaManagerimport com.pushwoosh.richmedia.RichMediaPresentingDelegateimport com.pushwoosh.inapp.view.config.ModalRichmediaConfigimport 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}") }}
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.*;
public class MainActivity extends AppCompatActivity implements RichMediaPresentingDelegate {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RichMediaManager.setDelegate(this);
// Configure the modal rich media ModalRichmediaConfig config = new ModalRichmediaConfig() .setViewPosition(ModalRichMediaViewPosition.BOTTOM) .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP) .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN);
// Apply the configuration RichMediaManager.setDefaultRichMediaConfig(config); }
@Override public boolean shouldPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media will be presented with: " + richMedia.getContent()); return true; }
@Override public void onPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media has been presented: " + richMedia.getContent()); }
@Override public void onClose(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media has been closed: " + richMedia.getContent()); }
@Override public void onError(RichMedia richMedia, PushwooshException pushwooshException) { Log.e("Pushwoosh", "Failed to present rich media: " + richMedia.getContent() + ". Error: " + pushwooshException.getMessage()); }}
การแก้ไขปัญหา
Anchor link toหากคุณพบปัญหาใดๆ ในระหว่างขั้นตอนการผสานการทำงาน โปรดดูที่ส่วน การสนับสนุนและชุมชน