Android-এ লাইভ আপডেট
Pushwoosh pushwoosh-liveupdates মডিউলের (SDK 6.9.0 এবং পরবর্তী) মাধ্যমে Android লাইভ আপডেট সাপোর্ট করে। একটি লাইভ আপডেট হল একটি চলমান, প্রোগ্রেস-স্টাইল নোটিফিকেশন যা সিস্টেম লক স্ক্রিনে, নোটিফিকেশন ড্রয়ারে এবং স্ট্যাটাস বারে একটি স্ট্যাটাস চিপ হিসাবে প্রচার করে, যাতে ব্যবহারকারীরা আপনার অ্যাপ না খুলেই একটি কার্যকলাপ অনুসরণ করতে পারে।
পুরো জীবনচক্রটি সার্ভার থেকে চালিত হয়: আপনার ব্যাকএন্ড কার্যকলাপ শুরু হলে একটি পুশ পাঠায়, এটি অগ্রসর হওয়ার সাথে সাথে আরও পুশ পাঠায় এবং এটি শেষ হলে একটি চূড়ান্ত পুশ পাঠায়। SDK প্রতিটি পুশ স্বয়ংক্রিয়ভাবে রেন্ডার করে।
লাইভ আপডেট কী
Anchor link toলাইভ আপডেট Android 16 (API 36)-এ চালু করা হয়েছিল ব্যবহারকারী-সূচিত, সময়-সংবেদনশীল কার্যকলাপ শুরু থেকে শেষ পর্যন্ত দেখানোর একটি উপায় হিসাবে। এগুলি প্ল্যাটফর্মের প্রোগ্রেস-কেন্দ্রিক নোটিফিকেশন এবং Notification.ProgressStyle API-এর উপর ভিত্তি করে তৈরি। ধারণাগতভাবে এগুলি iOS লাইভ অ্যাক্টিভিটিজের Android প্রতিরূপ।
এই পৃষ্ঠাটি শুধুমাত্র Pushwoosh ইন্টিগ্রেশন কভার করে। প্ল্যাটফর্মের আচরণ, প্রচারের নিয়ম এবং ডিজাইনের নির্দেশিকাগুলির জন্য, অফিসিয়াল Android ডকুমেন্টেশন দেখুন:
- Progress-centric notifications
- Create live update notifications (Views)
- Create live update notifications (Compose)
কখন লাইভ আপডেট ব্যবহার করবেন
Anchor link toলাইভ আপডেটগুলি এমন একটি কার্যকলাপের জন্য যা চলমান, ব্যবহারকারী-সূচিত এবং সময়-সংবেদনশীল — যার একটি স্পষ্ট শুরু এবং শেষ আছে এবং ব্যবহারকারী এই মুহূর্তে সক্রিয়ভাবে সেটির ಬಗ್ಗೆ যত্নশীল। Pushwoosh গ্রাহকদের জন্য সাধারণ পরিস্থিতি:
- খাবার ডেলিভারি — অর্ডার গৃহীত হয়েছে, প্রস্তুত করা হচ্ছে, ডেলিভারির জন্য বের হয়েছে, পৌঁছাচ্ছে।
- রাইড-হেলিং এবং ট্যাক্সি — ড্রাইভার নির্ধারিত হয়েছে, পথে আছে, পৌঁছাচ্ছে, ট্রিপ চলছে।
- অর্ডার এবং চালান ট্র্যাকিং — একটি অর্ডারের লাইভ স্ট্যাটাস যা সক্রিয়ভাবে ট্রানজিটে আছে।
- লাইভ স্পোর্টস এবং মিডিয়া — খেলা চলার সাথে সাথে ম্যাচের স্কোর এবং সময়।
- ফিটনেস — একটি সক্রিয় ওয়ার্কআউট বা দৌড়, যেখানে অতিবাহিত সময় এবং অগ্রগতি দেখানো হয়।
- ফিনটেক — একটি লেনদেন বা যাচাইকরণ প্রবাহ যা তার বিভিন্ন পর্যায়ের মধ্য দিয়ে যাচ্ছে।
যেহেতু জীবনচক্রটি বাস্তব ঘটনা দ্বারা চালিত হয় যা আপনার ব্যাকএন্ড ইতিমধ্যে জানে (একটি অর্ডারের স্থিতি পরিবর্তন হয়, একজন কুরিয়ার চলে), একটি লাইভ আপডেট সাধারণত আপনার বিদ্যমান ইভেন্ট প্রবাহের সাথে সংযুক্ত একটি API কল — এমন কিছু নয় যা একজন ব্যক্তি হাতে পাঠায়।
প্রয়োজনীয়তা
Anchor link to- Android 16 (API 36) বা নতুন। পুরানো ডিভাইসগুলিতে মডিউলটি নিষ্ক্রিয় থাকে এবং প্রতিটি লাইভ আপডেট API কল একটি নিরাপদ নো-অপ (no-op)।
- Pushwoosh Android SDK 6.9.0 বা পরবর্তী।
pushwoosh-liveupdates মডিউল যোগ করুন
Anchor link toআপনার app/build.gradle-এ নির্ভরতা যোগ করুন:
dependencies { implementation 'com.pushwoosh:pushwoosh-liveupdates:<latest-version>'}<latest-version>-কে Maven Central থেকে বর্তমান সংস্করণ দিয়ে প্রতিস্থাপন করুন।
মডিউলটি স্টার্টআপে স্বয়ংক্রিয়ভাবে আবিষ্কৃত হয়। এটি প্রয়োজনীয় POST_PROMOTED_NOTIFICATIONS অনুমতি ঘোষণা করে, তার নিজস্ব নোটিফিকেশন চ্যানেল নিবন্ধন করে এবং ডিফল্ট নোটিফিকেশন পাথের আগে লাইভ আপডেট পুশগুলিকে আটকায়। কোনও অতিরিক্ত ইনিশিয়ালাইজেশন কোড নেই — SDK চলমান এবং প্রচারিত ফ্ল্যাগ সেট করে, বড় আইকন ডাউনলোড করে, অ্যাকশন বোতাম ম্যাপ করে এবং আপনার জন্য নোটিফিকেশন পোস্ট করে।
একটি লাইভ আপডেট পাঠান
Anchor link toআপনি Messaging API v2 এর মাধ্যমে android কন্টেন্ট ব্লকের root_params অবজেক্টে লাইভ আপডেট ফিল্ড যোগ করে লাইভ আপডেট পাঠান। একটি transactional অনুরোধ ব্যবহার করুন — একটি লাইভ আপডেট নির্দিষ্ট ব্যবহারকারীকে লক্ষ্য করে যার কার্যকলাপ এটি ট্র্যাক করছে। schedule ফিল্ডটি আবশ্যক; { "after": "0s" } অবিলম্বে পাঠায়। জীবনচক্রের তিনটি অপারেশন আছে, যা pw_live_op-এ সেট করা হয়:
start— একটি কার্যকলাপের জন্য প্রথম পুশ। চলমান নোটিফিকেশন পোস্ট করে।update— একই কার্যকলাপের জন্য একটি পরবর্তী পুশ। এটি নীরবে জায়গায় রিফ্রেশ করে।end— টার্মিনাল পুশ। নোটিফিকেশনটি খারিজ করে।
একই কার্যকলাপের অন্তর্গত সমস্ত পুশকে একই pw_live_id শেয়ার করতে হবে। সেই আইডি আপডেটগুলিকে একসাথে বাঁধে এবং অ্যাপ থেকে আপডেটটি খারিজ করার জন্য আপনি এটিই ব্যবহার করেন।
প্রতিটি পুশ সম্পূর্ণরূপে নোটিফিকেশন বর্ণনা করে — আগের পুশ থেকে কিছুই বহন করা হয় না। আপনি যে সমস্ত ফিল্ড রাখতে চান, যেমন সেগমেন্ট এবং বড় আইকন, প্রতিটি update-এর সাথে পুনরায় পাঠান; একটি বাদ দেওয়া ফিল্ড অনুপস্থিত হিসাবে রেন্ডার করা হয়।
লাইভ আপডেট প্যারামিটার
Anchor link toএই কীগুলি android কন্টেন্ট ব্লকের root_params অবজেক্টের ভিতরে যায়। শিরোনাম, বডি এবং বড় আইকন স্ট্যান্ডার্ড Android পুশ ফিল্ড (title, body, custom_icon) ব্যবহার করে।
| প্যারামিটার | টাইপ | বর্ণনা |
|---|---|---|
pw_live_op | string | জীবনচক্র অপারেশন: start, update, বা end। আবশ্যক। |
pw_live_id | string | একটি লাইভ আপডেটের সমস্ত পুশ দ্বারা শেয়ার করা স্থিতিশীল কার্যকলাপ আইডি। আবশ্যক। |
pw_live_progress | int | অগ্রগতির মান, যা সেগমেন্টের দৈর্ঘ্যের যোগফলের সাথে পরিমাপ করা হয়। |
pw_live_progress_indeterminate | bool | একটি নির্দিষ্ট মানের পরিবর্তে একটি অনির্দিষ্ট অ্যানিমেশন দেখান। |
pw_live_segments | JSON string | অর্ডার করা অগ্রগতি সেগমেন্ট, প্রতিটি {"color": "#RRGGBB", "length": N}। |
pw_live_extras | JSON string | একটি কাস্টম স্টাইল প্রদানকারীতে পাস করা নির্বিচারে ডেটা। |
pw_live_when | long | হেডার সময় অ্যাঙ্কর, ইপক মিলিসেকেন্ডে। |
pw_live_chronometer | bool | হেডার সময়কে একটি চলমান টাইমার হিসাবে দেখান। |
pw_live_chronometer_count_down | bool | একটি চলমান টাইমার উপরে যাওয়ার পরিবর্তে নিচে গণনা করে। |
pw_live_show_when | bool | হেডার সময় কলামটি আদৌ দেখান। ডিফল্ট true। |
চারটি সময় ক্ষেত্র নিম্নলিখিতভাবে একত্রিত হয়: pw_live_show_when false সেট করা হলে সময় লুকানো থাকে; অন্যথায় pw_live_when হল অ্যাঙ্কর, pw_live_chronometer এটিকে একটি লাইভ কাউন্টারে পরিণত করে, এবং pw_live_chronometer_count_down সেই কাউন্টারটিকে পিছনের দিকে চালায়।
স্টার্ট পুশ
Anchor link tocurl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactional": { "application": "XXXXX-XXXXX", "platforms": ["ANDROID"], "users": { "list": ["customer-42"] }, "payload": { "content": { "localized_content": { "default": { "android": { "title": "Order #4521", "body": "We are preparing your order", "custom_icon": "https://example.com/restaurant.png", "root_params": { "pw_live_op": "start", "pw_live_id": "order_4521", "pw_live_progress": "1", "pw_live_segments": "[{\"color\":\"#34A853\",\"length\":3},{\"color\":\"#FBBC05\",\"length\":4},{\"color\":\"#4285F4\",\"length\":3}]", "pw_live_extras": "{\"eta\":\"18:40\"}" } } } } } }, "schedule": { "after": "0s" }, "message_type": "MESSAGE_TYPE_TRANSACTIONAL" } }'আপডেট পুশ
Anchor link toযখনই কার্যকলাপটি এগিয়ে যায় তখন একই pw_live_id দিয়ে একটি update পাঠান। সেগমেন্ট এবং আইকন পুনরাবৃত্তি করুন — একটি আপডেট যা এগুলি বাদ দেয় তা এগুলি ছাড়াই রেন্ডার হয়।
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactional": { "application": "XXXXX-XXXXX", "platforms": ["ANDROID"], "users": { "list": ["customer-42"] }, "payload": { "content": { "localized_content": { "default": { "android": { "title": "Order #4521", "body": "Your courier is on the way", "custom_icon": "https://example.com/restaurant.png", "root_params": { "pw_live_op": "update", "pw_live_id": "order_4521", "pw_live_progress": "7", "pw_live_segments": "[{\"color\":\"#34A853\",\"length\":3},{\"color\":\"#FBBC05\",\"length\":4},{\"color\":\"#4285F4\",\"length\":3}]" } } } } } }, "schedule": { "after": "0s" }, "message_type": "MESSAGE_TYPE_TRANSACTIONAL" } }'এন্ড পুশ
Anchor link toটার্মিনাল পুশের জন্য শুধুমাত্র অপারেশন এবং আইডি প্রয়োজন।
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \ -H "Authorization: Token YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "transactional": { "application": "XXXXX-XXXXX", "platforms": ["ANDROID"], "users": { "list": ["customer-42"] }, "payload": { "content": { "localized_content": { "default": { "android": { "root_params": { "pw_live_op": "end", "pw_live_id": "order_4521" } } } } } }, "schedule": { "after": "0s" }, "message_type": "MESSAGE_TYPE_TRANSACTIONAL" } }'চেহারা কাস্টমাইজ করুন
Anchor link toSDK pw_live_progress, pw_live_progress_indeterminate, এবং pw_live_segments থেকে তৈরি একটি ডিফল্ট প্রোগ্রেস স্টাইল সরবরাহ করে। প্রোগ্রেস বারের সম্পূর্ণ নিয়ন্ত্রণ নিতে, LiveUpdateProgressStyleProvider প্রয়োগ করুন এবং নিজে একটি Notification.ProgressStyle আকার দিন।
প্রদানকারী হল একমাত্র কাস্টমাইজেশন পয়েন্ট। SDK এখনও চ্যানেল সেটআপ, চলমান এবং প্রচারিত ফ্ল্যাগ, বড় আইকন, অ্যাকশন বোতাম এবং হেডার সময়ের মালিক — একটি কাস্টম প্রদানকারী শুধুমাত্র প্রোগ্রেস বারকে আকার দিতে পারে, তাই এটি প্রচারের যোগ্যতা ভঙ্গ করতে পারে না। এটি অবশ্যই স্টেটলেস হতে হবে: শুধুমাত্র সরবরাহ করা LiveUpdateState থেকে প্রত্যাবর্তিত স্টাইলটি প্রাপ্ত করুন। যদি এটি থ্রো করে, SDK ডিফল্ট স্টাইলে ফিরে যায় এবং নোটিফিকেশনটি এখনও পোস্ট হয়।
import android.app.Notification;import androidx.annotation.NonNull;import com.pushwoosh.liveupdates.LiveUpdateProgressStyleProvider;import com.pushwoosh.liveupdates.LiveUpdateSegment;import com.pushwoosh.liveupdates.LiveUpdateState;import java.util.List;
public class OrderStyleProvider implements LiveUpdateProgressStyleProvider { @NonNull @Override public Notification.ProgressStyle createStyle(@NonNull LiveUpdateState state) { Notification.ProgressStyle style = new Notification.ProgressStyle(); if (state.getProgress() != null) { style.setProgress(state.getProgress()); } style.setProgressIndeterminate(state.isProgressIndeterminate());
List<LiveUpdateSegment> segments = state.getSegments(); int boundary = 0; for (int i = 0; i < segments.size(); i++) { LiveUpdateSegment seg = segments.get(i); style.addProgressSegment( new Notification.ProgressStyle.Segment(seg.getLength()).setColor(seg.getColor())); boundary += seg.getLength(); if (i < segments.size() - 1) { style.addProgressPoint(new Notification.ProgressStyle.Point(boundary)); } } return style; }}import android.app.Notificationimport com.pushwoosh.liveupdates.LiveUpdateProgressStyleProviderimport com.pushwoosh.liveupdates.LiveUpdateState
class OrderStyleProvider : LiveUpdateProgressStyleProvider { override fun createStyle(state: LiveUpdateState): Notification.ProgressStyle { val style = Notification.ProgressStyle() state.progress?.let { style.setProgress(it) } style.setProgressIndeterminate(state.isProgressIndeterminate)
val segments = state.segments var boundary = 0 segments.forEachIndexed { i, seg -> style.addProgressSegment( Notification.ProgressStyle.Segment(seg.length).setColor(seg.color)) boundary += seg.length if (i < segments.size - 1) { style.addProgressPoint(Notification.ProgressStyle.Point(boundary)) } } return style }}AndroidManifest.xml-এ একটি <meta-data> ট্যাগ দিয়ে প্রদানকারীকে নিবন্ধন করুন। ক্লাসটির অবশ্যই একটি পাবলিক নো-আর্গুমেন্ট কনস্ট্রাক্টর থাকতে হবে।
<meta-data android:name="com.pushwoosh.LIVE_UPDATE_STYLE_PROVIDER" android:value="com.example.OrderStyleProvider" />pw_live_extras-এ পাঠানো JSON পড়তে এবং আপনার নিজের ব্যবসায়িক ডেটার সাথে স্টাইলটি মানিয়ে নিতে LiveUpdateState.getExtras() ব্যবহার করুন।
আপনার অ্যাপ থেকে লাইভ আপডেট পরিচালনা করুন
Anchor link toসার্ভার প্রতিটি start, update, এবং end পরিচালনা করে, তাই একটি লাইভ আপডেট পোস্ট বা রিফ্রেশ করার জন্য কোনও অ্যাপ-সাইড API নেই। PushwooshLiveUpdates ফ্যাসাড শুধুমাত্র সেই কাজগুলি কভার করে যা সার্ভার করতে পারে না — স্থানীয়ভাবে একটি আপডেট খারিজ করা এবং কোনগুলি স্ক্রিনে আছে তা পরীক্ষা করা।
import com.pushwoosh.liveupdates.PushwooshLiveUpdates;
// ব্যবহারকারী যখন অ্যাপ-মধ্যস্থ কার্যকলাপ শেষ করে তখন একটি নির্দিষ্ট লাইভ আপডেট খারিজ করুন,// সার্ভারের টার্মিনাল "end" পুশের জন্য অপেক্ষা না করেPushwooshLiveUpdates.endLiveUpdate("order_4521");
// এই অ্যাপ দ্বারা বর্তমানে দেখানো কার্যকলাপ আইডিগুলির তালিকা করুনList<String> active = PushwooshLiveUpdates.getActiveIds();
// এই অ্যাপ যা কিছু দেখাচ্ছে তা পরিষ্কার করুন, উদাহরণস্বরূপ লগআউটের সময়PushwooshLiveUpdates.endAllLiveUpdates();সমস্ত মেথড যেকোনো থ্রেড থেকে কল করা নিরাপদ এবং Android 16-এর নীচের ডিভাইসগুলিতে একটি নো-অপ।