Android-এ লাইভ আপডেট
Pushwoosh pushwoosh-liveupdates মডিউলের (SDK 6.9.0 এবং পরবর্তী) মাধ্যমে Android লাইভ আপডেট সমর্থন করে। একটি লাইভ আপডেট হল একটি চলমান, প্রোগ্রেস-স্টাইল নোটিফিকেশন যা সিস্টেম লক স্ক্রিনে, নোটিফিকেশন ড্রয়ারে এবং স্ট্যাটাস বারে একটি স্ট্যাটাস চিপ হিসাবে প্রচার করে, যাতে ব্যবহারকারীরা আপনার অ্যাপ না খুলেই একটি কার্যকলাপ অনুসরণ করতে পারে।
পুরো জীবনচক্র সার্ভার থেকে চালিত হয়: আপনার ব্যাকএন্ড কার্যকলাপ শুরু হলে একটি পুশ পাঠায়, এটি অগ্রসর হওয়ার সাথে সাথে আরও পুশ পাঠায় এবং এটি শেষ হলে একটি চূড়ান্ত পুশ পাঠায়। SDK প্রতিটি পুশ স্বয়ংক্রিয়ভাবে রেন্ডার করে।
লাইভ আপডেট কী
Anchor link toলাইভ আপডেটগুলি Android 16 (API 36)-এ একটি ব্যবহারকারী-সূচিত, সময়-সংবেদনশীল কার্যকলাপ শুরু থেকে শেষ পর্যন্ত দেখানোর একটি উপায় হিসাবে চালু করা হয়েছিল। এগুলি প্ল্যাটফর্মের প্রোগ্রেস-কেন্দ্রিক নোটিফিকেশন এবং Notification.ProgressStyle API-এর উপর ভিত্তি করে তৈরি। ধারণাগতভাবে এগুলি iOS লাইভ অ্যাক্টিভিটিজের অ্যান্ড্রয়েড প্রতিরূপ।
এই পৃষ্ঠাটি শুধুমাত্র Pushwoosh ইন্টিগ্রেশন কভার করে। প্ল্যাটফর্মের আচরণ, প্রচারের নিয়ম এবং ডিজাইনের নির্দেশিকাগুলির জন্য, অফিসিয়াল অ্যান্ড্রয়েড ডকুমেন্টেশন দেখুন:
- 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-এ নির্ভরতা (dependency) যোগ করুন:
dependencies { implementation 'com.pushwoosh:pushwoosh-liveupdates:<latest-version>'}<latest-version>-কে Maven Central থেকে বর্তমান সংস্করণ দিয়ে প্রতিস্থাপন করুন।
মডিউলটি স্টার্টআপে স্বয়ংক্রিয়ভাবে আবিষ্কৃত হয়। এটি প্রয়োজনীয় POST_PROMOTED_NOTIFICATIONS অনুমতি ঘোষণা করে, তার নিজস্ব নোটিফিকেশন চ্যানেল নিবন্ধন করে এবং ডিফল্ট নোটিফিকেশন পাথের আগে লাইভ আপডেট পুশগুলিকে বাধা দেয়। কোনও অতিরিক্ত ইনিশিয়ালাইজেশন কোড নেই — SDK চলমান এবং প্রচারিত ফ্ল্যাগ সেট করে, বড় আইকন ডাউনলোড করে, অ্যাকশন বোতাম ম্যাপ করে এবং আপনার জন্য নোটিফিকেশন পোস্ট করে।
একটি লাইভ আপডেট পাঠান
Anchor link toআপনি Messaging API v2 এর মাধ্যমে android কন্টেন্ট ব্লকে একটি live_update অবজেক্ট যোগ করে লাইভ আপডেট পাঠান। একটি transactional অনুরোধ ব্যবহার করুন — একটি লাইভ আপডেট নির্দিষ্ট ব্যবহারকারীকে লক্ষ্য করে যার কার্যকলাপ এটি ট্র্যাক করছে। schedule ক্ষেত্রটি প্রয়োজনীয়; { "after": "0s" } অবিলম্বে পাঠায়। জীবনচক্রের তিনটি অপারেশন আছে, যা live_update.op-এ সেট করা হয়:
OPERATION_START— একটি কার্যকলাপের জন্য প্রথম পুশ। চলমান নোটিফিকেশন পোস্ট করে।OPERATION_UPDATE— একই কার্যকলাপের জন্য পরবর্তী পুশ। এটি নীরবে তার জায়গায় রিফ্রেশ করে।OPERATION_END— টার্মিনাল পুশ। নোটিফিকেশনটি খারিজ করে।
একই কার্যকলাপের অন্তর্গত সমস্ত পুশকে একই live_update.id শেয়ার করতে হবে। সেই আইডি আপডেটগুলিকে একসাথে বাঁধে এবং অ্যাপ থেকে আপডেটটি খারিজ করার জন্য আপনি এটি ব্যবহার করেন।
প্রতিটি পুশ নোটিফিকেশনটিকে সম্পূর্ণরূপে বর্ণনা করে — আগের পুশ থেকে কিছুই বহন করা হয় না। আপনি যে প্রতিটি ক্ষেত্র রাখতে চান, যেমন সেগমেন্ট এবং বড় আইকন, প্রতিটি OPERATION_UPDATE-এর সাথে পুনরায় পাঠান; একটি বাদ দেওয়া ক্ষেত্র অনুপস্থিত হিসাবে রেন্ডার করা হয়।
লাইভ আপডেট প্যারামিটার
Anchor link toএই কীগুলি android কন্টেন্ট ব্লকের live_update অবজেক্টের ভিতরে যায়। শিরোনাম, বডি এবং বড় আইকন স্ট্যান্ডার্ড অ্যান্ড্রয়েড পুশ ক্ষেত্রগুলি (title, body, custom_icon) ব্যবহার করে, যা live_update-এর পাশাপাশি পাঠানো হয়।
| প্যারামিটার | টাইপ | বিবরণ |
|---|---|---|
op | string | জীবনচক্র অপারেশন: OPERATION_START, OPERATION_UPDATE, বা OPERATION_END। আবশ্যক। |
id | string | একটি লাইভ আপডেটের সমস্ত পুশ দ্বারা শেয়ার করা স্থিতিশীল কার্যকলাপ আইডি। আবশ্যক। |
progress | int | অগ্রগতির মান, যা সেগমেন্টের দৈর্ঘ্যের সমষ্টির বিপরীতে পরিমাপ করা হয়। |
progress_indeterminate | bool | একটি নির্দিষ্ট মানের পরিবর্তে একটি অনির্দিষ্ট অ্যানিমেশন দেখান। |
progress_bar | bool | প্রোগ্রেস বারটি আদৌ দেখান। ডিফল্ট true। |
segments | array | অর্ডার করা প্রোগ্রেস সেগমেন্ট, প্রতিটি { "color": "#RRGGBB", "length": N }। |
extras | object | একটি কাস্টম স্টাইল প্রদানকারীতে পাস করা নির্বিচারে ডেটা। |
when | int64 | হেডার টাইম অ্যাঙ্কর, ইপক মিলিসেকেন্ডে। |
chronometer | bool | হেডার সময়টি একটি চলমান টাইমার হিসাবে দেখান। |
chronometer_count_down | bool | একটি চলমান টাইমার উপরে যাওয়ার পরিবর্তে নিচে গণনা করে। |
show_when | bool | হেডার টাইম কলামটি আদৌ দেখান। ডিফল্ট true। |
চারটি সময় ক্ষেত্র নিম্নলিখিতভাবে একত্রিত হয়: show_when false সেট করা হলে সময় লুকানো থাকে; অন্যথায় when হল অ্যাঙ্কর, chronometer এটিকে একটি লাইভ কাউন্টারে পরিণত করে, এবং 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", "live_update": { "op": "OPERATION_START", "id": "order_4521", "progress": 1, "segments": [ { "color": "#34A853", "length": 3 }, { "color": "#FBBC05", "length": 4 }, { "color": "#4285F4", "length": 3 } ], "extras": { "eta": "18:40" } } } } } } }, "schedule": { "after": "0s" }, "message_type": "MESSAGE_TYPE_TRANSACTIONAL" } }'আপডেট পুশ
Anchor link toযখনই কার্যকলাপটি এগিয়ে যায় তখন একই id সহ একটি OPERATION_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", "live_update": { "op": "OPERATION_UPDATE", "id": "order_4521", "progress": 7, "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": { "live_update": { "op": "OPERATION_END", "id": "order_4521" } } } } } }, "schedule": { "after": "0s" }, "message_type": "MESSAGE_TYPE_TRANSACTIONAL" } }'চেহারা কাস্টমাইজ করুন
Anchor link toSDK একটি ডিফল্ট প্রোগ্রেস স্টাইল সরবরাহ করে যা progress, progress_indeterminate, এবং 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" />live_update.extras-এ পাঠানো JSON পড়তে এবং আপনার নিজের ব্যবসায়িক ডেটার সাথে স্টাইলটি খাপ খাইয়ে নিতে LiveUpdateState.getExtras() ব্যবহার করুন।
আপনার অ্যাপ থেকে লাইভ আপডেট পরিচালনা করুন
Anchor link toসার্ভার প্রতিটি OPERATION_START, OPERATION_UPDATE, এবং OPERATION_END চালায়, তাই একটি লাইভ আপডেট পোস্ট বা রিফ্রেশ করার জন্য কোনও অ্যাপ-সাইড API নেই। PushwooshLiveUpdates ফ্যাসাড শুধুমাত্র সেই কাজগুলি কভার করে যা সার্ভার করতে পারে না — স্থানীয়ভাবে একটি আপডেট খারিজ করা এবং কোনটি স্ক্রিনে আছে তা পরীক্ষা করা।
import com.pushwoosh.liveupdates.PushwooshLiveUpdates;
// ব্যবহারকারী অ্যাপ-মধ্যস্থ কার্যকলাপ শেষ করলে একটি নির্দিষ্ট লাইভ আপডেট খারিজ করুন,// সার্ভারের টার্মিনাল "end" পুশের জন্য অপেক্ষা না করেPushwooshLiveUpdates.endLiveUpdate("order_4521");
// এই অ্যাপ দ্বারা বর্তমানে দেখানো কার্যকলাপ আইডিগুলির তালিকা করুনList<String> active = PushwooshLiveUpdates.getActiveIds();
// এই অ্যাপ যা কিছু দেখাচ্ছে তা পরিষ্কার করুন, উদাহরণস্বরূপ লগআউটেPushwooshLiveUpdates.endAllLiveUpdates();সমস্ত মেথড যেকোনো থ্রেড থেকে কল করা নিরাপদ এবং Android 16-এর নীচের ডিভাইসগুলিতে একটি নো-অপ।