انتقل إلى المحتوى

الأسئلة الشائعة حول Pushwoosh Android SDK

كيف يبدو رمز الدفع و HWID في أندرويد؟

Anchor link to

تختلف رموز الدفع لأجهزة أندرويد في الطول (أقل من 255 حرفًا) وتبدأ بـ APA91b، على سبيل المثال:

APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq

غالبًا ما تحتوي الرموز على بادئة مفصولة بنقطتين رأسيتين قبل APA91b، على سبيل المثال: eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...

يستخدم Pushwoosh معرفات UUID كـ HWIDs، أي سلاسل نصية مكونة من 32 حرفًا أبجديًا ورقميًا يتم إنشاؤها عشوائيًا: 123e4567-e89b-12d3-a456-426655440000

كيف يمكنني الحصول على رمز الدفع لجهاز الأندرويد الخاص بي؟

Anchor link to

يمكنك الحصول على رمز الدفع لجهاز الأندرويد الخاص بك في سجل وحدة التحكم. استخدم أداة logcat في Android Studio.

افتح monitor.bat في %USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat، وقم بتوصيل جهازك بالكمبيوتر واسمح بتصحيح أخطاء USB في إعدادات أندرويد. قم بتشغيل تطبيقك على الجهاز. حدد موقع /registerDevice، وابحث عن رمز الدفع لجهازك لاستخدامه في أجهزة الاختبار لاحقًا.

لقطة شاشة تظهر مخرجات logcat مع معلومات تسجيل رمز الدفع المعروضة في Android Studio

ما هي الأذونات الضرورية وما هي الاختيارية؟

Anchor link to

عند تثبيته على جهاز أندرويد، سيطلب التطبيق الأذونات التالية فيما يتعلق بـ 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

يمكنك تعيين معرف المستخدم (UserID)، والذي يمكن أن يكون معرف فيسبوك أو اسم مستخدم أو بريدًا إلكترونيًا أو أي معرف مستخدم فريد آخر. يتيح لك هذا مطابقة البيانات والأحداث عبر أجهزة متعددة مرتبطة بنفس المستخدم. لتعيين UserID، استدعِ طريقة setUserId.

مثال

Pushwoosh.getInstance().setUserId("testUser");

ما مدى دقة العدد الإجمالي لمشتركي أندرويد؟

Anchor link to

يقوم Pushwoosh بمسح أجهزة أندرويد التي ألغت اشتراكها من قاعدة البيانات عند تلقي استجابة “NotRegistered” من FCM، والتي يمكن إرجاعها بعد المحاولة الثانية للوصول إلى جهاز معين. هذا يعني أنه يجب عليك إرسال إشعارين إلى جهاز غير مشترك لإزالته من قاعدة البيانات.

فيما يلي السيناريو الأكثر شيوعًا الموضح في وثائق FCM:

  1. يقوم المشترك بإلغاء تثبيت التطبيق.
  2. يرسل Pushwoosh رسالة إلى خادم FCM.
  3. يرسل خادم FCM الرسالة إلى جهاز المستخدم.
  4. يتلقى عميل FCM على الجهاز الرسالة ويكتشف أن تطبيقك قد تم إلغاء تثبيته؛ تعتمد تفاصيل الكشف على النظام الأساسي الذي يعمل عليه التطبيق.
  5. يبلغ عميل FCM على الجهاز خادم FCM بأنه تم إلغاء تثبيت التطبيق.
  6. يضع خادم FCM علامة على معرف التسجيل للحذف.
  7. يرسل Pushwoosh رسالة أخرى إلى FCM.
  8. يعيد FCM رسالة NotRegistered.
  9. يزيل Pushwoosh رمز الدفع من قاعدة المستخدمين الخاصة بك.

قد يستغرق الأمر بعض الوقت حتى تتم إزالة معرف التسجيل بالكامل من FCM. وبالتالي، من الممكن أن تحصل رسالة مرسلة في الخطوة 7 أعلاه على معرف رسالة صالح كاستجابة، على الرغم من أن الرسالة لن يتم تسليمها إلى تطبيق العميل.

هل يمكنني استخدام وسوم HTML في الإشعارات المرسلة إلى أندرويد؟

Anchor link to

نعم، في أندرويد يمكنك استخدام وسوم HTML التالية لتعديل مظهر الإشعار:

<span style="color: green;"><b><i><span style="text-decoration: underline;">Hello world!
Hello hi hey</span></i></b></span>

ضع وسوم HTML هذه في حقل إدخال الرسالة، واستخدمها في طلب API أيضًا. قد تفشل بعض أجهزة أندرويد في معالجة وسوم HTML هذه بشكل صحيح، ولكن معظم الأجهزة تعرض التنسيق بشكل صحيح.

كيفية تعيين أيقونة إشعار في Android Lollipop (والإصدارات الأحدث)؟

Anchor link to

في Android Lollipop، تم تغيير الأيقونات لتكون بيضاء فقط. لذلك، إذا قمت بتحديد targetSdkVersion >= 21 في ملف AndroidManifest.xml الخاص بك، فسيستخدم أندرويد قناة ألفا فقط للأيقونة.
شاهد المزيد عن السلوك في وثائق أندرويد.

يتجاهل النظام جميع القنوات غير ألفا في أيقونات الإجراءات وفي أيقونة الإشعار الرئيسية. افترض أن هذه الأيقونات ستكون ألفا فقط. يرسم النظام أيقونات الإشعارات باللون الأبيض وأيقونات الإجراءات باللون الرمادي الداكن. هذا خارج عن سيطرة Pushwoosh SDK.

1. قم بإنشاء أيقونة الإشعار وفقًا لـ إرشادات أندرويد. وفقًا لـ الوثائق، سيتجاهل النظام جميع الألوان.

2. قم بتسمية الأيقونة pw_notification.png وضعها في مجلد res/drawable. سيستخدم Pushwoosh SDK هذه الأيقونة كافتراضي للإشعارات.

3. بدلاً من ذلك، يمكنك استخدام Remote API وتعيين قيمة المعلمة "android_icon" إلى صورة الأيقونة (بدون امتداد الملف).

استخدام Pushwoosh SDK مع خدمات FCM أخرى

Anchor link to

يمكنك استخدام Pushwoosh جنبًا إلى جنب مع SDKs أخرى تستخدم FCM لرسائل الدفع. للقيام بذلك، قم بإنشاء خدمة توجيه لتوزيع الأحداث بين الخدمات. أولاً، أضف الاعتمادية 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 أو غيرها، تبدأ هذه المكتبات عملية جديدة، مما يؤدي إلى إنشاء مثيل جديد للتطبيق. نظرًا لأنه لا يمكنك الاستماع إلى إشعارات الدفع في عملية أخرى، فإن هذا يؤدي إلى طرح 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

إذا كنت ترغب في إزالة إشعار غير ذي صلة عند تنفيذ إجراء معين داخل تطبيقك، يمكنك استخدام النهج التالي:

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، فشاركنا أفكارك عبر هذا النموذج.