คำถามที่พบบ่อยเกี่ยวกับ Pushwoosh Android SDK
- Push token และ HWID ของ Android มีลักษณะอย่างไร
- ฉันจะรับ push token ของอุปกรณ์ Android ของฉันได้อย่างไร
- สิทธิ์ใดที่จำเป็นและสิทธิ์ใดที่เป็นทางเลือก
- ฉันจะตั้งค่า UserID ได้อย่างไร
- จำนวนผู้สมัครสมาชิก Android ทั้งหมดมีความแม่นยำเพียงใด
- ฉันสามารถใช้แท็ก HTML ใน push ที่ส่งไปยัง Android ได้หรือไม่
- วิธีตั้งค่าไอคอนการแจ้งเตือนใน Android Lollipop (และเวอร์ชันที่ใหม่กว่า)
- การใช้ Pushwoosh SDK กับบริการ FCM อื่นๆ
- การใช้ Pushwoosh กับไลบรารี LeakCanary หรือ AppMetrica
- การลบการแจ้งเตือนที่ได้รับจากอุปกรณ์
Push token และ HWID ของ Android มีลักษณะอย่างไร
Anchor link toPush token ของอุปกรณ์ Android มีความยาวแตกต่างกัน (น้อยกว่า 255 ตัวอักษร) และขึ้นต้นด้วย APA91b เช่น:APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq
โปรดทราบว่า token มักจะมีคำนำหน้าที่คั่นด้วยเครื่องหมายโคลอนก่อน APA91b เช่น eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...
Pushwoosh ใช้ UUID เป็น HWID ซึ่งเป็นสตริงที่สร้างขึ้นแบบสุ่มประกอบด้วยตัวอักษรและตัวเลข 32 ตัว: 123e4567-e89b-12d3-a456-426655440000
ฉันจะรับ push token ของอุปกรณ์ Android ของฉันได้อย่างไร
Anchor link toคุณสามารถรับ push token ของอุปกรณ์ Android ของคุณได้ใน console log โดยใช้เครื่องมือ logcat ใน Android Studio
เปิด monitor.bat ใน %USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat
เชื่อมต่ออุปกรณ์ของคุณกับพีซีและอนุญาตการดีบัก USB ในการตั้งค่า Android เรียกใช้แอปพลิเคชันของคุณบนอุปกรณ์ ค้นหา /registerDevice
เพื่อหา push token ของอุปกรณ์ของคุณเพื่อใช้ใน Test Devices ในภายหลัง

