Share Extension একটি iOS এক্সটেনশন যা আপনার অ্যাপকে সিস্টেম শেয়ার শীটে যুক্ত করে। ব্যবহারকারী Safari, ফটো, ফাইল বা অন্য যেকোনো অ্যাপ থেকে সরাসরি আপনার অ্যাপে কন্টেন্ট পাঠাতে পারেন — কপি না করে এবং উইন্ডোর মধ্যে সুইচ না করে। Apple (2024)-এর মতে, Share Extension আছে এমন অ্যাপগুলি শেয়ারিং সুবিধা ছাড়া অ্যাপগুলির তুলনায় 35% বেশি ব্যবহারকারী কন্টেন্ট পায়। এক্সটেনশনটি একটি ইউনিফাইড NSExtensionItem ইন্টারফেসের মাধ্যমে টেক্সট, ইমেজ, ভিডিও, URL এবং ফাইল প্রক্রিয়া করে।
মূল বিষয়
Share Extension হলো এক প্রকার iOS অ্যাপ এক্সটেনশন যা যেকোনো অ্যাপে কন্টেন্ট নির্বাচন করলে সিস্টেম শেয়ার শীটে দেখা যায়। ব্যবহারকারী Safari-এ টেক্সট হাইলাইট করে, শেয়ার বাটনে চাপে এবং আপনার অ্যাপকে উপলব্ধ কর্মের তালিকায় দেখে। নির্বাচনের পর, কন্টেন্ট প্রক্রিয়াকরণের জন্য এক্সটেনশনে পাঠানো হয়: সংরক্ষণ, প্রকাশ, পাঠানো বা রূপান্তর।
Action Extension-এর বিপরীতে, Share Extension বাহ্যিক অ্যাপ থেকে কন্টেন্ট গ্রহণে বিশেষজ্ঞ। Action Extension, অন্যদিকে, আপনার অ্যাপ থেকে বাইরে ডেটা পাঠায়। Share Extension ব্যবহারকারী কন্টেন্টের প্রবেশদ্বার, ব্যবহারকারী অর্জনের একটি মূল উপাদান: ব্যবহারকারীরা সম্পূর্ণ ইনস্টল না করেই Share Extension-এর মাধ্যমে আপনার অ্যাপ চেষ্টা করে। App Store এমন অ্যাপ নিষিদ্ধ করে যার একমাত্র কাজ Share Extension-এর মাধ্যমে বিজ্ঞাপন দেখানো (App Store Review Guideline 4.2)।
Share Extension প্রবেশের বাধা কমায়: ব্যবহারকারীরা পরিচিত প্রসঙ্গ — ব্রাউজার, গ্যালারি, ফাইল ম্যানেজার — থেকে আপনার অ্যাপে কন্টেন্ট পাঠায়। Branch (2024)-এর মতে, Share Extension আছে এমন অ্যাপগুলি ৭ম দিনে 28% বেশি রিটেনশন দেখায়। একটি অতিরিক্ত প্রভাব হলো ভাইরালিটি: প্রতিবার যখন ব্যবহারকারী শেয়ার শীটে আপনার অ্যাপ দেখে, বিজ্ঞাপন খরচ ছাড়াই প্যাসিভ ব্র্যান্ডিং হয়।
Share Extension প্রক্রিয়াটি সিস্টেম NSExtensionItem কন্টেইনারের মাধ্যমে কন্টেন্ট স্থানান্তরের উপর ভিত্তি করে। হোস্ট অ্যাপ (Safari, ফটো) নির্বাচিত কন্টেন্টকে নির্দিষ্ট প্রকার (public.image, public.url, public.plain-text) সহ NSExtensionItem-এ প্যাকেজ করে। সিস্টেম এই কন্টেইনারটি এক্সটেনশনে পাঠায়, যা extensionContext.inputItems-এর মাধ্যমে ডেটা বের করে।
Share Extension সীমিত নির্বাহ সময় সহ একটি পৃথক প্রক্রিয়ায় চলে — প্রক্রিয়াকরণের জন্য প্রায় 30 সেকেন্ড। এক্সটেনশনের দীর্ঘ সিঙ্ক্রোনাস অপারেশন করা উচিত নয়। বড় ফাইল আপলোডের জন্য, ব্যাকগ্রাউন্ড কনফিগারেশন সহ NSURLSession ব্যবহার করুন। SLComposeServiceViewController কন্টেন্ট প্রিভিউ এবং পোস্ট বাটন সহ Share Extension-এর জন্য বেস ক্লাস।
iOS স্থানান্তরিত কন্টেন্টের প্রকার নির্ধারণ করতে ইউনিফর্ম টাইপ আইডেন্টিফায়ার (UTI) ব্যবহার করে। Share Extension-এর জন্য প্রধান UTI: public.image (ফটো, স্ক্রিনশট), public.url (লিংক), public.plain-text (টেক্সট), public.video (ভিডিও ফাইল) এবং public.file-url (ফাইল)। এক্সটেনশন NSExtensionActivationRule কী-এর মাধ্যমে Info.plist-এ সমর্থিত UTI নিবন্ধন করে।
Share Extension তিনটি উপাদান নিয়ে গঠিত: Xcode-এ টার্গেট, SLComposeServiceViewController এবং Info.plist কনফিগারেশন। আর্কিটেকচার নির্ধারণ করে কোন কন্টেন্ট প্রকার প্রক্রিয়া করা হয়, ইন্টারফেস কীভাবে প্রদর্শিত হয় এবং ডেটা কোথায় সংরক্ষিত হয়।
| উপাদান | উদ্দেশ্য | বৈশিষ্ট্য |
|---|---|---|
| Target | Xcode-এ এক্সটেনশন টার্গেট | আইডেন্টিফায়ার সহ পৃথক বান্ডল |
| ViewController | ইন্টারফেস এবং প্রক্রিয়াকরণ লজিক | SLComposeServiceViewController বা কাস্টম |
| Info.plist | অ্যাক্টিভেশন এবং UTI কনফিগারেশন | প্রেডিকেট সহ NSExtensionActivationRule |
| App Groups | অ্যাপের সাথে শেয়ার্ড স্টোরেজ | ডেটা স্থানান্তরের জন্য UserDefaults সুইট |
Share Extension কনফিগারেশনের মূল উপাদান হলো অ্যাক্টিভেশন নিয়ম। এটি নির্ধারণ করে কোন শর্তে এক্সটেনশন শেয়ার শীটে দেখা যায়। নিয়মটি Info.plist-এ সীমাবদ্ধতা সহ একটি অভিধান হিসাবে সেট করা হয়: সর্বাধিক ছবির সংখ্যা, ন্যূনতম টেক্সট দৈর্ঘ্য, বাধ্যতামূলক URL উপস্থিতি। স্ট্যান্ডার্ড নিয়ম যেকোনো একটি কন্টেন্ট প্রকারের জন্য এক্সটেনশন সক্রিয় করে।
// Info.plist — Share Extension-এর জন্য NSExtensionActivationRule
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>5</integer>
<key>NSExtensionActivationSupportsText</key>
<true/>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
আসুন একটি বুকমার্কিং অ্যাপের জন্য Swift-এ Share Extension তৈরির একটি ব্যবহারিক উদাহরণ দেখি। এক্সটেনশন Safari থেকে URL গ্রহণ করে, একটি প্রিভিউ ইন্টারফেস দেখায় এবং App Group-এ লিংক সংরক্ষণ করে। SLComposeServiceViewController একটি টেক্সট ফিল্ড এবং পোস্ট বাটন সহ প্রস্তুত UI প্রদান করে।
import Social
import MobileCoreServices
class ShareViewController: SLComposeServiceViewController {
override func isContentValid() -> Bool {
return !(contentText?.isEmpty() ?? true)
}
override func didSelectPost() {
guard let item = extensionContext?.inputItems.first as? NSExtensionItem
else { return }
for attachment in item.attachments ?? [] {
attachment.loadItem(forTypeIdentifier: kUTTypeURL as String) {
[weak self] (item, error) in
if let url = item as? URL {
BookmarkService().save(url, title: self?.contentText)
}
self?.extensionContext?.completeRequest(
returningItems: [], completionHandler: nil)
}
}
}
}
কন্টেন্ট পাঠানোর পর, এক্সটেনশন completeRequest কল করে শেষ হয় — এটি একটি বাধ্যতামূলক পদক্ষেপ; এটি ছাড়া সিস্টেম এক্সটেনশন প্রক্রিয়া মুক্ত করবে না। গুরুত্বপূর্ণ: Share Extension সীমিত পরিবেশে সীমাবদ্ধ নেটওয়ার্ক এবং ফাইল সিস্টেম অ্যাক্সেস সহ চলে — কন্টেন্ট আপলোডের জন্য ব্যাকগ্রাউন্ড সেশন ব্যবহার করুন।
Share Extension-কে বিভিন্ন ধরনের ইনপুট ডেটা: টেক্সট, ইমেজ, ভিডিও, URL এবং ফাইল সঠিকভাবে হ্যান্ডেল করতে হবে। প্রতিটি প্রকার তার নিজস্ব UTI এবং নিষ্কাশন পদ্ধতি ব্যবহার করে। সার্বজনীন হ্যান্ডলিং — hasItemConformingToTypeIdentifier চেক সহ attachment.attachments-এর মাধ্যমে লুপ করে।
ইমেজগুলি public.image হিসাবে UIImage বা Data-এর মাধ্যমে পাওয়ার ক্ষমতা সহ পাস করা হয়। বড় ইমেজের জন্য, সংরক্ষণের আগে jpegData(compressionQuality:) ব্যবহার করুন। Share Extension-এর ব্যবহারকারীর স্পষ্ট অনুমতি ছাড়া মূল ইমেজ পরিবর্তন করা উচিত নয়। মূলটি App Group-এ সংরক্ষণ এবং ইন্টারফেসে প্রদর্শনের জন্য প্রিভিউ তৈরি করার পরামর্শ দেওয়া হয়।
Safari এবং অন্যান্য ব্রাউজার URLগুলিকে public.url এবং নির্বাচিত টেক্সটকে public.plain-text হিসাবে পাস করে। একটি একক NSExtensionItem একসাথে উভয় প্রকার ধারণ করতে পারে — পৃষ্ঠার URL এবং এতে নির্বাচিত টেক্সট। Share Extension-এর সকল অ্যাটাচমেন্ট চেক করে প্রাসঙ্গিক ডেটা বের করা উচিত। সংযুক্ত দৃশ্যকল্প: URL বুকমার্ক হিসাবে এবং টেক্সট এর সাথে সংযুক্ত নোট হিসাবে সংরক্ষণ করুন।
Share Extension এবং মূল অ্যাপ পৃথক প্রক্রিয়ায় চলে এবং ফাইল সিস্টেমে শেয়ার্ড অ্যাক্সেস নেই। ডেটা বিনিময় App Groups প্রক্রিয়া ব্যবহার করে: group.* আইডেন্টিফায়ার সহ একটি শেয়ার্ড কন্টেইনার। App Group-এ ডেটা সংরক্ষণের পর, এক্সটেনশন CFNotificationCenter বা Darwin Notify-এর মাধ্যমে অ্যাপকে জানায়।
App Groups টার্গেটের ক্যাপাবিলিটিজে সক্রিয় করা হয়: App Groups নির্বাচন করুন এবং একটি আইডেন্টিফায়ার যোগ করুন (যেমন, group.com.example.myapp)। উভয় টার্গেট — মূল অ্যাপ এবং এক্সটেনশন — একই গ্রুপে অ্যাক্সেস থাকতে হবে। UserDefaults সুইট ন্যূনতম ওভারহেড সহ শেয়ার্ড স্টোরেজে ডেটা পড়া এবং লেখার অনুমতি দেয়।
// Share Extension থেকে App Group-এ ডেটা সংরক্ষণ
let sharedDefaults = UserDefaults(suiteName: "group.com.example.myapp")
let bookmark: [String: Any] = [
"url": url.absoluteString,
"title": contentText ?? "",
"date": Date().timeIntervalSince1970
]
sharedDefaults?.set(bookmark, forKey: "bookmark_\(Date().timeIntervalSince1970)")
sharedDefaults?.synchronize()
সচরাচর জিজ্ঞাসিত প্রশ্ন
Share Extension অন্যান্য অ্যাপ থেকে আপনার অ্যাপে কন্টেন্ট গ্রহণ করে। Action Extension, অন্যদিকে, হোস্ট অ্যাপের মধ্যে কন্টেন্টের উপর কাজ করে — টেক্সট অনুবাদ, ইমেজ পরিবর্তন। Share Extension গ্রহণ, Action Extension রূপান্তর।
এটি আপনার অ্যাপের প্রক্রিয়াকৃত কন্টেন্টের প্রকারের উপর নির্ভর করে। বুকমার্কের জন্য — public.url। ফটো এডিটরের জন্য — public.image। নোটের জন্য — public.plain-text। একাধিক প্রকারের জন্য, AND/OR প্রেডিকেটের সংমিশ্রণ সহ NSExtensionActivationRule ব্যবহার করুন।
একটি সাধারণ কারণ হলো ভুল NSExtensionActivationRule বা UTI অমিল। Info.plist-এ চেক করুন: অ্যাক্টিভেশন নিয়ম পরীক্ষিত কন্টেন্ট প্রকারের সাথে মিলতে হবে। এছাড়াও নিশ্চিত করুন যে সেটিংস → আপনার অ্যাপ → Siri ও অনুসন্ধানে এক্সটেনশন সক্রিয় আছে। Xcode ক্লিন বিল্ড প্রায়ই সমস্যা সমাধান করে।
সিস্টেম নির্বাহের জন্য প্রায় 30 সেকেন্ড বরাদ্দ করে। এর পরে, iOS জোরপূর্বক এক্সটেনশন প্রক্রিয়া শেষ করে। দীর্ঘ অপারেশনের জন্য, ব্যাকগ্রাউন্ড NSURLSession ব্যবহার করুন এবং পরবর্তী অ্যাপ লঞ্চে ফলাফল হ্যান্ডেল করুন।
হ্যাঁ, SLComposeServiceViewController-এর পরিবর্তে আপনি সাধারণ UIViewController ব্যবহার করতে পারেন। এই ক্ষেত্রে, আপনি ইন্টারফেসের সম্পূর্ণ নিয়ন্ত্রণ রাখেন। তবে, পাঠান এবং বাতিল বাটন নিজেকে বাস্তবায়ন করতে হবে। কাস্টম UI অ-মানক কন্টেন্ট প্রক্রিয়াকরণ দৃশ্যের জন্য সুপারিশ করা হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন