১. শুরু করার আগে
একটি মেসেজিং অ্যাপ তৈরি করা বেশ কঠিন কাজ। যদিও সামগ্রিক ব্যবহারকারীর অভিজ্ঞতা ব্যক্তিগত পছন্দের বিষয়, অ্যান্ড্রয়েড মেসেজিং এবং পিপল এপিআই (API) প্রদান করে, যা চ্যাটের অভিজ্ঞতাকে উন্নত ও সুসংহত করে।
এই কোডল্যাবে, আপনি শিখবেন কীভাবে এই এপিআইগুলো ব্যবহার করে অ্যান্ড্রয়েডে চ্যাট অ্যাপের জন্য একটি আকর্ষণীয় ইকোসিস্টেম তৈরি করা যায়। আপনি জেটচ্যাট অ্যাপটিকে সম্প্রসারিত করবেন, যেটি জেটপ্যাক কম্পোজ ব্যবহার করা একটি সাদামাটা ও অকার্যকর চ্যাট অ্যাপ।
পূর্বশর্ত
- অ্যান্ড্রয়েড ডেভেলপমেন্টের প্রাথমিক জ্ঞান
- বিজ্ঞপ্তি সম্পর্কে প্রাথমিক জ্ঞান
আপনি যা তৈরি করবেন
একটি বর্ধিত JetChat অ্যাপ যা নিম্নলিখিত কাজগুলো করে:
- নোটিফিকেশন ড্রয়ারের সংরক্ষিত কথোপকথন বিভাগে থাকা কথোপকথনগুলোর নোটিফিকেশন প্রদর্শন করে।
- এই নোটিফিকেশনগুলিতে থাকা রেফারেন্সগুলি এমন টার্গেট শেয়ার করে, যা আপনাকে আপনার অ্যাপের কথোপকথনে অংশ নিতে দেয়।
- আপনার অ্যাপকে উন্নত করে এমন সিস্টেম প্রদত্ত ডিফল্ট অভিজ্ঞতাগুলোর সুবিধা নিতে এই অবজেক্টগুলো তৈরির ক্ষেত্রে সর্বোত্তম অনুশীলন প্রয়োগ করা হয়।
আপনি যা শিখবেন
- নোটিফিকেশন ড্রয়ারের সংরক্ষিত কথোপকথন বিভাগে কথোপকথন-সম্পর্কিত নোটিফিকেশনগুলো কীভাবে দেখানো যায়।
- মেসেজিং এবং পিপল এপিআই দ্বারা সক্ষম বিভিন্ন অভিজ্ঞতাগুলো কীভাবে বুঝবেন
আপনার যা যা লাগবে
- গিট
- অ্যান্ড্রয়েড স্টুডিও
- একটি গিটহাব অ্যাকাউন্ট
২. প্রস্তুত হন
এর ভিত্তি হলো JetChat অ্যাপ । স্টার্টার কোডটি JetChat অ্যাপটিকে সম্প্রসারিত করে মেসেজিং এবং পিপল এপিআই-গুলোকে আরও ভালোভাবে প্রদর্শন করে।
স্টার্টার কোডটি নিন
এই কোডল্যাবের স্টার্টার কোড পেতে, এই ধাপগুলো অনুসরণ করুন:
- আপনার কমান্ড লাইন থেকে নিম্নলিখিত গিটহাব রিপোজিটরিটি ক্লোন করুন:
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- অ্যান্ড্রয়েড স্টুডিওতে প্রজেক্টটি খুলুন এবং তারপর ক্লিক করুন
অ্যাপটি চালান । এমুলেটর প্যানেলটি প্রদর্শিত হবে এবং অ্যাপটি দেখাবে।
JetChat অ্যাপের বর্ধিত সংস্করণটি অন্বেষণ করুন
- অ্যাপের Message #composers টেক্সট বক্সে একটি বার্তা লিখুন এবং তারপর Send-এ ট্যাপ করুন।
- অ্যাপ থেকে বেরিয়ে যান। কয়েক সেকেন্ড পর, আপনি একটি পুশ নোটিফিকেশন পাবেন, যাতে চ্যাটের কারো একটি উত্তর থাকবে।
৩. কথোপকথন বিজ্ঞপ্তি তৈরি করুন
অ্যান্ড্রয়েড ১১-এ এমন এপিআই চালু করা হয়েছে, যার ফলে চ্যাট-সম্পর্কিত নোটিফিকেশনগুলো নোটিফিকেশন ড্রয়ারের একটি নির্দিষ্ট অংশে দেখা যাবে, যা শুধুমাত্র কথোপকথনের জন্য ব্যবহৃত হয়।

