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

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

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

Anchor link to

Android device push token มีความยาวแตกต่างกัน (น้อยกว่า 255 ตัวอักษร) และขึ้นต้นด้วย APA91b ตัวอย่างเช่น:

APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq

โทเค็นมักจะมีคำนำหน้าที่คั่นด้วยโคลอนก่อน APA91b ตัวอย่างเช่น: eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...

Pushwoosh ใช้ UUID เป็น HWIDs ซึ่งเป็นสตริงที่สร้างขึ้นแบบสุ่มประกอบด้วยตัวอักษรและตัวเลข 32 ตัว: 123e4567-e89b-12d3-a456-426655440000

ฉันจะรับ Android device push token ของฉันได้อย่างไร

Anchor link to

คุณสามารถรับ Android device push token ของคุณได้ใน console log ใช้เครื่องมือ logcat ใน Android Studio

เปิด monitor.bat ใน %USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat เชื่อมต่ออุปกรณ์ของคุณกับพีซีและอนุญาตการดีบัก USB ในการตั้งค่า Android รันแอปพลิเคชันของคุณบนอุปกรณ์ ค้นหา /registerDevice ค้นหา push token สำหรับอุปกรณ์ของคุณเพื่อใช้ใน Test Devices ในภายหลัง

ภาพหน้าจอแสดงผลลัพธ์ logcat พร้อมข้อมูลการลงทะเบียน push token ที่แสดงใน Android Studio

สิทธิ์ใดที่จำเป็นและสิทธิ์ใดที่เป็นทางเลือก

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 ทำเครื่องหมาย ID การลงทะเบียนเพื่อลบ
  7. Pushwoosh ส่งข้อความอีกครั้งไปยัง FCM
  8. FCM ส่งคืนข้อความ NotRegistered
  9. Pushwoosh จะลบ push token ออกจากฐานผู้ใช้ของคุณ

อาจใช้เวลาสักพักกว่าที่ ID การลงทะเบียนจะถูกลบออกจาก FCM อย่างสมบูรณ์ ดังนั้นจึงเป็นไปได้ที่ข้อความที่ส่งในขั้นตอนที่ 7 ข้างต้นจะได้รับ 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 ตาม เอกสาร ระบบจะไม่สนใจสีทั้งหมด

2. ตั้งชื่อไอคอนเป็น pw_notification.png และวางไว้ในโฟลเดอร์ res/drawable Pushwoosh SDK จะใช้ไอคอนนี้เป็นค่าเริ่มต้นสำหรับการแจ้งเตือน

3. หรือคุณสามารถใช้ Remote API และตั้งค่าพารามิเตอร์ "android_icon" เป็นภาพไอคอน (โดยไม่มีนามสกุลไฟล์)

การใช้ Pushwoosh SDK กับบริการ FCM อื่นๆ

Anchor link to

คุณสามารถใช้ Pushwoosh ควบคู่ไปกับ SDK อื่นๆ ที่ใช้ FCM สำหรับการส่งข้อความ push ในการทำเช่นนั้น ให้สร้างบริการเราเตอร์เพื่อกระจายเหตุการณ์ระหว่างบริการต่างๆ ก่อนอื่นให้เพิ่มการพึ่งพา 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)) {
//this is a Pushwoosh push, SDK will handle it automatically
PushwooshFcmHelper.onMessageReceived(this, remoteMessage)
} else {
//this is not a Pushwoosh push, you should handle it by yourself
dispatchNonPushwooshMessage(remoteMessage);
}
}
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) {
// Implement your push handling logics here
}
}

ลงทะเบียนเราเตอร์ใน 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;
//cancel pushes only with a specific flag
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 โปรดแบ่งปันความคิดเห็นของคุณกับเรา ผ่านแบบฟอร์มนี้