Pushwoosh ইনবক্স UI অ্যান্ড্রয়েড সেট আপ করা
Pushwoosh ইনবক্স UI, Pushwoosh ইনবক্স ব্যাকএন্ডের উপরে একটি রেডি-মেড অ্যান্ড্রয়েড ইনবক্স স্ক্রিন (“বেল আইকন” অ্যাপ ইনবক্স) সরবরাহ করে। এটি পাঁচটি কার্ডের মধ্যে একটিতে মেসেজ রেন্ডার করে, ইনলাইন CTA বোতাম সমর্থন করে এবং XML অ্যাট্রিবিউট বা কোডের মাধ্যমে স্টাইল কাস্টমাইজেশনের জন্য উন্মুক্ত।
পূর্বশর্ত
Anchor link to- আপনার অ্যাপে আগে থেকেই বেস Pushwoosh অ্যান্ড্রয়েড SDK ইন্টিগ্রেট করা আছে এবং পুশ পাঠাচ্ছে।
- আপনার অ্যাপ মডিউলে Kotlin সাপোর্ট (
apply plugin: 'kotlin-android')।
লাইব্রেরি যোগ করুন
Anchor link toআপনার অ্যাপের build.gradle-এ Kotlin প্লাগইন এবং দুটি Pushwoosh মডিউল যোগ করুন:
apply plugin: 'kotlin-android'
dependencies { implementation 'com.pushwoosh:pushwoosh-inbox:6.+' implementation 'com.pushwoosh:pushwoosh-inbox-ui:6.+'}pushwoosh-inbox এবং pushwoosh-inbox-ui-কে আপনার বিদ্যমান com.pushwoosh:pushwoosh ডিপেন্ডেন্সির একই সংস্করণে পিন করুন। +-কে Pushwoosh অ্যান্ড্রয়েড SDK-এর বর্তমান সংস্করণ দিয়ে প্রতিস্থাপন করুন।
যদি আপনার অ্যাপ কোড সঙ্কুচিত করার জন্য ProGuard ব্যবহার করে, তাহলে ইনবক্স প্লাগইন ক্লাসটি রাখুন:
-keep public class com.pushwoosh.inbox.PushwooshInboxPlugin { *;}ইনবক্স দেখান
Anchor link toইনবক্সকে একটি স্বতন্ত্র স্ক্রিন হিসাবে উপস্থাপন করুন, অথবা এটিকে আপনার নিজের লেআউটের ভিতরে একটি ফ্র্যাগমেন্ট হিসাবে এম্বেড করুন।
একটি অ্যাক্টিভিটি হিসাবে:
startActivity(Intent(this, InboxActivity::class.java))একটি ফ্র্যাগমেন্ট হিসাবে:
supportFragmentManager.beginTransaction() .replace(R.id.inboxContainer, PushwooshInboxUi.createInboxFragment()) .commitAllowingStateLoss()কার্ডের প্রকারভেদ
Anchor link toইনবক্স UI প্রতিটি মেসেজের জন্য একটি কার্ডের প্রকার নির্ধারণ করে। এই নির্ধারক পুশ পেলোডের data অবজেক্ট থেকে displayType পড়ে, যা SDK actionParams-এর অধীনে সরবরাহ করে। একটি displayType যা একটি পরিচিত কার্ডের প্রকারের নাম দেয়, সেটি সবসময় সেই প্রকারটি রেন্ডার করে, শুধুমাত্র যদি প্রকারের প্রয়োজনীয় ফিল্ডগুলি অনুপস্থিত থাকে তবে classic-এ ফিরে যায়। এই নির্ধারণটি নীচের হিউরিস্টিক সেটিংয়ের উপর নির্ভর করে না।
যখন displayType অনুপস্থিত থাকে, তখন মেসেজটি একটি সাধারণ সারি হিসাবে রেন্ডার হয়, যদি না আপনি ইমেজ/টেক্সট হিউরিস্টিক বেছে নেন:
PushwooshInboxStyle.richCardsHeuristicEnabled = trueহিউরিস্টিক চালু থাকলে, কোনো শিরোনাম ছাড়া একটি ছবি banner রেন্ডার করে, শিরোনাম এবং বডি সহ একটি ছবি captioned রেন্ডার করে, এবং অন্য কিছু classic-এ ফিরে যায়।
displayType | উপস্থিতি | প্রয়োজনীয় পেলোড ফিল্ড | এতে অবনমিত হয় |
|---|---|---|---|
banner | ফুল-ব্লিড ছবি, কোনো টেক্সট নেই | ছবি (মেসেজ আইকন বা data.attachment) | ছবি না থাকলে classic |
captioned | উপরে ছবি, নিচে শিরোনাম + বডি | ছবি, মেসেজের title এবং content | ছবি, শিরোনাম বা বডি অনুপস্থিত থাকলে classic |
classic | আইকন + শিরোনাম + বডি | — (শিরোনাম, বডি এবং আইকন প্রত্যাশিত) | — |
carousel | সোয়াইপযোগ্য মাল্টি-ইমেজ গ্যালারি | মেসেজের title এবং content, data.carousel (১-৫টি স্লাইড) | কোনো স্লাইড বা শিরোনাম/বডি না থাকলে classic |
video | প্লে ব্যাজ সহ পোস্টার, ট্যাপ করলে ফুল-স্ক্রিন প্লেয়ার | data.video (url + ঐচ্ছিক poster) | কোনো বর্ণনাকারী না থাকলে classic |
iOS InboxKit-এর Apple Wallet কার্ডের কোনো অ্যান্ড্রয়েড প্রতিরূপ নেই। displayType: "wallet" সহ একটি মেসেজ অ্যান্ড্রয়েডে সবসময় classic হিসাবে রেন্ডার হয়।
ক্যারোসেল কার্ড
Anchor link toস্লাইডগুলি data.carousel-এর মধ্যে থাকে। প্রতিটি স্লাইডের জন্য একটি image প্রয়োজন। title (ক্যাপশন ওভারলে) এবং url (ট্যাপ করলে খোলা হয়) ঐচ্ছিক। ছবি ছাড়া একটি স্লাইড বাদ দেওয়া হয়, এবং সর্বাধিক ৫টি স্লাইড দেখানো হয়।
{ "request": { "application": "XXXXX-XXXXX", "auth": "API_TOKEN", "notifications": [{ "send_date": "now", "content": "Swipe through this week's drops", "inbox_days": 7, "data": { "displayType": "carousel", "carousel": [ { "image": "https://cdn.example.com/inbox/1.jpg", "title": "New in", "url": "myapp://product/1" }, { "image": "https://cdn.example.com/inbox/2.jpg", "title": "On sale", "url": "myapp://product/2" } ] }, "platforms": [3] }] }}ভিডিও কার্ড
Anchor link toবর্ণনাকারী data.video-এর মধ্যে থাকে: url প্রয়োজনীয়, poster একটি ঐচ্ছিক প্রিভিউ ছবি। পোস্টারে ট্যাপ করলে একটি ফুল-স্ক্রিন প্লেয়ার খোলে।
{ "request": { "application": "XXXXX-XXXXX", "auth": "API_TOKEN", "notifications": [{ "send_date": "now", "content": "Tap to play", "inbox_days": 7, "data": { "displayType": "video", "video": { "url": "https://cdn.example.com/inbox/clip.mp4", "poster": "https://cdn.example.com/inbox/poster.jpg" } }, "platforms": [3] }] }}একটি মেসেজ থেকে কাস্টম ডেটা পড়ুন
Anchor link toইনবক্সে একটি পুশ দেখানোর জন্য, Messages API createMessage অনুরোধে অবশ্যই inbox_image, inbox_date, বা inbox_days অন্তর্ভুক্ত থাকতে হবে। এই ফিল্ডগুলির একটি ছাড়া, পুশটি একটি সাধারণ নোটিফিকেশন হিসাবে বিতরণ করা হয় এবং ইনবক্স ফিডে পৌঁছায় না। ফ্রি-ফর্ম কাস্টম ডেটা data-এর অধীনে যায়, যা SDK InboxMessage-এ actionParams হিসাবে প্রকাশ করে:
PushwooshInboxUi.onMessageClickListener = OnInboxMessageClickListener { message -> val params = message.actionParams?.let { JSONObject(it) } val promoId = params?.optString("promo_id") if (!promoId.isNullOrEmpty()) { navigateToPromo(promoId) }}ইনলাইন CTA বোতাম যোগ করুন
Anchor link toএকটি মেসেজ data.buttons-এর ভিতরে ইনলাইন কল-টু-অ্যাকশন বোতাম বহন করতে পারে:
{ "request": { "application": "XXXXX-XXXXX", "auth": "API_TOKEN", "notifications": [{ "send_date": "now", "content": "Tap a button to claim or save", "inbox_image": "https://cdn.example.com/inbox/promo.png", "inbox_days": 7, "data": { "displayType": "captioned", "promo_id": "SUMMER2026", "buttons": [ { "title": "Claim", "url": "https://example.com/promo/SUMMER2026" }, { "title": "Read", "action": "markRead" }, { "title": "Save", "action": "custom", "tag": "save_promo" } ] }, "platforms": [3] }] }}প্রতিটি বোতামের একটি title প্রয়োজন। সমাধান এই অগ্রাধিকার অনুসরণ করে:
actionযদিdismissবাmarkRead(কেস-ইনসেনসিটিভ) সেট করা থাকে, তাহলে সেই অ্যাকশনটি চলে।- অন্যথায়, একটি খালি নয় এবং পার্সযোগ্য
urlএকটিopenURLঅ্যাকশনে সমাধান হয়। - অন্যথায়, ট্যাপটি একটি কাস্টম অ্যাকশনে সমাধান হয়, এবং বোতাম অবজেক্টের প্রতিটি অতিরিক্ত কী আপনার লিসেনারে তার পেলোড হিসাবে ফরোয়ার্ড করা হয়।
PushwooshInboxUi.onButtonClickListener থেকে ট্যাপগুলি ইন্টারসেপ্ট করুন। SDK-কে বোতামের ডিফল্ট অ্যাকশন সম্পাদন করতে দিতে true রিটার্ন করুন, এবং এটিকে দমন করতে false রিটার্ন করুন:
PushwooshInboxUi.onButtonClickListener = OnInboxButtonClickListener { message, button -> when (val action = button.action) { is InboxCardButton.Action.OpenUrl -> true InboxCardButton.Action.Dismiss, InboxCardButton.Action.MarkRead -> true is InboxCardButton.Action.Custom -> { when (action.payload.optString("tag")) { "save_promo" -> saveCurrentPromoLocally(message) } true } }}স্টাইল কাস্টমাইজ করুন
Anchor link toPushwooshInboxStyle-এর মাধ্যমে কোড থেকে রঙ, ফন্ট এবং খালি/ত্রুটি অবস্থা সেট করুন:
PushwooshInboxStyle.accentColor = ContextCompat.getColor(this, R.color.brand_accent)PushwooshInboxStyle.titleColor = ContextCompat.getColor(this, R.color.brand_title)PushwooshInboxStyle.listEmptyText = "You have no messages yet"PushwooshInboxStyle.showToolbar = falseঅথবা একই অ্যাট্রিবিউটের সেট একটি থিম হিসাবে প্রয়োগ করুন, যা attrs.xml-এ তালিকাভুক্ত আছে: inboxAccentColor, inboxTitleColor, inboxBackgroundColor, inboxDefaultIcon, এবং বাকি রঙ এবং উপস্থিতির অ্যাট্রিবিউট। উভয় পদ্ধতি, এবং একটি সম্পূর্ণ নমুনা অ্যাপ, pushwoosh-inbox-ui-android-sdk InboxSample রিপোজিটরিতে আছে।
অপঠিত মেসেজের ব্যাজ
Anchor link toPushwooshInbox.unreadMessagesCount { result -> if (result.isSuccess) { val count = result.data } else { Log.e("App", "Failed to get unread count", result.exception) }}