สิทธิ์ใดที่จำเป็นและสิทธิ์ใดที่เป็นทางเลือก
Anchor link toเมื่อติดตั้งบนอุปกรณ์ Android แอปพลิเคชันจะขอสิทธิ์ต่อไปนี้ที่เกี่ยวข้องกับ Pushwoosh SDK:
<!-- FCM connects to Firebase Services. --> <uses-permission android:name="android.permission.INTERNET"/>
<!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- This permission is used to determine whether the device can access the network. --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
SDK ของเราจะไม่ขอสิทธิ์ในการเข้าถึงรูปภาพ รายชื่อผู้ติดต่อในอุปกรณ์ ฯลฯ
ฉันจะตั้งค่า UserID ได้อย่างไร
Anchor link toคุณมีตัวเลือกในการตั้งค่า User identifier (UserID) ซึ่งอาจเป็น Facebook ID, ชื่อผู้ใช้, อีเมล หรือ ID ผู้ใช้ที่ไม่ซ้ำกันอื่นๆ ซึ่งจะช่วยให้คุณสามารถจับคู่ข้อมูลและเหตุการณ์ต่างๆ ในอุปกรณ์หลายเครื่องที่เชื่อมโยงกับผู้ใช้คนเดียวกันได้ ในการตั้งค่า UserID ให้เรียกใช้เมธอด setUserId
ตัวอย่าง
Pushwoosh.getInstance().setUserId("testUser");
จำนวนผู้สมัครสมาชิก Android ทั้งหมดมีความแม่นยำเพียงใด
Anchor link toPushwoosh จะลบอุปกรณ์ Android ที่ยกเลิกการสมัครออกจากฐานข้อมูลเมื่อได้รับการตอบกลับ “NotRegistered” จาก FCM ซึ่งอาจถูกส่งกลับมาหลังจากการพยายามเข้าถึงอุปกรณ์นั้นเป็นครั้งที่สอง ซึ่งหมายความว่าคุณต้องส่ง push 2 ครั้งไปยังอุปกรณ์ที่ยกเลิกการสมัครเพื่อให้อุปกรณ์นั้นถูกลบออกจากฐานข้อมูลของเรา
นี่คือสถานการณ์ที่พบบ่อยที่สุดที่อธิบายไว้ใน เอกสารประกอบของ FCM:
- ผู้สมัครของคุณถอนการติดตั้งแอป
- Pushwoosh ส่งข้อความไปยังเซิร์ฟเวอร์ FCM
- เซิร์ฟเวอร์ FCM ส่งข้อความไปยังอุปกรณ์ของผู้ใช้ของคุณ
- ไคลเอ็นต์ FCM บนอุปกรณ์ได้รับข้อความและตรวจพบว่าแอปพลิเคชันของคุณถูกถอนการติดตั้งแล้ว รายละเอียดการตรวจจับขึ้นอยู่กับแพลตฟอร์มที่แอปกำลังทำงานอยู่
- ไคลเอ็นต์ FCM บนอุปกรณ์แจ้งเซิร์ฟเวอร์ FCM ว่าแอปถูกถอนการติดตั้งแล้ว
- เซิร์ฟเวอร์ FCM ทำเครื่องหมาย registration ID สำหรับการลบ
- Pushwoosh ส่งข้อความอื่นไปยัง FCM
- FCM ส่งคืนข้อความ NotRegistered
- Pushwoosh ลบ push token ออกจากฐานผู้ใช้ของคุณ
อาจใช้เวลาสักครู่กว่าที่ registration ID จะถูกลบออกจาก FCM โดยสมบูรณ์ ดังนั้นจึงเป็นไปได้ว่าข้อความที่ส่งในขั้นตอนที่ 7 ข้างต้นจะได้รับการตอบกลับเป็น message ID ที่ถูกต้อง แม้ว่าข้อความนั้นจะไม่ถูกส่งไปยังแอปของไคลเอ็นต์ก็ตาม
ฉันสามารถใช้แท็ก HTML ใน push ที่ส่งไปยัง Android ได้หรือไม่
Anchor link toใช่ ใน Android คุณสามารถใช้แท็ก HTML ต่อไปนี้เพื่อแก้ไขลักษณะที่ปรากฏของ push:
<span style="color: green;"><b><i><span style="text-decoration: underline;">Hello world!Hello hi hey</span></i></b></span>
วางแท็ก HTML เหล่านี้ในช่องป้อนข้อมูล Message และใช้ในการร้องขอ API ด้วย โปรดทราบว่าอุปกรณ์ Android บางเครื่องอาจไม่สามารถประมวลผลแท็ก HTML เหล่านี้ได้อย่างถูกต้อง แต่อุปกรณ์ส่วนใหญ่ที่เราใช้ในการทดสอบแสดงผลการจัดรูปแบบได้อย่างถูกต้อง
วิธีตั้งค่าไอคอนการแจ้งเตือนใน Android Lollipop (และเวอร์ชันที่ใหม่กว่า)
Anchor link toใน Android Lollipop ไอคอนถูกเปลี่ยนให้เป็นสีขาวเท่านั้น ดังนั้น หากคุณเลือก targetSdkVersion >= 21 ในไฟล์ AndroidManifest.xml ของคุณ Android จะใช้เฉพาะ alpha-channel ของไอคอนเท่านั้น
ดูเพิ่มเติมเกี่ยวกับลักษณะการทำงานนี้ใน เอกสารประกอบของ Android
ระบบจะละเว้นช่องสีที่ไม่ใช่ alpha ทั้งหมดในไอคอนการดำเนินการและในไอคอนการแจ้งเตือนหลัก ให้ถือว่าไอคอนเหล่านี้เป็นแบบ alpha-only ระบบจะวาดไอคอนการแจ้งเตือนเป็นสีขาวและไอคอนการดำเนินการเป็นสีเทาเข้ม สิ่งนี้อยู่นอกเหนือการควบคุมของ Pushwoosh SDK
1. สร้างไอคอนการแจ้งเตือนตาม แนวทางของ Android ตาม เอกสารประกอบ ระบบจะละเว้นสีทั้งหมด
1.1. ตั้งชื่อไอคอนเป็น pw_notification.png และวางไว้ในโฟลเดอร์ res/drawable Pushwoosh SDK จะใช้ไอคอนนี้เป็นค่าเริ่มต้นสำหรับการแจ้งเตือน
1.2. หรือคุณสามารถใช้ Remote API และตั้งค่าพารามิเตอร์ "android_icon"
เป็นรูปภาพไอคอน (โดยไม่มีนามสกุลไฟล์)
การใช้ Pushwoosh SDK กับบริการ FCM อื่นๆ
Anchor link toคุณสามารถใช้ Pushwoosh ควบคู่ไปกับ SDK อื่นๆ ที่ใช้ FCM สำหรับการส่งข้อความ push ในการทำเช่นนั้น คุณควรสร้าง router service เพื่อกระจายเหตุการณ์ระหว่างบริการต่างๆ ก่อนอื่น ให้เพิ่ม dependency ของ pushwoosh-firebase ควบคู่ไปกับโมดูลหลักของ Pushwoosh:
implementation 'com.pushwoosh:pushwoosh-firebase:6.0.3'
สร้างคลาสการกำหนดเส้นทาง:
import com.pushwoosh.firebase.PushwooshFcmHelper;
class FirebaseMessagingRouterService : FirebaseMessagingService() {
override fun onNewToken(token: String?) { super.onNewToken(token) PushwooshFcmHelper.onTokenRefresh(token) sendTokenToAnotherService(token) }
override fun onMessageReceived(remoteMessage: RemoteMessage) { if (PushwooshFcmHelper.isPushwooshMessage(remoteMessage)) { //นี่คือ push ของ Pushwoosh, SDK จะจัดการโดยอัตโนมัติ PushwooshFcmHelper.onMessageReceived(this, remoteMessage) } else { //นี่ไม่ใช่ push ของ Pushwoosh, คุณควรจัดการด้วยตัวเอง dispatchNonPushwooshMessage(remoteMessage); } }
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) { // นำตรรกะการจัดการ push ของคุณไปใช้ที่นี่ }}
import com.pushwoosh.firebase.PushwooshFcmHelper;
public class FirebaseMessagingRouterService extends FirebaseMessagingService {
@Override public void onNewToken(String token) { super.onNewToken(token); PushwooshFcmHelper.onTokenRefresh(token); sendTokenToAnotherService(token); }
@Override public void onMessageReceived(RemoteMessage remoteMessage) { if (PushwooshFcmHelper.isPushwooshMessage(remoteMessage)) { //นี่คือ push ของ Pushwoosh, SDK จะจัดการโดยอัตโนมัติ PushwooshFcmHelper.onMessageReceived(this, remoteMessage); } else { //นี่ไม่ใช่ push ของ Pushwoosh, คุณควรจัดการด้วยตัวเอง dispatchNonPushwooshMessage(remoteMessage); } }
private void dispatchNonPushwooshMessage(RemoteMessage remoteMessage) { // นำตรรกะการจัดการ push ของคุณไปใช้ที่นี่ }}
ลงทะเบียน router ใน AndroidManifest.xml ของคุณ:
<service android:name=".FirebaseMessagingRouterService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter></service>
การใช้ Pushwoosh กับไลบรารี LeakCanary หรือ AppMetrica
Anchor link toเมื่อคุณผสานรวมเครื่องมือวิเคราะห์ เช่น LeakCanary, AppMetrica หรืออื่นๆ ไลบรารีเหล่านี้จะเริ่มกระบวนการใหม่ สร้างอินสแตนซ์ใหม่ของแอป เนื่องจากคุณไม่สามารถรอรับการแจ้งเตือนแบบ push ในกระบวนการอื่นได้ สิ่งนี้ส่งผลให้เกิด java.lang.NullPointerException
หากคุณเรียกใช้ registerForPushNotifications
ภายใน Application.onCreate()
คุณควรตรวจสอบว่าคุณอยู่ในกระบวนการหลักของแอปพลิเคชันหรือไม่ ใช้โค้ดต่อไปนี้เพื่อทำการตรวจสอบ:
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses();if (runningAppProcesses != null && runningAppProcesses.size() != 0) { for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) { boolean isCurrentProcess = runningAppProcessInfo.pid == android.os.Process.myPid(); boolean isMainProcessName = getPackageName().equals(runningAppProcessInfo.processName); if (isCurrentProcess && isMainProcessName) {
Pushwoosh.getInstance().registerForPushNotifications(...); break; } }}
การลบการแจ้งเตือนที่ได้รับบางรายการออกจากอุปกรณ์ภายในเครื่อง
Anchor link toหากคุณต้องการลบ push ที่ไม่เกี่ยวข้องเมื่อดำเนินการบางอย่างภายในแอปพลิเคชันของคุณ คุณสามารถใช้วิธีการต่อไปนี้:
public class MainActivity extends AppCompatActivity {
List<NotificationCreatedEvent> savedPushes = new ArrayList<>();
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Pushwoosh.getInstance().registerForPushNotifications();
PushwooshNotificationSettings.setMultiNotificationMode(true);
findViewById(R.id.clear_button).setOnClickListener( v -> { cancelPushes(); });
EventBus.subscribe(NotificationCreatedEvent.class, event -> { try { if (event.getMessage().getCustomData() == null) return;
//ยกเลิก push ที่มีแฟล็กที่ระบุเท่านั้น if (new JSONObject(event.getMessage().getCustomData()).getBoolean("cancel")) { savedPushes.add(event); } } catch (JSONException e) { } }); } private void cancelPushes() { NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (manager == null) { return; }
for (NotificationCreatedEvent event : savedPushes) { manager.cancel(event.getMessageTag(), event.getMessageId()); } }}
แบ่งปันความคิดเห็นของคุณกับเรา
Anchor link toความคิดเห็นของคุณช่วยให้เราสร้างประสบการณ์ที่ดียิ่งขึ้น ดังนั้นเรายินดีที่จะรับฟังจากคุณหากคุณมีปัญหาใดๆ ในระหว่างขั้นตอนการผสานรวม SDK หากคุณประสบปัญหาใดๆ โปรดอย่าลังเลที่จะแบ่งปันความคิดเห็นของคุณกับเรา ผ่านแบบฟอร์มนี้