ข้ามไปยังเนื้อหา

ปรับแต่ง Android SDK

Deep Linking

Anchor link to

ใน activity ของคุณที่จะจัดการกับ deep link ให้เพิ่มแท็ก <data> พร้อมด้วยพารามิเตอร์ scheme, host และ pathPrefix

<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>

ในตัวอย่างข้างต้น deep link จะเปิด PromoActivity การใช้งานพื้นฐานด้านล่างจะแสดงการแจ้งเตือนพร้อมค่า promo 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();
}
}

การติดตามการซื้อในแอป (In-app purchase tracking)

Anchor link to

หากคุณต้องการติดตามการซื้อในแอปใน Customer Journeys ให้กำหนดค่าการส่งข้อมูลการซื้อไปยัง Pushwoosh โดยการเรียกใช้เมธอดนี้:

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

การแจ้งเตือนแบบพุชตามโซนตำแหน่ง (Geozones)

Anchor link to

หากต้องการใช้การพุชตามโซนตำแหน่ง (Geozone) ให้เพิ่มไลบรารี com.pushwoosh:pushwoosh-location และเรียกใช้:

PushwooshLocation.startLocationTracking();

ในไฟล์ AndroidManifest.xml ของคุณ ให้ใส่สิทธิ์ที่จำเป็น:

<manifest ... >
<!-- จำเป็นสำหรับการแจ้งเตือนแบบพุชตามตำแหน่งทางภูมิศาสตร์ -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- จำเป็นสำหรับการติดตามตำแหน่งที่แม่นยำ -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- จำเป็นสำหรับการเข้าถึงตำแหน่งในพื้นหลังบน Android 10 (API level 29) และสูงกว่า -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

การใช้การแจ้งเตือนในเครื่องกับ Pushwoosh

Anchor link to

หากคุณใช้ Pushwoosh Local Notifications API ให้เพิ่มสิทธิ์ RECEIVE_BOOT_COMPLETED ไปยัง AndroidManifest.xml ของคุณ:

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

การใช้เลขบนแบดจ์ (Badge number) บน Android

Anchor link to

Pushwoosh รองรับการตั้งค่าเลขบนแบดจ์ที่ไอคอนแอปสำหรับตัวเปิด (launcher) ของ Android ต่อไปนี้:
Sony, Samsung, LG, HTC, ASUS, ADW, APEX, NOVA, HUAWEI, ZUK, OPPO
หากต้องการใช้ฟังก์ชันนี้ เพียงแค่เพิ่มไลบรารี com.pushwoosh:pushwoosh-badge ไปยังแอปพลิเคชันของคุณ

การเปิด activity ที่กำหนดเอง

Anchor link to

หากคุณต้องการเริ่ม activity เฉพาะเพื่อตอบสนองต่อการแจ้งเตือนแบบพุช ให้เพิ่ม intent-filter ต่อไปนี้ไปยัง activity นั้น:

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

การควบคุมระดับการบันทึก (Log Level)

Anchor link to

เพื่อช่วยในการดีบักและการผสานรวม โดยค่าเริ่มต้น SDK จะพิมพ์คำขอทั้งหมดไปยังคอนโซล เมื่อคุณพร้อมสำหรับ build ที่จะนำไปใช้งานจริง ให้เพิ่ม meta-data com.pushwoosh.log_level ที่มีค่า “ERROR” ไปยัง AndroidManifest.xml ด้วยวิธีนี้ จะมีเพียงข้อมูลเกี่ยวกับข้อผิดพลาดเท่านั้นที่จะไปยังคอนโซล ตัวเลือกอื่นๆ อาจเป็นหนึ่งในรายการต่อไปนี้:

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.**

ดูข้อกำหนดของไลบรารี Google Play Services เกี่ยวกับ Proguard ที่นี่:
https://developers.google.com/android/guides/setup

การปรับแต่งพฤติกรรมการเปิดการแจ้งเตือน

Anchor link to

หากคุณต้องการเลือก activity ที่จะแสดงผลจากการแจ้งเตือนแบบพุชโดยใช้โปรแกรม คุณสามารถสร้าง NotificationServiceExtension ที่กำหนดเอง และระบุชื่อคลาสแบบเต็ม (fully qualified class name) ของ NotificationServiceExtension ของคุณใน metadata ภายใต้ค่า com.pushwoosh.notification_service_extension

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() จะเริ่ม activity ของ launcher เริ่มต้น
// หรือ activity ที่มี action เป็น ${applicationId}.MESSAGE
// เพียงแค่ไม่ต้องเรียกใช้เพื่อลบล้างพฤติกรรมนี้
// super.startActivityForPushMessage(message);
// เริ่ม activity ของคุณแทน:
Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (ตัวเลือก) ส่งข้อมูลการแจ้งเตือนไปยัง Activity
launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent);
}
}

การปรับแต่งการแจ้งเตือนแบบพุช

Anchor link to

