Pushwoosh Android SDK पर अक्सर पूछे जाने वाले प्रश्न
- Android पुश टोकन और HWID कैसा दिखता है?
- मैं अपना Android डिवाइस पुश टोकन कैसे प्राप्त कर सकता हूँ?
- कौन सी अनुमतियाँ आवश्यक हैं और कौन सी वैकल्पिक हैं?
- मैं UserID कैसे सेट करूँ?
- Android सब्सक्राइबर्स की कुल संख्या कितनी सटीक है?
- क्या मैं Android पर भेजे गए पुश में HTML टैग का उपयोग कर सकता हूँ?
- Android Lollipop (और बाद के संस्करणों) में नोटिफिकेशन आइकन कैसे सेट करें?
- अन्य FCM सेवाओं के साथ Pushwoosh SDK का उपयोग करना
- LeakCanary या AppMetrica लाइब्रेरी के साथ Pushwoosh का उपयोग करना
- किसी डिवाइस से प्राप्त सूचना को हटाना
Android पुश टोकन और HWID कैसा दिखता है?
Anchor link toAndroid डिवाइस पुश टोकन लंबाई में भिन्न होते हैं (255 वर्णों से कम) और APA91b से शुरू होते हैं, उदाहरण के लिए:
APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq
टोकन में अक्सर APA91b से पहले एक कोलन-पृथक उपसर्ग होता है, उदाहरण के लिए: eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...
Pushwoosh HWID के रूप में UUID का उपयोग करता है, यानी 32 अल्फ़ान्यूमेरिकल वर्णों के यादृच्छिक रूप से उत्पन्न स्ट्रिंग: 123e4567-e89b-12d3-a456-426655440000
मैं अपना Android डिवाइस पुश टोकन कैसे प्राप्त कर सकता हूँ?
Anchor link toआप कंसोल लॉग में अपना Android डिवाइस पुश टोकन प्राप्त कर सकते हैं। Android Studio में logcat टूल का उपयोग करें।
%USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat में monitor.bat खोलें, अपने डिवाइस को पीसी से कनेक्ट करें और Android सेटिंग्स में USB डिबगिंग की अनुमति दें। अपने डिवाइस पर अपना एप्लिकेशन चलाएं। /registerDevice का पता लगाएं, बाद में टेस्ट डिवाइसेस में उपयोग करने के लिए अपने डिवाइस के लिए पुश टोकन खोजें।

