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

คำถามที่พบบ่อยเกี่ยวกับ Pushwoosh Android SDK

Push token และ HWID ของ Android มีลักษณะอย่างไร

Anchor link to

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

Pushwoosh จะลบอุปกรณ์ Android ที่ยกเลิกการสมัครออกจากฐานข้อมูลเมื่อได้รับการตอบกลับ “NotRegistered” จาก FCM ซึ่งอาจถูกส่งกลับมาหลังจากการพยายามเข้าถึงอุปกรณ์นั้นเป็นครั้งที่สอง ซึ่งหมายความว่าคุณต้องส่ง push 2 ครั้งไปยังอุปกรณ์ที่ยกเลิกการสมัครเพื่อให้อุปกรณ์นั้นถูกลบออกจากฐานข้อมูลของเรา
นี่คือสถานการณ์ที่พบบ่อยที่สุดที่อธิบายไว้ใน เอกสารประกอบของ FCM:

  1. ผู้สมัครของคุณถอนการติดตั้งแอป
  2. Pushwoosh ส่งข้อความไปยังเซิร์ฟเวอร์ FCM
  3. เซิร์ฟเวอร์ FCM ส่งข้อความไปยังอุปกรณ์ของผู้ใช้ของคุณ
  4. ไคลเอ็นต์ FCM บนอุปกรณ์ได้รับข้อความและตรวจพบว่าแอปพลิเคชันของคุณถูกถอนการติดตั้งแล้ว รายละเอียดการตรวจจับขึ้นอยู่กับแพลตฟอร์มที่แอปกำลังทำงานอยู่
  5. ไคลเอ็นต์ FCM บนอุปกรณ์แจ้งเซิร์ฟเวอร์ FCM ว่าแอปถูกถอนการติดตั้งแล้ว
  6. เซิร์ฟเวอร์ FCM ทำเครื่องหมาย registration ID สำหรับการลบ
  7. Pushwoosh ส่งข้อความอื่นไปยัง FCM
  8. FCM ส่งคืนข้อความ NotRegistered
  9. 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:

build.gradle
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 ของคุณไปใช้ที่นี่
}
}

ลงทะเบียน router ใน AndroidManifest.xml ของคุณ:

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 ที่ไม่เกี่ยวข้องเมื่อดำเนินการบางอย่างภายในแอปพลิเคชันของคุณ คุณสามารถใช้วิธีการต่อไปนี้:

MainActivity.java
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 หากคุณประสบปัญหาใดๆ โปรดอย่าลังเลที่จะแบ่งปันความคิดเห็นของคุณกับเรา ผ่านแบบฟอร์มนี้