الأسئلة الشائعة حول Pushwoosh Android SDK
- كيف يبدو رمز الدفع و HWID في أندرويد؟
- كيف يمكنني الحصول على رمز الدفع لجهاز الأندرويد الخاص بي؟
- ما هي الأذونات الضرورية وما هي الاختيارية؟
- كيف يمكنني تعيين UserID؟
- ما مدى دقة العدد الإجمالي لمشتركي أندرويد؟
- هل يمكنني استخدام وسوم HTML في الإشعارات المرسلة إلى أندرويد؟
- كيفية تعيين أيقونة إشعار في Android Lollipop (والإصدارات الأحدث)؟
- استخدام Pushwoosh SDK مع خدمات FCM أخرى
- استخدام Pushwoosh مع مكتبات LeakCanary أو AppMetrica
- حذف إشعار مستلم من جهاز
كيف يبدو رمز الدفع و 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، وابحث عن رمز الدفع لجهازك لاستخدامه في أجهزة الاختبار لاحقًا.

ما هي الأذونات الضرورية وما هي الاختيارية؟
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:
- يقوم المشترك بإلغاء تثبيت التطبيق.
- يرسل Pushwoosh رسالة إلى خادم FCM.
- يرسل خادم FCM الرسالة إلى جهاز المستخدم.
- يتلقى عميل FCM على الجهاز الرسالة ويكتشف أن تطبيقك قد تم إلغاء تثبيته؛ تعتمد تفاصيل الكشف على النظام الأساسي الذي يعمل عليه التطبيق.
- يبلغ عميل FCM على الجهاز خادم FCM بأنه تم إلغاء تثبيت التطبيق.
- يضع خادم FCM علامة على معرف التسجيل للحذف.
- يرسل Pushwoosh رسالة أخرى إلى FCM.
- يعيد FCM رسالة NotRegistered.
- يزيل 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 الرئيسية:
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 }}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)) { //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 void dispatchNonPushwooshMessage(RemoteMessage remoteMessage) { // Implement your push handling logics here }}سجل الموجهات في 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إذا كنت ترغب في إزالة إشعار غير ذي صلة عند تنفيذ إجراء معين داخل تطبيقك، يمكنك استخدام النهج التالي:
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، فشاركنا أفكارك عبر هذا النموذج.