कौन सी अनुमतियाँ आवश्यक हैं और कौन सी वैकल्पिक हैं?
Anchor link toजब किसी Android डिवाइस पर इंस्टॉल किया जाता है, तो एप्लिकेशन Pushwoosh SDK के संबंध में निम्नलिखित अनुमतियों के लिए पूछेगा:
<!-- FCM Firebase सेवाओं से जुड़ता है। --> <uses-permission android:name="android.permission.INTERNET"/>
<!-- जब कोई संदेश प्राप्त होता है तो प्रोसेसर को सोने से रोकता है। --> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- इस अनुमति का उपयोग यह निर्धारित करने के लिए किया जाता है कि डिवाइस नेटवर्क तक पहुंच सकता है या नहीं। --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- इस ऐप को डेटा संदेश पंजीकृत करने और प्राप्त करने की अनुमति है। --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />हमारा SDK छवियों, डिवाइस संपर्कों आदि तक पहुंचने की अनुमति नहीं मांगता है।
मैं UserID कैसे सेट करूँ?
Anchor link toआप एक उपयोगकर्ता पहचानकर्ता (UserID) सेट कर सकते हैं, जो एक Facebook ID, उपयोगकर्ता नाम, ईमेल, या कोई अन्य अद्वितीय उपयोगकर्ता ID हो सकता है। यह आपको एक ही उपयोगकर्ता से जुड़े कई उपकरणों में डेटा और घटनाओं का मिलान करने की अनुमति देता है। UserID सेट करने के लिए, setUserId विधि को कॉल करें।
उदाहरण
Pushwoosh.getInstance().setUserId("testUser");Android सब्सक्राइबर्स की कुल संख्या कितनी सटीक है?
Anchor link toPushwoosh डेटाबेस से अनसब्सक्राइब किए गए Android उपकरणों को FCM से “NotRegistered” प्रतिक्रिया प्राप्त होने पर साफ़ करता है, जो किसी विशिष्ट डिवाइस तक पहुंचने के दूसरे प्रयास के बाद वापस किया जा सकता है। इसका मतलब है कि आपको किसी अनसब्सक्राइब किए गए डिवाइस को डेटाबेस से हटाने के लिए उसे 2 पुश भेजने होंगे।
FCM दस्तावेज़ीकरण में वर्णित सबसे आम परिदृश्य निम्नलिखित है:
- आपका सब्सक्राइबर ऐप को अनइंस्टॉल कर देता है।
- Pushwoosh FCM सर्वर को एक संदेश भेजता है।
- FCM सर्वर आपके उपयोगकर्ता के डिवाइस पर संदेश भेजता है।
- डिवाइस पर FCM क्लाइंट संदेश प्राप्त करता है और पता लगाता है कि आपका एप्लिकेशन अनइंस्टॉल कर दिया गया है; पता लगाने का विवरण उस प्लेटफ़ॉर्म पर निर्भर करता है जिस पर ऐप चल रहा है।
- डिवाइस पर FCM क्लाइंट FCM सर्वर को सूचित करता है कि ऐप अनइंस्टॉल कर दिया गया था।
- FCM सर्वर पंजीकरण आईडी को हटाने के लिए चिह्नित करता है।
- Pushwoosh FCM को एक और संदेश भेजता है।
- FCM एक NotRegistered संदेश लौटाता है।
- Pushwoosh आपके उपयोगकर्ता आधार से पुश टोकन हटा देता है।
FCM से पंजीकरण आईडी को पूरी तरह से हटाने में कुछ समय लग सकता है। इस प्रकार यह संभव है कि उपरोक्त चरण 7 में भेजे गए संदेश को प्रतिक्रिया के रूप में एक वैध संदेश आईडी मिले, भले ही संदेश क्लाइंट ऐप को डिलीवर नहीं किया जाएगा।
क्या मैं Android पर भेजे गए पुश में HTML टैग का उपयोग कर सकता हूँ?
Anchor link toहाँ, Android में आप पुश के स्वरूप को संशोधित करने के लिए निम्नलिखित HTML टैग का उपयोग कर सकते हैं:
<span style="color: green;"><b><i><span style="text-decoration: underline;">Hello world!Hello hi hey</span></i></b></span>इन HTML टैग को संदेश इनपुट फ़ील्ड में रखें, और उन्हें API अनुरोध में भी उपयोग करें। कुछ Android डिवाइस इन HTML टैग को ठीक से संसाधित करने में विफल हो सकते हैं, लेकिन अधिकांश डिवाइस स्वरूपण को सही ढंग से प्रदर्शित करते हैं।
Android Lollipop (और बाद के संस्करणों) में नोटिफिकेशन आइकन कैसे सेट करें?
Anchor link toAndroid Lollipop में आइकन केवल सफेद होने के लिए बदल दिए गए थे। इसलिए, यदि आप अपनी AndroidManifest.xml फ़ाइल में targetSdkVersion >= 21 चुनते हैं, तो Android केवल आइकन के अल्फा-चैनल का उपयोग करेगा।
Android दस्तावेज़ीकरण में व्यवहार के बारे में और देखें।
सिस्टम एक्शन आइकन और मुख्य नोटिफिकेशन आइकन में सभी गैर-अल्फा चैनलों को अनदेखा करता है। मान लें कि ये आइकन केवल अल्फा-ओनली होंगे। सिस्टम नोटिफिकेशन आइकन को सफेद और एक्शन आइकन को गहरे भूरे रंग में खींचता है। यह Pushwoosh SDK के नियंत्रण से बाहर है।
1. Android दिशानिर्देशों के अनुसार नोटिफिकेशन आइकन बनाएं। दस्तावेज़ीकरण के अनुसार, सिस्टम सभी रंगों को अनदेखा कर देगा।
2. आइकन को pw_notification.png के रूप में नाम दें और इसे res/drawable फ़ोल्डर में डालें। Pushwoosh SDK इस आइकन को नोटिफिकेशन के लिए डिफ़ॉल्ट के रूप में उपयोग करेगा।
3. वैकल्पिक रूप से, आप Remote API का उपयोग कर सकते हैं और "android_icon" पैरामीटर मान को आइकन छवि (बिना फ़ाइल एक्सटेंशन के) पर सेट कर सकते हैं।
अन्य FCM सेवाओं के साथ Pushwoosh SDK का उपयोग करना
Anchor link toआप Pushwoosh का उपयोग अन्य SDK के साथ कर सकते हैं जो पुश मैसेजिंग के लिए FCM का उपयोग करते हैं। ऐसा करने के लिए, सेवाओं के बीच घटनाओं को वितरित करने के लिए एक राउटर सेवा बनाएं। सबसे पहले, मुख्य Pushwoosh मॉड्यूल के साथ pushwoosh-firebase निर्भरता जोड़ें:
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)) { //यह एक Pushwoosh पुश है, SDK इसे स्वचालित रूप से संभाल लेगा PushwooshFcmHelper.onMessageReceived(this, remoteMessage) } else { //यह एक Pushwoosh पुश नहीं है, आपको इसे स्वयं संभालना चाहिए dispatchNonPushwooshMessage(remoteMessage); } }
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) { // यहां अपने पुश हैंडलिंग लॉजिक को लागू करें }}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)) { //यह एक Pushwoosh पुश है, SDK इसे स्वचालित रूप से संभाल लेगा PushwooshFcmHelper.onMessageReceived(this, remoteMessage); } else { //यह एक Pushwoosh पुश नहीं है, आपको इसे स्वयं संभालना चाहिए dispatchNonPushwooshMessage(remoteMessage); } }
private void dispatchNonPushwooshMessage(RemoteMessage remoteMessage) { // यहां अपने पुश हैंडलिंग लॉजिक को लागू करें }}अपने AndroidManifest.xml में राउटर पंजीकृत करें:
<service android:name=".FirebaseMessagingRouterService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter></service>LeakCanary या AppMetrica लाइब्रेरी के साथ Pushwoosh का उपयोग करना
Anchor link toजब आप LeakCanary, AppMetrica या अन्य जैसे एनालिटिक्स टूल को एकीकृत करते हैं, तो ये लाइब्रेरी एक नई प्रक्रिया शुरू करती हैं, जिससे ऐप का नया उदाहरण बनता है। चूंकि आप दूसरी प्रक्रिया में पुश नोटिफिकेशन के लिए नहीं सुन सकते हैं, इसके परिणामस्वरूप java.lang.NullPointerException फेंका जाता है।
यदि आप Application.onCreate() के अंदर registerForPushNotifications को कॉल करते हैं, तो आपको यह जांचना चाहिए कि क्या आप एप्लिकेशन की मुख्य प्रक्रिया में हैं। इस जांच को करने के लिए निम्नलिखित कोड का उपयोग करें:
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;
// केवल एक विशिष्ट ध्वज के साथ पुश रद्द करें 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 एकीकरण प्रक्रिया के दौरान किसी भी कठिनाई का सामना करना पड़ता है, तो इस फ़ॉर्म के माध्यम से अपने विचार हमारे साथ साझा करें।