নোটিফিকেশনটি অবশ্যই Notification.MessagingStyle ক্লাসের হতে হবে এবং একটি দীর্ঘস্থায়ী শেয়ারিং শর্টকাটকে রেফারেন্স করতে হবে। এই বিভাগে, আপনি শিখবেন কীভাবে কনভারসেশন সেকশনে কথোপকথন উপস্থাপনকারী এই নোটিফিকেশনগুলো দেখানোর জন্য এই API প্রয়োজনীয়তাগুলো পূরণ করতে হয়।
NotificationCompat.MessagingStyle ক্লাসের নোটিফিকেশন তৈরি করতে, এই ধাপগুলো অনুসরণ করুন:
- অ্যান্ড্রয়েড স্টুডিওর প্রজেক্ট ট্যাবে,
app>java>com.example.compose.jetchat>conversationক্লিক করুন এবং তারপরেConversationFragmentডাবল-ক্লিক করুন। -
ConversationFragment.ktফাইলে,ConversationFragmentক্লাসটি খুঁজুন এবং তারপরেcreateNotificationফাংশনেরNotificationকোড ব্লকটি খুঁজুন যেখানে নোটিফিকেশনটি তৈরি করা হয়। -
setContentTextমেথডটিকে একটিsetStyleমেথড দিয়ে প্রতিস্থাপন করুন, যা নোটিফিকেশনের স্টাইলকেNotificationCompat.MessagingStyleক্লাসে সেট করে। এই হেল্পার ক্লাসটিsetContextTextমেথড দিয়ে সেট করা মেসেজটির সাথে মেসেজ-সম্পর্কিত অতিরিক্ত তথ্য, যেমন এটি পাঠানোর সময় এবং প্রেরকের নাম, যোগ করে।
ConversationFragment.kt
private fun createNotification(
notificationId: Int,
message: Message,
person: Person,
shortcut: ShortcutInfoCompat,
time: Long
): Notification? {
...
.setStyle(NotificationCompat.MessagingStyle(person).addMessage(
NotificationCompat.MessagingStyle.Message(
message.content,
time,
person
)
)
)
...
.build()
}
অ্যাপটি চালান
- অ্যাপটি চালান।
- অ্যাপের Message #composers টেক্সট বক্সে একটি বার্তা লিখুন এবং তারপর Send-এ ট্যাপ করুন।
- অ্যাপ থেকে বেরিয়ে যান। আপনি আবার একটি পুশ নোটিফিকেশন পাবেন, কিন্তু এটির স্টাইল ভিন্ন। এতে একটি অ্যাভাটার এবং মেসেজটির জন্য একটি স্বতন্ত্র স্টাইল রয়েছে। তবে, আপনার নোটিফিকেশনগুলো সঠিক জায়গায় প্রদর্শিত হওয়ার আগে আরও কিছু কাজ বাকি আছে।
৪. কথোপকথনের জন্য শেয়ার টার্গেট তৈরি করুন
নোটিফিকেশনে আপনাকে একটি শেয়ারিং শর্টকাট বা শেয়ার টার্গেট উল্লেখ করতে হবে। শেয়ার টার্গেটগুলো shortcuts.xml ফাইলে সংজ্ঞায়িত করা থাকে এবং এগুলো প্রোগ্রাম্যাটিকভাবে সংজ্ঞায়িত শর্টকাটগুলো পরিচালনার এন্ট্রি পয়েন্ট হিসেবে কাজ করে। আপনার তৈরি করা শর্টকাটগুলো অ্যাপের কথোপকথনগুলোকে উপস্থাপন করে এবং আপনাকে সেই কথোপকথনের বিষয়বস্তু শেয়ার করার সুযোগ দেয়।
শেয়ার লক্ষ্যমাত্রা নির্ধারণ করুন
- প্রজেক্ট ট্যাবে,
resডিরেক্টরিটির উপর রাইট-ক্লিক করুন এবং তারপর New > Directory নির্বাচন করুন। - টেক্সট বক্সে
xmlলিখেEnterচাপুন (অথবা macOS-এreturnচাপুন)। -
xmlডিরেক্টরিতে রাইট-ক্লিক করুন এবং তারপর ফাইল নির্বাচন করুন। - টেক্সট বক্সে
shortcuts.xmlলিখুন এবং তারপরEnterচাপুন (অথবা macOS-এreturnচাপুন)। -
shortcuts.xmlফাইলে,text/plainটাইপের ডেটা শেয়ার করার জন্য শেয়ার টার্গেটটি ঘোষণা করুন:
শর্টকাট.xml
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<share-target android:targetClass="com.example.compose.jetchat.NavActivity">
<data android:mimeType="text/plain" />
<category android:name="com.example.compose.jetchat.share.TEXT_SHARE_TARGET" />
</share-target>
</shortcuts>
- প্রজেক্ট ট্যাবে,
manifestsক্লিক করুন এবং তারপরেAndroidManifest.xmlডাবল-ক্লিক করুন। -
AndroidManifest.xmlফাইলে,shortcuts.xmlফাইলটি সংজ্ঞায়িত করুন:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.compose.jetchat">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Jetchat.NoActionBar">
...
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</application>
</manifest>
-
AndroidManifest.xmlফাইলেরactivityকম্পোনেন্টে, শেয়ারিং লজিক ধারণকারী ইন্টেন্ট ফিল্টারটি সংজ্ঞায়িত করুন:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.compose.jetchat">
...
<activity
...
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
...
শর্টকাট সংজ্ঞায়িত করুন
প্রতিটি নোটিফিকেশনের জন্য আপনাকে প্রাসঙ্গিক শর্টকাটটি যুক্ত করতে হবে। আপনি প্রতিটি কথোপকথনের জন্য কেবল একটি অনন্য শর্টকাট নির্ধারণ করেন, কারণ এই অনন্য শর্টকাটটি সেই একটিমাত্র কন্ট্যাক্টকে প্রতিনিধিত্ব করে যার সাথে নোটিফিকেশনটি শেয়ার করা হয়।
শর্টকাট তৈরি করতে এই ধাপগুলো অনুসরণ করুন:
- প্রজেক্ট ট্যাবে,
app>java>com.example.compose.jetchat>conversation>utilএ ক্লিক করুন এবং তারপরেConversationUtilডাবল-ক্লিক করুন। -
ConversationUtil.ktফাইলে একটিgenerateShortcutফাংশন যোগ করুন:
ConversationUtil.kt
import android.content.Intent
import androidx.core.content.pm.ShortcutInfoCompat
import com.example.compose.jetchat.NavActivity
class ConversationUtil {
companion object {
...
fun generateShortcut(context: Context, shortcutId: String): ShortcutInfoCompat {
return ShortcutInfoCompat.Builder(context, shortcutId)
.setCategories(setOf(CATEGORY_SHARE))
.setLongLived(true)
.setShortLabel(shortcutId)
.setLongLabel(shortcutId)
.setIntent(
Intent(context, NavActivity::class.java)
.setAction(Intent.ACTION_VIEW)
)
.build()
}
এই ফাংশনটিতে কথোপকথনের জন্য প্রয়োজনীয় setPerson এবং setLongLived মেথডগুলো রয়েছে। পার্সন হলো শর্টকাটটির সাথে যুক্ত কন্ট্যাক্ট, এবং long-lived-এর মান true সেট করলে তা নিশ্চিত করে যে এই শর্টকাটটি সিস্টেম দ্বারা ক্যাশ করা হবে এবং UI-এর বিভিন্ন অংশে প্রদর্শিত হবে।
নোটিফিকেশনে শর্টকাটটি উল্লেখ করুন।
নোটিফিকেশনে আপনাকে শেয়ারিং শর্টকাটটির উল্লেখ করতে হবে। তবে, নোটিফিকেশনটি পাঠানোর আগেই আপনাকে শর্টকাটটি তৈরি করতে হবে।
এটি করার জন্য, এই ধাপগুলো অনুসরণ করুন:
-
ConversationFragment.ktফাইলেConversationFragmentক্লাসটি খুঁজুন। -
notificationভেরিয়েবল কল করার আগে, একটিshortcutভেরিয়েবল তৈরি করুন যাConversationUtil.generateShortcutথেকে তৈরি শর্টকাটটিকে রেফারেন্স করে। -
notificationভেরিয়েবলেরcreateNotificationমেথডে, প্যারামিটার হিসেবেnullএর পরিবর্তেshortcutভেরিয়েবলটি ব্যবহার করুন।
ConversationFragment.kt
private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
val shortcut = ConversationUtil.generateShortcut(context!!, message.author)
val notification = createNotification(notificationId, message, person, shortcut, time)
...
}
}
-
createNotificationমেথডের মধ্যেNotificationCompat.Builder#setShortcutInfoমেথডটি যোগ করুন এবং তারপর `shortcutভেরিয়েবলটিকে একটি প্যারামিটার হিসেবে পাস করুন।
ConversationFragment.kt
private fun createNotification(
notificatoinIf: Int,
messagin: Message,
person: Person,
shortcut: ShortcutInfoCompat?,
time: Long
): Notification {
...
return NotificationCompat.Builder(context!!, ConversationUtil.CHANNEL_MESSAGES)
...
.setShortcutInfo(shortcut)
.build()
}
শর্টকাটটি প্রকাশ করুন
- শর্টকাটটি প্রকাশ করতে,
simulateResponseAsANotificationফাংশনের মধ্যেnotificationManager.notifyমেথডের আগে,pushDynamicShortcutমেথডটি কল করুন:
ConversationFragment.kt
import androidx.core.content.pm.ShortcutManagerCompat
...private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
...
}
}
অ্যাপটি চালান
- অ্যাপটি চালান।
- অ্যাপের Message #composers টেক্সট বক্সে একটি বার্তা লিখুন এবং তারপর Send-এ ট্যাপ করুন।
- অ্যাপ থেকে বেরিয়ে যান। আপনি আবার একটি পুশ নোটিফিকেশন পাবেন, কিন্তু এটি কথোপকথন-সম্পর্কিত নোটিফিকেশন হিসেবে আরও স্পষ্টভাবে প্রদর্শিত হবে। অ্যাভাটার আইকনটি আরও স্পষ্ট এবং এতে অ্যাপ আইকনটি সংযুক্ত থাকবে। প্রেরক, সময় এবং টেক্সটও আরও সুবিন্যস্ত হবে।
৫. ঐচ্ছিক: বাবলগুলো সক্রিয় করুন
অ্যান্ড্রয়েড ৯-এ বাবলস চালু করা হয়েছিল এবং অ্যান্ড্রয়েড ১১-এ কথোপকথনের জন্য এটিকে উন্নত ও নতুনভাবে ব্যবহারোপযোগী করা হয়। বাবলস হলো বৃত্তাকার ওভারলে, যা আপনার কথোপকথনের অবতার হিসেবে কাজ করে। এগুলি অ্যাপ লঞ্চারে দেখা যায় এবং আপনাকে একটি প্রসারিত বাবলের মধ্যে সহজেই কথোপকথনের উত্তর দিতে সাহায্য করে। চালু করা হলেও, ব্যবহারকারীর পছন্দের উপর নির্ভর করে বাবলস ব্যবহার করা ঐচ্ছিক।
বাবলগুলো সক্রিয় করতে, এই ধাপগুলো অনুসরণ করুন:
-
AndroidManifest.xmlফাইলেallowEmbeddedএবংresizeableActivityঅ্যাট্রিবিউটগুলো যোগ করুন, এবং তারপর প্রত্যেকটির মানtrueসেট করুন:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
-
ConversationUtil.ktফাইলেরConversationUtilক্লাসে, বাবল মেটাডেটা যোগ করুন:
ConversationUtil.kt
import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat
fun createBubbleMetadata(context: Context, icon: IconCompat): NotificationCompat.BubbleMetadata {
// Create bubble intent
val target = Intent(context, NavActivity::class.java)
val bubbleIntent = PendingIntent.getActivity(context, REQUEST_BUBBLE, target, flagUpdateCurrent(mutable = true))
// Create bubble metadata
return NotificationCompat.BubbleMetadata.Builder(bubbleIntent, icon)
.setDesiredHeight(400)
.setSuppressNotification(true)
.build()
}
-
ConversationFragment.ktফাইলে, নোটিফিকেশনে বাবল মেটাডেটা তৈরি করুন এবং রেফারেন্স দিন:
ConversationFragment.kt
private fun createNotification(
notificatoinIf: Int,
messagin: Message,
person: Person,
shortcut: ShortcutInfoCompat?,
time: Long
): Notification {
...
// Reference the bubble metadata in the notification.
return NotificationCompat.Builder(context!!, ConversationUtil.CHANNEL_MESSAGES)
...
.setBubbleMetadata(ConversationUtil.createBubbleMetadata(context!!, person.icon!!))
...
.build()
}
অ্যাপটি চালান
- অ্যাপটি চালান।
- অ্যাপের Message #composers টেক্সট বক্সে একটি বার্তা লিখুন এবং তারপর Send-এ ট্যাপ করুন।
- অ্যাপ থেকে বেরিয়ে যান। কয়েক সেকেন্ড পর, আপনি চ্যাট থেকে একটি বাবলের আকারে একটি নোটিফিকেশন পাবেন।
- বাবলটিতে ট্যাপ করুন। বাবলটি থেকেই কথোপকথনটি শুরু হবে।