หากต้องการปรับแต่งมุมมองของการแจ้งเตือนแบบพุช คุณต้องสร้าง Factory ที่กำหนดเอง คุณสามารถสร้าง NotificationFactory ที่กำหนดเอง และระบุชื่อคลาสแบบเต็ม (fully qualified class name) ของ NotificationFactory ของคุณใน metadata ภายใต้ค่า com.pushwoosh.notification_factory

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);
}
}

การปรับแต่งการสรุปกลุ่ม (Group Summary)

Anchor link to

หากต้องการปรับแต่งลักษณะที่ปรากฏของการสรุปกลุ่ม ให้สร้าง Factory ที่กำหนดเอง คุณสามารถสร้าง SummaryNotificationFactory ที่กำหนดเอง และระบุชื่อคลาสแบบเต็ม (fully qualified class name) ของ SummaryNotificationFactory ของคุณใน metadata ภายใต้ค่า com.pushwoosh.summary_notification_factory

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 ปลายทางส่วนตัว (Private Endpoint URL)

Anchor link to

Pushwoosh ให้บริการ Private endpoints สำหรับลูกค้าที่สมัครใช้แผน Custom Plan ในการตั้งค่า Private endpoint สำหรับ Android SDK คุณต้องเพิ่มสิ่งต่อไปนี้ลงในไฟล์ AndroidManifest.xml ของคุณ:

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

การสร้างคิว Rich Media

Anchor link to

ในกรณีที่มีหน้า Rich Media หลายหน้าที่ต้องแสดงพร้อมกัน (ตัวอย่างเช่น เกิดเหตุการณ์ทริกเกอร์สำหรับ In-App สองรายการขึ้นไปในเวลาเดียวกัน หรือมีหน้า Rich Media แสดงอยู่แล้วในขณะที่เกิดเหตุการณ์ทริกเกอร์อื่น) คุณสามารถตั้งค่าคิวสำหรับการแสดงหน้า Rich Media ได้ ในการสร้างคิว ให้เพิ่มโค้ดต่อไปนี้ลงในโปรเจกต์ของคุณ:

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. สร้าง ช่องทางการแจ้งเตือน (Notification Channel)

3. เลือกเสียงขณะกำหนดค่าข้อความพุช

4. ตั้งค่าช่องทางการแจ้งเตือนที่ข้อความจะอยู่ในนั้น โดยระบุข้อมูลต่อไปนี้ในฟิลด์ “Android root params”:{"pw_channel": "PUSH NOTIFICATION CHANNEL NAME"} // ที่นี่คุณต้องระบุชื่อสำหรับช่องทางของคุณที่มีเสียงที่กำหนดเอง

ในกรณีที่ใช้ remote API ให้ตั้งค่าพารามิเตอร์ดังต่อไปนี้ภายในคำขอ /createMessage API ของคุณ:

"android_root_params": {"pw_channel": "push"} // ที่นี่คุณต้องระบุชื่อสำหรับช่องทางของคุณที่มีเสียงที่กำหนดเอง เช่น "push" สำหรับการแจ้งเตือนที่มีเสียง push.wav
"android_sound": "push" // ที่นี่คุณควรระบุชื่อไฟล์โดยไม่มีนามสกุล

เมื่อคุณส่งพุชพร้อมพารามิเตอร์ที่ระบุเหล่านั้น ช่องทางการแจ้งเตือนพร้อมเสียงที่เลือกจะถูกสร้างขึ้นสำหรับอุปกรณ์ทั้งหมดที่มี Android 8+

ตอนนี้ หากต้องการส่งพุชพร้อมเสียงที่กำหนดเอง คุณต้องระบุเฉพาะช่องทางที่เชื่อมโยงกับเสียงนั้นเท่านั้น

กฎ Proguard สำหรับเสียงการแจ้งเตือนที่กำหนดเอง

Anchor link to

หากแอปของคุณใช้ proguard สำหรับการลดขนาดโค้ดและทรัพยากร สิ่งสำคัญคือต้องเก็บไฟล์เสียงของคุณไว้เหมือนเดิมและพร้อมใช้งานสำหรับไลบรารีภายนอก หากคุณใช้คุณสมบัติ minifyEnabled = true ใน build.gradle ของคุณ ให้เพิ่มกฎต่อไปนี้ลงใน proguard-rules.pro ของคุณ:

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

หากคุณลดขนาดทรัพยากรของแอปของคุณนอกเหนือจากการลดขนาดโค้ดโดยใช้คุณสมบัติ shrinkResources=true คุณควรระบุเพิ่มเติมว่าต้องการเก็บทรัพยากรใดไว้ ในการทำเช่นนั้น ให้สร้างไฟล์ XML ใหม่ที่มีชื่อใดก็ได้ บันทึกไว้ที่ใดที่หนึ่งในโปรเจกต์ของคุณ (ตัวอย่างเช่น ใน res/xml) และระบุชื่อทรัพยากรภายใต้พารามิเตอร์ tools:keep ในแท็ก resources:

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

