Dynamic Island হল iPhone 14 Pro এবং সমস্ত iPhone 15/16 এর উপরের অংশে একটি ইন্টারঅ্যাকটিভ এলাকা, যা নোটিফিকেশন, ব্যাকগ্রাউন্ড অ্যাক্টিভিটি এবং সিস্টেম ইন্ডিকেটরগুলিকে একটি গতিশীল জোনে একত্রিত করে। ঐতিহ্যবাহী notch-এর বিপরীতে, Dynamic Island বর্তমান প্রসঙ্গ অনুযায়ী তার আকার এবং আকৃতি পরিবর্তন করে। Apple (WWDC 2024) অনুসারে, ব্যবহারকারীরা Dynamic Island-এর সাথে গড়ে দিনে 12 বার ইন্টারঅ্যাক্ট করেন — ট্যাপ, লং প্রেস এবং ActivityKit-এর সাথে Live Activities-এর মাধ্যমে। iOS-এ অ্যানিমেশন সম্পর্কে আরও জানতে Corner Radius নিবন্ধটি পড়ুন।
মূল পয়েন্ট
Dynamic Island হল Apple-এর সফ্টওয়্যার-হার্ডওয়্যার সমাধানের উপর ভিত্তি করে একটি ইন্টারঅ্যাকটিভ এলাকা, যা সেপ্টেম্বর 2022-এ iPhone 14 Pro-এর সাথে প্রবর্তিত হয়েছে। ভৌতভাবে, এটি একটি পিল-আকৃতির কাটআউট যা OLED পিক্সেল দ্বারা বেষ্টিত যা গতিশীলভাবে রঙ এবং আকৃতি পরিবর্তন করে। Apple ক্যামেরা এবং Face ID-এর জন্য হার্ডওয়্যার কাটআউট এবং এর চারপাশে কালো এলাকার সফ্টওয়্যার রেন্ডারিং-এর সংমিশ্রণ ব্যবহার করে, একটি «জীবন্ত» দ্বীপের বিভ্রম তৈরি করে।
Dynamic Island-এর মূল লক্ষ্য হল সিস্টেম নোটিফিকেশন এবং সক্রিয় কন্টেন্টের মধ্যে ব্যবধান দূর করা। নোটিফিকেশনগুলি স্ক্রিনের মাঝখানে (Android-এর মতো) বা উপরে ব্যানার হিসাবে (পুরোনো iOS-এর মতো) প্রদর্শিত হওয়ার পরিবর্তে, Dynamic Island তাদের সরাসরি হার্ডওয়্যার জোনে একীভূত করে। এটি বিভ্রান্তি হ্রাস করে এবং একীভূত স্থানের অনুভূতি তৈরি করে।
Apple ডেটা (iOS 17 গ্রহণের পরিসংখ্যান, 2024) অনুসারে, Dynamic Island 38% সক্রিয় iPhone-এ উপলব্ধ। iPhone 15 (2023) থেকে শুরু করে, লাইনআপের সমস্ত মডেল Dynamic Island পেয়েছে, বেস মডেলগুলি সহ। iOS 18-এ, Apple Live Activities API প্রসারিত করেছে, সরাসরি Dynamic Island-এ কাউন্টডাউন টাইমার এবং খেলার ফলাফলের জন্য সমর্থন যোগ করেছে।
Dynamic Island iPhone 14 Pro, iPhone 14 Pro Max, iPhone 15, iPhone 15 Plus, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 16, iPhone 16 Plus, iPhone 16 Pro, iPhone 16 Pro Max-এ উপলব্ধ। iPad-এ Dynamic Island উপলব্ধ নয়। Dynamic Island-এর জন্য ডেভেলপমেন্টের জন্য Xcode 14.1+ এবং iOS 16.1+ প্রয়োজন।
Dynamic Island তিনটি প্রদর্শন অবস্থা সমর্থন করে: কম্প্যাক্ট, ন্যূনতম এবং সম্প্রসারিত। অবস্থাগুলির মধ্যে স্থানান্তর UIKit অ্যানিমেশন এবং Core Animation ব্যবহার করে অ্যানিমেটেড হয়। সিস্টেম নিজেই অ্যাক্টিভিটি অগ্রাধিকার পরিচালনা করে: যদি একাধিক অ্যাপ একসাথে কন্টেন্ট প্রদর্শনের চেষ্টা করে, iOS শেষ অ্যাক্টিভিটির শুরুর সময়ের উপর ভিত্তি করে একটি সারি ব্যবহার করে।
| অবস্থা | আকার | কন্টেন্ট | উদাহরণ |
|---|---|---|---|
| কম্প্যাক্ট | 49×18 pt | অ্যাপ আইকন + সিস্টেম আইকন | টাইমার, সঙ্গীত, কল |
| ন্যূনতম | 66×18 pt পর্যন্ত | আইকন + ছোট টেক্সট | নেভিগেশন দিকনির্দেশ, ধাপ |
| সম্প্রসারিত | 364×160 pt পর্যন্ত | কন্টেন্ট সহ সম্পূর্ণ উইজেট | খেলার স্কোর, ট্যাক্সির অবস্থা |
কম্প্যাক্ট অবস্থা হল Dynamic Island-এর মানক দৃশ্য যখন একটি ব্যাকগ্রাউন্ড টাস্ক সক্রিয় থাকে। এটি বামদিকে অ্যাপ আইকন এবং ডানদিকে সিস্টেম আইকন সহ একটি গোল পিল হিসাবে প্রদর্শিত হয়। ডিফল্টরূপে, সমস্ত Live Activities কম্প্যাক্ট অবস্থায় শুরু হয়।
ন্যূনতম অবস্থা উদ্ভূত হয় যখন দুই বা ততোধিক টাস্ক একসাথে সক্রিয় থাকে। Dynamic Island ক্যামেরার বাম এবং ডানদিকে দুটি পৃথক উপাদানে «বিভক্ত» হয়। ন্যূনতম অবস্থা তথ্যের দুটি স্বাধীন উৎস প্রদর্শনের অনুমতি দেয়, যেমন ট্যাক্সি আসার সময় এবং বর্তমান ট্র্যাক।
সম্প্রসারিত অবস্থা Dynamic Island-এ লং প্রেস দ্বারা সক্রিয় হয়। এই মোডে, কাস্টমাইজযোগ্য কন্টেন্ট সহ একটি সম্পূর্ণ উইজেট প্রদর্শিত হয়: শিরোনাম, বিবরণ, প্রগতি বার, বাটন। সম্প্রসারিত অবস্থা স্ক্রোলিং এবং ইন্টারঅ্যাকটিভ উপাদান সমর্থন করে।
ActivityKit হল iOS 16.1-এ প্রবর্তিত একটি Swift ফ্রেমওয়ার্ক, যা অ্যাপগুলিকে Dynamic Island এবং Lock Screen-এ Live Activities প্রকাশ করার অনুমতি দেয়। ActivityKit ActivityView এবং ActivityAttributes-এর উপর ভিত্তি করে আর্কিটেকচার ব্যবহার করে: প্রথমটি কন্টেন্টের ধরন নির্ধারণ করে, দ্বিতীয়টি পরিবর্তনযোগ্য ডেটা নির্ধারণ করে। ফ্রেমওয়ার্কটি WidgetKit-এর সাথে একত্রে কাজ করে, কিন্তু উইজেটের বিপরীতে, Live Activities অ্যাপ না খুলেই রিয়েল-টাইমে আপডেট হতে পারে।
import ActivityKit
import SwiftUI
// কার্যকলাপের বৈশিষ্ট্য নির্ধারণ করুন
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Live Activity শুরু করুন
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "আলেক্সি",
distanceToArrival: 3.5,
estimatedMinutes: 12
)
let attributes = DeliveryAttributes(orderNumber: "ORD-2024-8912")
let activity = try? Activity.request(
attributes: attributes,
contentState: initialState,
pushType: .token
)
}
Live Activities ActivityView-এর মাধ্যমে আপডেট হয়, যা Dynamic Island-এর জন্য SwiftUI কন্টেন্ট রেন্ডার করে। সিস্টেম নিজেই নির্ধারণ করে কোন টেমপ্লেট ব্যবহার করবে (কম্প্যাক্ট, ন্যূনতম বা সম্প্রসারিত), Dynamic Island-এর আকার এবং অ্যাক্টিভিটির সংখ্যার উপর নির্ভর করে। কন্টেন্ট আপডেট করতে, activity.update(using: contentState) কল করুন। শেষ করতে — activity.end(dismissalPolicy: .immediate)।
ActivityKit APNs (Apple Push Notification Service) এর মাধ্যমে push আপডেট সমর্থন করে। Live Activity শুরু করার সময়, আপনি pushToken অনুরোধ করতে পারেন এবং ডিভাইসে অ্যাপ চালু না করেই সার্ভার থেকে আপডেট পাঠাতে পারেন। Push আপডেটগুলি activity.pushToken এবং দূরবর্তী Live Activity শুরুর জন্য Activity.pushToStartToken-এর মাধ্যমে কাজ করে।
// Push-এর মাধ্যমে Live Activity আপডেট করুন
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "আলেক্সি",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "কুরিয়ার কাছাকাছি",
body: "আলেক্সি ৪ মিনিটে আসবে",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration হল একটি ঐচ্ছিক প্যারামিটার যা গুরুত্বপূর্ণ আপডেটে (যেমন, «কুরিয়ার এসেছে») Dynamic Island-এর উপরে একটি নোটিফিকেশন দেখায়। AlertConfiguration ছাড়া, কন্টেন্ট নীরবে আপডেট হয়, যা প্রগতি বার এবং টাইমারের জন্য উপযুক্ত।
Notch (কাটআউট) হল iPhone X–13-এর হার্ডওয়্যার এলাকা যাতে ফ্রন্ট ক্যামেরা, Face ID সেন্সর এবং স্পিকার থাকে। Notch স্থির: এর আকার এবং আকৃতি পরিবর্তন হয় না, এবং নোটিফিকেশনগুলি এর নীচে মানক ব্যানার হিসাবে প্রদর্শিত হয়। Dynamic Island, বিপরীতে, কাটআউটের চারপাশের পিক্সেল ব্যবহার করে কন্টেন্ট প্রদর্শন করে, হার্ডওয়্যার উপাদানটিকে ইন্টারফেসের অংশ করে তোলে।
| মানদণ্ড | Dynamic Island | Notch |
|---|---|---|
| ইন্টারঅ্যাকটিভিটি | ট্যাপ, লং প্রেস, সোয়াইপ সমর্থন করে | ইন্টারঅ্যাকটিভ নয় |
| কন্টেন্ট অভিযোজন | প্রসঙ্গ অনুযায়ী আকৃতি পরিবর্তন করে | স্থির, কন্টেন্ট notch-এর নীচে |
| Live Activities | ActivityKit-এর মাধ্যমে অন্তর্নির্মিত সমর্থন | না — শুধু মানক নোটিফিকেশন |
| মাল্টিটাস্কিং | দুটি একসঙ্গে অ্যাক্টিভিটি (বাম এবং ডান) | শুধু একটি অ্যাক্টিভিটি |
| উপলব্ধতা | iOS 16.1+, iPhone 14 Pro এবং নতুন | iOS 11+, iPhone X–13 |
Apple Human Interface Guidelines (2025) অনুসারে, Dynamic Island বিজ্ঞাপন বা স্থির কন্টেন্ট স্থায়ী প্রদর্শনের জন্য ব্যবহার করা উচিত নয়। Live Activities শুধুমাত্র স্পষ্ট জীবনচক্র সহ ব্যাকগ্রাউন্ড টাস্কের জন্য উদ্দিষ্ট: টাইমার, ডেলিভারি, খেলা, সঙ্গীত, নেভিগেশন। এই নিয়ম লঙ্ঘন করলে অ্যাপ স্টোর পর্যালোচনায় অ্যাপ প্রত্যাখ্যান হয়।
Dynamic Island-এর একটি কঠোর জীবনচক্র আছে: একটি অ্যাক্টিভিটি Activity.request()-এর মাধ্যমে অনুরোধ দিয়ে শুরু হয়, সক্রিয়/বিরাম/আপডেটেড অবস্থার মধ্য দিয়ে যায় এবং activity.end() কলের মাধ্যমে শেষ হয়। সিস্টেম কম মেমোরির সময় জোর করে অ্যাক্টিভিটি শেষ করতে পারে (যেমন, ক্যামেরা চালু হলে)। এই ক্ষেত্রে, অ্যাপটি ActivityActivityState.finished-এর মাধ্যমে একটি নোটিফিকেশন পায়।
জেসচার Dynamic Island-এ ActivityView-এর ভিতরে SwiftUI কন্টেন্ট দ্বারা পরিচালিত হয়। মানক জেসচার: কম্প্যাক্ট অবস্থায় ট্যাপ অ্যাপ খোলে, লং প্রেস সম্প্রসারিত অবস্থা খোলে, নীচে সোয়াইপ সম্প্রসারিত অবস্থা বন্ধ করে। কাস্টম জেসচার অ্যাক্টিভিটি ভিউয়ের ভিতরে SwiftUI মডিফায়ার (onTapGesture, onLongPressGesture) এর মাধ্যমে যোগ করা হয়।
যখন সিস্টেম Live Activity শেষ করে (বা ব্যবহারকারী সোয়াইপ করে সরিয়ে দেয়), অ্যাপটির সম্পদ মুক্ত করতে finished অবস্থা পরিচালনা করা উচিত। Activity.activityStateUpdates-এ সাবস্ক্রাইব করার এবং সমাপ্তির পরে অ্যাক্টিভিটির স্থানীয় রেফারেন্স মুছে ফেলার সুপারিশ করা হয়।
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("কার্যকলাপ Dynamic Island-এ সক্রিয়")
case .dismissed:
print("কার্যকলাপ ব্যবহারকারী দ্বারা লুকানো")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("কার্যকলাপ সিস্টেম দ্বারা সমাপ্ত")
cleanupResources()
@unknown default:
break
}
}
}
}
Apple সুপারিশ (WWDC 2024, সেশন 10146): ব্যবহারকারীর মনোযোগের প্রয়োজন নেই এমন অবস্থা প্রদর্শনের জন্য Dynamic Island ব্যবহার করবেন না। প্রতিটি Live Activity-এর একটি স্পষ্ট শুরু এবং শেষ ট্রিগার থাকা উচিত। UI ছাড়া ব্যাকগ্রাউন্ড আপডেটের জন্য, Live Activities-এর পরিবর্তে Background Tasks ব্যবহার করুন।
সচরাচর জিজ্ঞাসা
Dynamic Island iPhone 14 Pro, 14 Pro Max এবং সমস্ত iPhone 15 ও iPhone 16 মডেলে (বেস সংস্করণ সহ) উপলব্ধ। ডেভেলপমেন্টের জন্য iOS 16.1+ এবং Xcode 14.1 প্রয়োজন। পুরোনো মডেলে (iPhone X–13) স্থির notch ব্যবহার করা হয়, যা Live Activities সমর্থন করে না।
Dynamic Island নোটিফিকেশনকে স্ক্রিনের হার্ডওয়্যার জোনে একীভূত করে, কন্টেন্ট ঢেকে না দিয়ে। সাধারণ নোটিফিকেশন উপরে একটি ব্যানার হিসাবে দেখা যায় এবং কয়েক সেকেন্ড পরে অদৃশ্য হয়ে যায়। Dynamic Island-এর Live Activities ঘন্টার পর ঘন্টা সক্রিয় থাকতে পারে এবং রিয়েল-টাইমে আপডেট হতে পারে (ডেলিভারি স্ট্যাটাস, টাইমার, সঙ্গীত)।
APNs-এর মাধ্যমে push আপডেট ব্যবহার করুন। Live Activity শুরু করার সময়, activity.pushToken কল করুন এবং আপনার সার্ভারে টোকেন পাঠান। সার্ভার নতুন ContentState সহ APNs-এর মাধ্যমে আপডেট অনুরোধ পাঠায়। বিকল্পভাবে, অ্যাপের ভিতর থেকে activity.update(using:) এর মাধ্যমে স্থানীয় আপডেট করুন।
যখন দুটি Live Activities সক্রিয় থাকে, iOS স্বয়ংক্রিয়ভাবে Dynamic Island-কে দুটি সেগমেন্টে বিভক্ত করে। প্রতিটি অ্যাক্টিভিটি ক্যামেরার বাম এবং ডানদিকে ন্যূনতম অবস্থায় প্রদর্শিত হয়। একটি সেগমেন্টে লং প্রেস শুধুমাত্র সেই অ্যাপের জন্য সম্প্রসারিত অবস্থা খোলে।
পরীক্ষা করুন: (1) অ্যাপের Info.plist-এ NSSupportsLiveActivities = YES আছে, (2) ActivityAttributes এবং ContentState Codable ও Hashable বাস্তবায়ন করে, (3) iOS সংস্করণ 16.1+, (4) ডিভাইস Dynamic Island সমর্থন করে। সিমুলেটরের জন্য, Xcode-এ iPhone 14 Pro বা নতুন ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।