৬. ঐচ্ছিক: একটি লিঙ্ক শেয়ার করুন
আপনি শেয়ার টার্গেট ঘোষণা করেছেন এবং আপনার নোটিফিকেশনে সেগুলোর উল্লেখ করেছেন, যা শেয়ারশিটে আপনার কন্ট্যাক্টকে প্রদর্শিত হতেও সক্ষম করেছে। শেয়ারশিট হলো একটি বটম-আপ কম্পোনেন্ট যা একটি ACTION ইন্টেন্ট পাঠানো হলে দেখা যায়। শেয়ার টার্গেটগুলো শেয়ারশিটের শীর্ষে প্রদর্শিত হয় এবং আপনাকে আপনার কথোপকথনে রিচ কন্টেন্ট শেয়ার করার সুযোগ দেয়।
শেয়ারশিটটি চালু করতে, এই ধাপগুলো অনুসরণ করুন:
- আপনার ডিভাইসে গুগল ক্রোম খুলুন এবং তারপরে আপনার পছন্দের একটি ওয়েব পেজে যান, যেমন developer.android.com ।
- প্রয়োজনে ক্লিক করুন
আরও উল্লম্ব । - ক্লিক করুন
শেয়ার করুন । শেয়ারশিটটি স্ক্রিনের নিচে দেখা যাবে।

- সম্ভব হলে ক্লিক করুন।
জেটচ্যাট । ইউআরএলটি চ্যাটে শেয়ার করা হয়। - যদি আপনি না দেখেন
JetChat , ক্লিক করুন
সিস্টেম শেয়ারশিটটি চালু করতে , শেয়ারশিটটির উপর দিকে সোয়াইপ করে ক্লিক করুন।
জেটচ্যাট । ইউআরএলটি চ্যাটে শেয়ার করা হয়।
এটি একটি সাধারণ উদাহরণ। শেয়ার করার জন্য আরও সমৃদ্ধ ধরনের কন্টেন্ট রয়েছে। আরও তথ্যের জন্য, ‘অন্যান্য অ্যাপ থেকে সাধারণ ডেটা পুনরুদ্ধার’ দেখুন।
৭. অভিনন্দন
অভিনন্দন! এখন আপনি মেসেজিং এবং পিপল এপিআই ব্যবহার করে একটি অ্যান্ড্রয়েড অ্যাপে চ্যাট-সম্পর্কিত বৈশিষ্ট্য যুক্ত করার পদ্ধতি জেনে গেছেন। মেসেজিং উপভোগ করুন!