รายการแฟล็ก meta-data ของ Android SDK ทั้งหมด

Anchor link to

ในการตั้งค่าแฟล็ก คุณต้องเพิ่มบล็อก meta-data ลงในไฟล์ AndroidManifest.xml ของคุณภายในแท็ก application ตัวอย่างเช่น หากคุณต้องการตั้งค่า ID แอปพลิเคชัน Pushwoosh ให้เพิ่มโค้ดต่อไปนี้ลงในไฟล์ AndroidManifest.xml ของคุณ:

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.appid"
android:value="XXXXX-XXXXX" />
แฟล็กคำอธิบายค่าที่เป็นไปได้
com.pushwoosh.appidตั้งค่า ID แอปพลิเคชัน PushwooshXXXXX-XXXXX
com.pushwoosh.senderidตั้งค่า ID ผู้ส่งของโปรเจกต์ Firebase123456789000
com.pushwoosh.log_levelตั้งค่าระดับการบันทึก สำหรับรายละเอียด โปรดดูที่ การควบคุมระดับการบันทึกNONE / ERROR / WARN / INFO / DEBUG (ค่าเริ่มต้น) / NOISE
com.pushwoosh.base_urlลบล้าง URL พื้นฐานของเซิร์ฟเวอร์ Pushwooshhttps://cp.pushwoosh.com/json/1.3/ (ค่าเริ่มต้น)
com.pushwoosh.notification_service_extensionNotificationServiceExtension ที่กำหนดเอง สำหรับรายละเอียด โปรดดูที่ การปรับแต่งพฤติกรรมการเปิดการแจ้งเตือนcom.myapp.MyNotificationServiceExtension
com.pushwoosh.notification_factory

NotificationFactory ที่กำหนดเอง

สำหรับรายละเอียด โปรดดูที่ การปรับแต่งการแจ้งเตือนแบบพุช

com.myapp.MyNotificationFactory
com.pushwoosh.summary_notification_factorySummaryNotificationFactory ที่กำหนดเองcom.myapp.MySummaryNotificationFactory
com.pushwoosh.multi_notification_modeหากเป็น true การแจ้งเตือนจะถูกจัดกลุ่ม หากเป็น false จะแสดงเฉพาะการแจ้งเตือนที่ได้รับล่าสุดเท่านั้นtrue / false (ค่าเริ่มต้น)
com.pushwoosh.allow_server_communicationหากเป็น true SDK จะได้รับอนุญาตให้ส่งคำขอเครือข่ายไปยังเซิร์ฟเวอร์ Pushwooshtrue (ค่าเริ่มต้น) / false
com.pushwoosh.handle_notifications_using_workmanagerหากเป็น true 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_dataหากเป็น true SDK จะได้รับอนุญาตให้รวบรวมและส่งข้อมูลอุปกรณ์ไปยัง Pushwooshtrue (ค่าเริ่มต้น) / false
com.pushwoosh.allow_collecting_device_os_versionหากเป็น true SDK จะได้รับอนุญาตให้รวบรวมและส่งเวอร์ชันระบบปฏิบัติการของอุปกรณ์ไปยัง Pushwooshtrue (ค่าเริ่มต้น) / false
com.pushwoosh.allow_collecting_device_localeหากเป็น true SDK จะได้รับอนุญาตให้รวบรวมและส่งตำแหน่งที่ตั้งของอุปกรณ์ไปยัง Pushwooshtrue (ค่าเริ่มต้น) / false
com.pushwoosh.allow_collecting_device_modelหากเป็น true SDK จะได้รับอนุญาตให้รวบรวมและส่งโมเดลของอุปกรณ์ไปยัง Pushwooshtrue (ค่าเริ่มต้น) / false
com.pushwoosh.in_app_business_solutions_cappingจำกัดจำนวนครั้งที่ In-App push-unregister สามารถแสดงได้ในหนึ่งวัน1 (ค่าเริ่มต้น), 2, …, n
com.pushwoosh.start_foreground_serviceหากเป็น true Foreground Service จะเปิดตัวพร้อมกับการเรียก PushwooshLocation.startLocationTracking()true / false (ค่าเริ่มต้น)
com.pushwoosh.foreground_service_notification_textตั้งค่าข้อความของการแจ้งเตือนที่สร้างขึ้นเมื่อ Foreground Service เปิดตัวสำหรับคีย์ “com.pushwoosh.start_foreground_service”Work in progress (ค่าเริ่มต้น)
com.pushwoosh.foreground_service_notification_channel_nameตั้งค่าชื่อช่องทางสำหรับการแจ้งเตือนที่สร้างขึ้นเมื่อ Foreground Service เปิดตัวสำหรับคีย์ “com.pushwoosh.start_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. สร้าง Custom 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 หากคุณประสบปัญหาใดๆ โปรดอย่าลังเลที่จะแบ่งปันความคิดเห็นของคุณกับเราผ่าน แบบฟอร์มนี้