Android SDK को कस्टमाइज़ करें
डीप लिंकिंग
Anchor link toआपकी एक्टिविटी में जो डीप लिंक को हैंडल करेगी, उसमें स्कीम, होस्ट और पाथप्रीफिक्स पैरामीटर्स के साथ <data> टैग जोड़ें।
<activity android:name=".PromoActivity" android:label="PromoActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.pushwoosh" android:host="promotion" android:pathPrefix="" /> </intent-filter></activity>ऊपर दिए गए उदाहरण में, डीप लिंक PromoActivity को खोलेगा। नीचे दिया गया बेसिक इम्प्लीमेंटेशन सरलता के लिए प्रोमो आईडी मान के साथ अलर्ट प्रदर्शित करता है। आपके एप्लिकेशन में यह निश्चित रूप से कुछ उपयोगी कर सकता है!
public class PromoActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.deep_link); setTitle("Deep link activity");
Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();
if (TextUtils.equals(action, Intent.ACTION_VIEW)) { openUrl(data); } }
private void openUrl(Uri uri) { String promoId = uri.getQueryParameter("id"); Toast.makeText(getApplicationContext(), promoId, Toast.LENGTH_LONG).show(); }}इन-ऐप खरीदारी ट्रैकिंग
Anchor link toयदि आप Customer Journeys में इन-ऐप खरीदारी को ट्रैक करना चाहते हैं, तो इस मेथड को कॉल करके Pushwoosh को खरीदारी की जानकारी भेजने के लिए कॉन्फ़िगर करें:
Pushwoosh.getInstance().sendInappPurchase(@NonNull String sku, @NonNull BigDecimal price, @NonNull String currency);जियोज़ोन पुश नोटिफिकेशन
Anchor link toजियोज़ोन पुश का उपयोग करने के लिए, com.pushwoosh:pushwoosh-location लाइब्रेरी जोड़ें और कॉल करें:
PushwooshLocation.startLocationTracking();अपने AndroidManifest.xml में, आवश्यक अनुमतियाँ शामिल करें:
<manifest ... > <!-- Required for geolocation-based push notifications --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Required for precise location tracking --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Required for background location access on Android 10 (API level 29) and higher --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /></manifest>Pushwoosh के साथ स्थानीय सूचनाओं का उपयोग करना
Anchor link toयदि आप Pushwoosh लोकल नोटिफिकेशन्स API का उपयोग करते हैं, तो अपने AndroidManifest.xml में RECEIVE_BOOT_COMPLETED अनुमति जोड़ें:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>xAndroid पर बैज नंबर का उपयोग करना
Anchor link toPushwoosh निम्नलिखित Android लॉन्चर्स के लिए ऐप आइकन शॉर्टकट पर बैज नंबर सेट करने का समर्थन करता है:
Sony, Samsung, LG, HTC, ASUS, ADW, APEX, NOVA, HUAWEI, ZUK, OPPO।
इस कार्यक्षमता का उपयोग करने के लिए, बस अपने एप्लिकेशन में com.pushwoosh:pushwoosh-badge लाइब्रेरी जोड़ें।
कस्टम गतिविधि खोलना
Anchor link toयदि आप पुश नोटिफिकेशन के जवाब में कोई विशेष गतिविधि शुरू करना चाहते हैं, तो उस गतिविधि में निम्नलिखित इंटेंट-फ़िल्टर जोड़ें:
<activity android:name="YourActivity"> <intent-filter> <action android:name="${applicationId}.MESSAGE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter></activity>लॉग स्तर को नियंत्रित करना
Anchor link toडीबगिंग और इंटीग्रेशन में सहायता के लिए, SDK डिफ़ॉल्ट रूप से कंसोल पर सभी अनुरोधों को प्रिंट करेगा। जब आप प्रोडक्शन बिल्ड के लिए तैयार हों, तो AndroidManifest.xml में “ERROR” मान के साथ com.pushwoosh.log_level मेटा-डेटा जोड़ें। इस तरह केवल त्रुटियों के बारे में जानकारी कंसोल पर जाएगी। अन्य विकल्प निम्नलिखित में से एक हो सकता है:
NONE - SDK से कोई लॉग नहीं
ERROR - कंसोल में केवल त्रुटियाँ प्रदर्शित करें
WARN - चेतावनियाँ भी प्रदर्शित करें
INFO - सूचनात्मक संदेश प्रदर्शित करें
DEBUG - अब डीबग जानकारी भी प्रदर्शित होती है
NOISE - SDK जो कुछ भी प्रिंट कर सकता है और उससे भी अधिक
<meta-data android:name="com.pushwoosh.log_level" android:value="ERROR" />प्रोगार्ड का उपयोग करना
Anchor link toप्रोगार्ड का उपयोग करते समय, निम्नलिखित विकल्प जोड़ें:
-keep class com.pushwoosh.** { *; }-dontwarn com.pushwoosh.**प्रोगार्ड के संबंध में Google Play Services लाइब्रेरी की आवश्यकताएं यहां देखें:
https://developers.google.com/android/guides/setup
अधिसूचना खोलने के व्यवहार को अनुकूलित करना
Anchor link toयदि आपको पुश नोटिफिकेशन के परिणामस्वरूप प्रदर्शित होने वाली गतिविधि को प्रोग्रामेटिक रूप से चुनने की आवश्यकता है, तो आप कस्टम NotificationServiceExtension बना सकते हैं और अपने NotificationServiceExtension का पूरी तरह से योग्य क्लास नाम com.pushwoosh.notification_service_extension मान के तहत मेटाडेटा में शामिल कर सकते हैं।
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.your.package.YourNotificationServiceExtension" />public class YourNotificationServiceExtension extends NotificationServiceExtension { @Override protected void startActivityForPushMessage(PushMessage message) { // super.startActivityForPushMessage() starts default launcher activity // or activity marked with ${applicationId}.MESSAGE action. // Simply do not call it to override this behaviour. // super.startActivityForPushMessage(message);
// start your activity instead: Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class); launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (Optional) pass notification data to Activity launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent); }}पुश नोटिफिकेशन को कस्टमाइज़ करना
Anchor link toपुश नोटिफिकेशन के व्यू को कस्टमाइज़ करने के लिए, आपको एक कस्टम फैक्ट्री बनाने की आवश्यकता है, आप एक कस्टम NotificationFactory बना सकते हैं और अपने NotificationFactory का पूरी तरह से योग्य क्लास नाम com.pushwoosh.notification_factory मान के तहत मेटाडेटा में शामिल कर सकते हैं।
<meta-data android:name="com.pushwoosh.notification_factory" android:value="com.your.package.YourNotificationFactory" />public class YourNotificationFactory extends PushwooshNotificationFactory { @Override public Notification onGenerateNotification(@NonNull PushMessage pushMessage) { if (customNotification) { // TODO: generate and return custom notification }
// return default Pushwoosh notification return super.onGenerateNotification(pushMessage); }}समूह सारांश को अनुकूलित करना
Anchor link toसमूह सारांश की उपस्थिति को अनुकूलित करने के लिए, एक कस्टम फ़ैक्टरी बनाएँ। आप कस्टम SummaryNotificationFactory बना सकते हैं और अपने SummaryNotificationFactory का पूरी तरह से योग्य क्लास नाम com.pushwoosh.summary_notification_factory मान के तहत मेटाडेटा में शामिल कर सकते हैं।
<meta-data android:name="com.pushwoosh.summary_notification_factory" android:value="com.your.package.YourSummaryNotificationFactory" />public class YourSummaryNotificationFactory extends PushwooshSummaryNotificationFactory { @Override public String summaryNotificationMessage(int notificationsAmount) { // return the message you want return super.summaryNotificationMessage(notificationsAmount); } @Override public int summaryNotificationIconResId() { // return the icon resource id you want return super.summaryNotificationIconResId(); }}निजी एंडपॉइंट URL
Anchor link toPushwoosh कस्टम प्लान सब्सक्रिप्शन वाले ग्राहकों के लिए निजी एंडपॉइंट प्रदान करता है। Android SDK के लिए निजी एंडपॉइंट सेट करने के लिए, आपको अपनी AndroidManifest.xml फ़ाइल में निम्नलिखित जोड़ना होगा:
<meta-data android:name="com.pushwoosh.base_url" android:value="PUSHWOOSH_PRIVATE_ENDPOINT_URL_PROVIDED" />एक रिच मीडिया कतार बनाना
Anchor link toयदि एक साथ कई रिच मीडिया पेजों को प्रदर्शित करना है (उदाहरण के लिए, दो या दो से अधिक इन-ऐप्स के लिए ट्रिगर इवेंट एक ही समय में होते हैं, या एक रिच मीडिया पेज पहले से ही प्रदर्शित हो रहा है जब एक अलग ट्रिगर इवेंट होता है), तो आप रिच मीडिया पेजों को प्रदर्शित करने के लिए एक कतार सेट कर सकते हैं। एक कतार बनाने के लिए, अपने प्रोजेक्ट में निम्नलिखित कोड जोड़ें:
package com.pushwoosh.testingapp;
import com.pushwoosh.RichMediaManager;import com.pushwoosh.exception.PushwooshException;import com.pushwoosh.richmedia.RichMediaPresentingDelegate;import com.pushwoosh.richmedia.RichMedia;import com.pushwoosh.internal.utils.PWLog;
import java.util.ArrayDeque;import java.util.concurrent.locks.ReentrantLock;
public class DefaultRichMediaPresentingDelegate implements RichMediaPresentingDelegate { private final String TAG = DefaultRichMediaPresentingDelegate.class.getSimpleName(); private ArrayDeque<RichMedia> richMediaQueue = new ArrayDeque<>(); private RichMedia currentRichMedia = null; private ReentrantLock reentrantLock;
public DefaultRichMediaPresentingDelegate() { PWLog.noise(TAG, "new DefaultRichMediaPresentingDelegate:" + this); reentrantLock = new ReentrantLock(); }
@Override public boolean shouldPresent(RichMedia richMedia) { PWLog.noise(TAG, "shouldPresent:" + richMedia); if (currentRichMedia == null) { PWLog.noise(TAG, "currentRichMedia is null"); } if (richMedia.isLockScreen()) { PWLog.noise(TAG, "isLockScreen is true"); return true; } try { reentrantLock.lock(); if (currentRichMedia == null) { PWLog.noise(TAG, "show:" + richMedia); currentRichMedia = richMedia; return true; } else { PWLog.noise(TAG, "add to queue:" + richMedia); richMediaQueue.add(richMedia); return false; } } finally { reentrantLock.unlock(); } }
@Override public void onPresent(RichMedia richMedia) { PWLog.noise(TAG, "onPresent" + richMedia); }
@Override public void onError(RichMedia richMedia, PushwooshException pushwooshException) { PWLog.error(TAG, pushwooshException + " richMedia:"+richMedia.toString()); tryShowNextRichMediaThreadSafety(); }
@Override public void onClose(RichMedia richMedia) { PWLog.noise(TAG, "onClose:" + richMedia); tryShowNextRichMediaThreadSafety(); }
private void tryShowNextRichMediaThreadSafety() { try { reentrantLock.lock(); tryShowNextRichMedia(); } finally { reentrantLock.unlock(); } }
private void tryShowNextRichMedia() { if (!richMediaQueue.isEmpty()) { currentRichMedia = richMediaQueue.poll(); PWLog.noise(TAG, "try manual show:" + currentRichMedia); RichMediaManager.present(currentRichMedia); } else { PWLog.noise(TAG, "richMediaQueue is empty"); currentRichMedia = null; } }}कस्टम साउंड पुश
Anchor link to- अपनी ऑडियो फ़ाइल को उचित फ़ोल्डर में रखें। नेटिव Android फ्रेमवर्क के लिए, आपकी फ़ाइलें
/app/src/main/res/rawफ़ोल्डर में रखी जानी चाहिए।
2. एक नोटिफिकेशन चैनल बनाएँ।
3. पुश संदेश कॉन्फ़िगर करते समय एक ध्वनि चुनें।

4. उस नोटिफिकेशन चैनल को सेट करें जिससे संदेश संबंधित होगा। ऐसा करने के लिए, “Android root params” फ़ील्ड में निम्नलिखित निर्दिष्ट करें: {"pw_channel": "PUSH NOTIFICATION CHANNEL NAME"} // _यहाँ आपको कस्टम ध्वनि वाले अपने चैनल के लिए नाम निर्दिष्ट करना होगा_
रिमोट API का उपयोग करने के मामले में, अपने /createMessage API अनुरोध के भीतर पैरामीटर निम्नानुसार सेट करें:
"android_root_params": {"pw_channel": "push"} // यहां आपको कस्टम साउंड वाले अपने चैनल का नाम निर्दिष्ट करना होगा, उदाहरण के लिए, push.wav साउंड वाली सूचनाओं के लिए "push"।"android_sound": "push" // यहां आपको एक्सटेंशन के बिना फ़ाइल का नाम निर्दिष्ट करना चाहिएएक बार जब आप उन पैरामीटर्स के साथ पुश भेजते हैं, तो चयनित ध्वनि के साथ नोटिफिकेशन चैनल Android 8+ वाले सभी उपकरणों के लिए बनाया जाता है।
अब, कस्टम ध्वनि के साथ पुश भेजने के लिए, आपको केवल उस ध्वनि से जुड़े चैनल को निर्दिष्ट करना होगा।
कस्टम नोटिफिकेशन ध्वनियों के लिए प्रोगार्ड नियम
Anchor link toयदि आपका ऐप कोड और संसाधन सिकोड़ने के लिए प्रोगार्ड का उपयोग करता है, तो अपनी ध्वनि फ़ाइलों को बरकरार रखना और बाहरी पुस्तकालयों के लिए उपलब्ध रखना महत्वपूर्ण है। यदि आप अपने build.gradle में minifyEnabled = true गुण का उपयोग करते हैं, तो अपने proguard-rules.pro में निम्नलिखित नियम जोड़ें:
-keep public class your.package.name.R$raw { *;}यदि आप shrinkResources=true गुण का उपयोग करके कोड सिकोड़ने के अलावा अपने ऐप के संसाधनों को सिकोड़ते हैं, तो आपको अतिरिक्त रूप से यह निर्दिष्ट करना चाहिए कि आप कौन से संसाधन रखना चाहते हैं। ऐसा करने के लिए, किसी भी नाम से एक नई XML फ़ाइल बनाएँ, इसे अपने प्रोजेक्ट में कहीं सहेजें (उदाहरण के लिए, res/xml में), और resources टैग में tools:keep पैरामीटर के तहत संसाधन नाम निर्दिष्ट करें:
<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@raw/*"/>Android SDK मेटा-डेटा फ्लैग्स की पूरी सूची
Anchor link toएक फ्लैग सेट करने के लिए, आपको application टैग के अंदर अपनी AndroidManifest.xml फ़ाइल में मेटा-डेटा ब्लॉक जोड़ना होगा। उदाहरण के लिए, यदि आप Pushwoosh एप्लिकेशन आईडी सेट करना चाहते हैं, तो अपनी AndroidManifest.xml फ़ाइल में निम्नलिखित कोड जोड़ें:
<meta-data android:name="com.pushwoosh.appid" android:value="XXXXX-XXXXX" />| फ्लैग | विवरण | संभावित मान |
|---|---|---|
| com.pushwoosh.appid | Pushwoosh एप्लिकेशन आईडी सेट करता है। | XXXXX-XXXXX |
| com.pushwoosh.senderid | Firebase प्रोजेक्ट सेंडर आईडी सेट करता है। | 123456789000 |
| com.pushwoosh.log_level | लॉगिंग स्तर सेट करता है। विवरण के लिए, लॉग स्तर को नियंत्रित करना देखें। | NONE / ERROR / WARN / INFO / DEBUG (default) / NOISE |
| com.pushwoosh.base_url | Pushwoosh सर्वर बेस यूआरएल को ओवरराइड करता है। | https://cp.pushwoosh.com/json/1.3/ (default) |
| com.pushwoosh.notification_service_extension | कस्टम NotificationServiceExtension। विवरण के लिए, अधिसूचना खोलने के व्यवहार को अनुकूलित करना देखें। | com.myapp.MyNotificationServiceExtension |
| com.pushwoosh.notification_factory | कस्टम NotificationFactory। विवरण के लिए, पुश नोटिफिकेशन को कस्टमाइज़ करना देखें। | com.myapp.MyNotificationFactory |
| com.pushwoosh.summary_notification_factory | कस्टम SummaryNotificationFactory। | com.myapp.MySummaryNotificationFactory |
| com.pushwoosh.multi_notification_mode | यदि सत्य है, तो अधिसूचना समूहीकृत की जाएगी। यदि असत्य है, तो केवल अंतिम प्राप्त अधिसूचना प्रदर्शित की जाएगी। | true / false (default) |
| com.pushwoosh.allow_server_communication | यदि सत्य है, तो SDK को Pushwoosh सर्वर पर नेटवर्क अनुरोध भेजने की अनुमति है। | true (default) / false |
| com.pushwoosh.handle_notifications_using_workmanager | यदि सत्य है, तो WorkManager को सूचनाओं को संभालने के लिए सेट किया गया है। | true / false (default) |
| com.pushwoosh.notification_icon | कस्टम अधिसूचना (छोटा) आइकन संसाधन नाम। यदि शून्य है, तो डिफ़ॉल्ट एप्लिकेशन आइकन का उपयोग किया जाएगा। | res/drawable-xxhdpi-v11/notification_small_icon.png / null |
| com.pushwoosh.notification_icon_color | अधिसूचना (छोटा) आइकन पृष्ठभूमि रंग। | #FFFFFF |
| com.pushwoosh.allow_collecting_device_data | यदि सत्य है, तो SDK को डिवाइस डेटा एकत्र करने और Pushwoosh को भेजने की अनुमति है। | true (default) / false |
| com.pushwoosh.allow_collecting_device_os_version | यदि सत्य है, तो SDK को डिवाइस OS संस्करण एकत्र करने और Pushwoosh को भेजने की अनुमति है। | true (default) / false |
| com.pushwoosh.allow_collecting_device_locale | यदि सत्य है, तो SDK को डिवाइस लोकेल एकत्र करने और Pushwoosh को भेजने की अनुमति है। | true (default) / false |
| com.pushwoosh.allow_collecting_device_model | यदि सत्य है, तो SDK को डिवाइस मॉडल एकत्र करने और Pushwoosh को भेजने की अनुमति है। | true (default) / false |
| com.pushwoosh.in_app_business_solutions_capping | push-unregister इन-ऐप को एक दिन में कितनी बार दिखाया जा सकता है, इसकी संख्या को सीमित करता है। | 1 (default), 2, …, n |
| com.pushwoosh.start_foreground_service | यदि सत्य है, तो PushwooshLocation.startLocationTracking() कॉल के साथ फोरग्राउंड सेवा शुरू की जाती है | true / false (default) |
| com.pushwoosh.foreground_service_notification_text | ”com.pushwoosh.start_foreground_service” कुंजी के लिए फोरग्राउंड सेवा शुरू होने पर बनाई गई अधिसूचना का पाठ सेट करता है। | Work in progress (default) |
| com.pushwoosh.foreground_service_notification_channel_name | ”com.pushwoosh.start_foreground_service” कुंजी के लिए फोरग्राउंड सेवा शुरू होने पर बनाई गई अधिसूचना के लिए चैनल का नाम सेट करता है। | Foreground service (default) |
| com.pushwoosh.trusted_package_names | निर्दिष्ट पैकेज के साथ Pushwoosh HWID साझा करने की अनुमति देता है | ”com.mycompany.myapp1, com.mycompany.myapp2” |
TTL (टाइम-टू-लिव) के माध्यम से पुश नोटिफिकेशन हटाना
Anchor link toTTL (टाइम-टू-लिव) का उपयोग करके एक निर्दिष्ट समय अवधि के बाद पुश नोटिफिकेशन को स्वचालित रूप से हटाने के लिए, इन चरणों का पालन करें:
-
एक कस्टम NotificationFactory बनाएँ। और जानें
-
onGenerateNotification()विधि में,Notification.BuilderयाNotificationCompat.Builderक्लास का उपयोग करके एक अधिसूचना बनाएँ औरsetTimeoutAfterविधि को कॉल करें:
public class YourNotificationFactory extends PushwooshNotificationFactory {
@Override public Notification onGenerateNotification(@NonNull PushMessage pushMessage) { Notification.Builder builder = new Notification.Builder(getApplicationContext(), addChannel(pushData));
Notification notification = builder.setContentText(pushData.getMessage()) .setContentTitle(title) .setContentText(text) // rest of your notification creation code .setTimeoutAfter(timeout) // time in milliseconds before the notification is canceled .build(); }}अपनी प्रतिक्रिया हमारे साथ साझा करें
Anchor link toआपकी प्रतिक्रिया हमें एक बेहतर अनुभव बनाने में मदद करती है, इसलिए यदि आपको SDK इंटीग्रेशन प्रक्रिया के दौरान कोई समस्या आती है तो हम आपसे सुनना पसंद करेंगे। यदि आपको कोई कठिनाई आती है, तो कृपया इस फ़ॉर्म के माध्यम से अपने विचार हमारे साथ साझा करने में संकोच न करें।