ডিপ লিঙ্কিং আপনাকে ওয়েব ব্রাউজার, বিজ্ঞপ্তি, সোশ্যাল মিডিয়া, বিজ্ঞাপন এবং অন্যান্য উত্স থেকে ব্যবহারকারীদের সরাসরি আপনার অ্যাপে আনতে দেয়৷ গভীর লিঙ্কগুলি সরাসরি অ্যাপ-টু-অ্যাপ এবং ওয়েব-টু-অ্যাপ ট্রানজিশন প্রদান করে যা আপনাকে প্রাসঙ্গিক, লক্ষ্যযুক্ত সামগ্রীর মাধ্যমে ব্যস্ততা বাড়াতে সাহায্য করতে পারে।
এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে গভীর লিঙ্কিং কাজ করে এবং কীভাবে আপনার সামগ্রীতে গভীর লিঙ্ক তৈরি এবং পরীক্ষা করতে হয়।
আপনার নিজস্ব ওয়েবসাইট বা ডোমেনগুলিকে উল্লেখ করে এমন গভীর লিঙ্কগুলির জন্য, আমরা অ্যাপ লিঙ্কগুলি ব্যবহার করার পরামর্শ দিই, যা আপনার ব্যবহারকারীদের জন্য একটি নির্বিঘ্ন, বিশ্বস্ত অভিজ্ঞতা প্রদান করে৷
কিভাবে গভীর সংযোগ কাজ করে
ডিপ লিঙ্কিং হল অ্যান্ড্রয়েডের একটি সাধারণ সিস্টেম ক্ষমতা, সমস্ত সংস্করণে, সমস্ত ডিভাইসে সমর্থিত৷ আগ্রহী অ্যাপগুলির গভীর লিঙ্কগুলি রুট করতে এটি Android এর Intents সিস্টেমের সুবিধা নেয়৷ যে অ্যাপগুলি একটি নির্দিষ্ট ডিপ লিঙ্ক ইউআরআই পরিচালনা করতে চায় তারা তাদের অ্যাপ ম্যানিফেস্ট ফাইলগুলিতে একটি ম্যাচিং ইন্টেন্ট ফিল্টার ঘোষণা করে।
রানটাইমে, যখন ব্যবহারকারী একটি লিঙ্কে ট্যাপ করে, তখন Android একটি অভিপ্রায় ট্রিগার করে এবং এটিকে একটি অ্যাপে রুট করার চেষ্টা করে। যেহেতু একাধিক অ্যাপ প্রদত্ত ইউআরআই-এর সাথে মেলে এমন অভিপ্রায় ফিল্টার ঘোষণা করতে পারে, তাই অভিপ্রায় রুট করতে Android এই ক্রমে এই পদক্ষেপগুলি নেয়:
- ব্যবহারকারীর ডিফল্ট অ্যাপ খুলুন যা URI পরিচালনা করতে পারে, যদি একটি মনোনীত হয়।
- একমাত্র উপলব্ধ অ্যাপটি খুলুন যা URI পরিচালনা করতে পারে।
- ব্যবহারকারীকে দ্ব্যর্থতা নিরসন ডায়ালগ থেকে একটি অ্যাপ নির্বাচন করার অনুমতি দিন।
এর মানে হল, যদিও আপনার অভিপ্রায় ফিল্টারগুলি একটি প্রদত্ত URI-এর সাথে মেলে, তবে সিস্টেমটি আপনার অ্যাপে গভীর লিঙ্কের অভিপ্রায়কে রুট করবে এমন কোনও গ্যারান্টি নেই৷ কোন অ্যাপটি উদ্দেশ্য পরিচালনা করে, যা তাদের নিয়ন্ত্রণ দেয় এবং পছন্দের প্রস্তাব দেয় তা পরিচালনা করার ক্ষেত্রে ব্যবহারকারীর একটি মূল ভূমিকা রয়েছে। আপনার নিজস্ব ওয়েবসাইট এবং ডোমেনগুলির গভীর লিঙ্কগুলির উপর আরও নিয়ন্ত্রণের জন্য, অ্যাপ লিঙ্কগুলি ব্যবহার করার চেষ্টা করুন৷
অ্যান্ড্রয়েডের দ্ব্যর্থতা নিরসন ডায়ালগ ব্যবহারকারীকে ইনস্টল করা সমস্ত অ্যাপ দেখতে দেয় যেগুলি একটি গভীর লিঙ্কের অভিপ্রায় পরিচালনা করতে নিবন্ধিত হয়েছে৷ ব্যবহারকারী এই ধরনের লিঙ্কের জন্য ডিফল্ট হিসাবে একটি অ্যাপ নির্বাচন করতে পারেন। একবার ব্যবহারকারী একটি ডিফল্ট সেট করলে, সিস্টেমটি সেই নির্দিষ্ট অভিপ্রায়ের জন্য ডায়ালগটি আর দেখায় না এবং নির্বাচিত অ্যাপটি স্বয়ংক্রিয়ভাবে খুলবে।
চিত্র 1. দ্ব্যর্থতা নিরসন ডায়ালগ
দ্ব্যর্থতা নিরসন ডায়ালগের আচরণটি অ্যান্ড্রয়েড সংস্করণ জুড়ে বিকশিত হয়েছে। উদাহরণস্বরূপ, Android 12 এবং উচ্চতর সংস্করণে, অ্যাপ লিঙ্কগুলি যাচাই করা হয়নি এমন ওয়েব লিঙ্কগুলি সাধারণত একটি ওয়েব ব্রাউজারে ডিফল্টরূপে খুলবে, যেখানে পূর্ববর্তী সংস্করণগুলিতে, একটি দ্ব্যর্থতা সংলাপ উপস্থিত হতে পারে যদি কোনও অ্যাপ ওয়েব লিঙ্কটি পরিচালনা করতে পারে।
দ্রষ্টব্য : Android 12 (API স্তর 31) থেকে শুরু করে, একটি জেনেরিক ওয়েব অভিপ্রায় আপনার অ্যাপে কোনো কার্যকলাপের সমাধান করে তখনই যদি আপনার অ্যাপ সেই ওয়েব অভিপ্রায়ে থাকা নির্দিষ্ট ডোমেনের জন্য অনুমোদিত হয়। যদি আপনার অ্যাপটি ডোমেনের জন্য অনুমোদিত না হয়, তবে ওয়েব অভিপ্রায় ব্যবহারকারীর ডিফল্ট ব্রাউজার অ্যাপে সমাধান করে।
গভীর লিঙ্কের প্রকার
আপনি অ্যান্ড্রয়েডে সমর্থন করতে পারেন এমন তিন ধরণের গভীর লিঙ্ক রয়েছে:
- কাস্টম ডিপ লিঙ্ক : এগুলি হল ডিপ লিঙ্ক যা একটি কাস্টম URI স্কিম ব্যবহার করে (যেমন
example://products/123
) ব্যবহারকারীকে সরাসরি একটি অ্যাপের মধ্যে একটি নির্দিষ্ট সামগ্রীতে নিয়ে যেতে। এগুলি অভ্যন্তরীণ নেভিগেশন বা আপনার নিয়ন্ত্রণ করা উত্সগুলি থেকে লিঙ্কগুলির জন্য শক্তিশালী, তবে সেগুলি মানক ওয়েব লিঙ্ক নয় এবং যদি অন্য কোনও অ্যাপ একই কাস্টম স্কিম নিবন্ধন করে তবে দ্ব্যর্থতা নিরসন ডায়ালগ ট্রিগার করতে পারে৷ - ওয়েব লিঙ্ক : এইগুলি হল গভীর লিঙ্ক যা স্ট্যান্ডার্ড
http
এবংhttps
স্কিমগুলি ব্যবহার করে৷ এগুলি আরও বহুমুখী কারণ এগুলি স্ট্যান্ডার্ড ইউআরএল, কিন্তু Android 12 এবং উচ্চতর এগুলি প্রায় সর্বদা দ্ব্যর্থতা নিরসন ডায়ালগটিকে ট্রিগার করবে, যার অর্থ আপনার অ্যাপে রাউট করার পরিবর্তে ডিফল্টরূপে ব্যবহারকারীর ওয়েব ব্রাউজার দ্বারা পরিচালনা করা হতে পারে৷ - অ্যাপ লিংক : অ্যান্ড্রয়েড 6.0 (API লেভেল 23) থেকে উপলব্ধ, এগুলি যাচাই করা ওয়েব লিঙ্ক। ওয়েবসাইট অ্যাসোসিয়েশনের একটি প্রক্রিয়ার মাধ্যমে, আপনি Android সিস্টেমের কাছে প্রমাণ করতে পারেন যে আপনি ডোমেনের মালিক৷ একবার যাচাই হয়ে গেলে, সিস্টেমটি স্বয়ংক্রিয়ভাবে সেই ডোমেনের লিঙ্কগুলিকে সরাসরি আপনার অ্যাপে রুট করে, দ্ব্যর্থতা নিরসন ডায়ালগ সম্পূর্ণভাবে এড়িয়ে যায়। এটি আপনার ব্যবহারকারীদের জন্য একটি বিশ্বস্ত এবং নির্বিঘ্ন অভিজ্ঞতা তৈরি করে।
ইনকামিং লিঙ্কের জন্য অভিপ্রায় ফিল্টার যোগ করুন
আপনার অ্যাপের সামগ্রীতে একটি লিঙ্ক তৈরি করতে, আপনার ম্যানিফেস্টে এই উপাদানগুলি এবং বৈশিষ্ট্যের মানগুলি ধারণ করে এমন একটি অভিপ্রায় ফিল্টার যোগ করুন:
ACTION_VIEW
ইন্টেন্ট অ্যাকশন নির্দিষ্ট করুন যাতে Google সার্চ থেকে ইনটেন্ট ফিল্টারে পৌঁছানো যায়।
এক বা একাধিক <data>
ট্যাগ যোগ করুন, যার প্রতিটি একটি URI বিন্যাস উপস্থাপন করে যা কার্যকলাপের সমাধান করে। ন্যূনতম, <data>
ট্যাগে অবশ্যই android:scheme
অ্যাট্রিবিউট থাকতে হবে।
ক্রিয়াকলাপটি যে ধরনের ইউআরআই গ্রহণ করে তা আরও পরিমার্জিত করতে আপনি আরও বৈশিষ্ট্য যুক্ত করতে পারেন। উদাহরণস্বরূপ, আপনার একাধিক অ্যাক্টিভিটি থাকতে পারে যা একই রকম ইউআরআই গ্রহণ করে, কিন্তু যা পাথ নামের উপর ভিত্তি করে ভিন্ন। এই ক্ষেত্রে, বিভিন্ন URI পাথের জন্য সিস্টেমটি কোন কার্যকলাপ খুলতে হবে তা পার্থক্য করতে android:path
বৈশিষ্ট্য বা এর pathPattern
বা pathPrefix
ভেরিয়েন্ট ব্যবহার করুন।
BROWSABLE
বিভাগ অন্তর্ভুক্ত করুন। উদ্দেশ্য ফিল্টার একটি ওয়েব ব্রাউজার থেকে অ্যাক্সেসযোগ্য হওয়ার জন্য এটি প্রয়োজনীয়। এটি ছাড়া, একটি ব্রাউজারে একটি লিঙ্কে ক্লিক করা আপনার অ্যাপের সমাধান করতে পারে না।
এছাড়াও DEFAULT
বিভাগ অন্তর্ভুক্ত করুন। এটি আপনার অ্যাপকে অন্তর্নিহিত উদ্দেশ্যগুলিতে প্রতিক্রিয়া জানাতে অনুমতি দেয়। এটি ছাড়া, অভিপ্রায়টি আপনার অ্যাপের উপাদানের নাম উল্লেখ করলেই কার্যকলাপ শুরু করা যেতে পারে।
নিচের XML স্নিপেটটি দেখায় যে আপনি কীভাবে গভীর লিঙ্ক করার জন্য আপনার ম্যানিফেস্টে একটি অভিপ্রায় ফিল্টার নির্দিষ্ট করতে পারেন। URI "example://gizmos"
এবং "http://www.example.com/gizmos"
উভয়ই এই কার্যকলাপের সমাধান করে।
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
লক্ষ্য করুন যে দুটি উদ্দেশ্য ফিল্টার শুধুমাত্র <data>
উপাদান দ্বারা পৃথক। যদিও একই ফিল্টারে একাধিক <data>
উপাদান অন্তর্ভুক্ত করা সম্ভব, তবে এটি গুরুত্বপূর্ণ যে আপনি আলাদা ফিল্টার তৈরি করুন যখন আপনার উদ্দেশ্য অনন্য ইউআরএল ঘোষণা করা হয় (যেমন scheme
এবং host
একটি নির্দিষ্ট সংমিশ্রণ ), কারণ একই অভিপ্রায় ফিল্টারে একাধিক <data>
উপাদানগুলি তাদের সম্মিলিত ট্রিবিউটের সমস্ত বৈচিত্রের জন্য অ্যাকাউন্টে একত্রিত করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত বিবেচনা করুন:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
মনে হতে পারে যে এটি শুধুমাত্র https://www.example.com
এবং app://open.my.app
সমর্থন করে। যাইহোক, এটি আসলে এই দুটিকে সমর্থন করে, এছাড়াও এইগুলি: app://www.example.com
এবং https://open.my.app
।
সতর্কতা : যদি একাধিক অ্যাক্টিভিটি ইনটেন্ট ফিল্টার থাকে যা একই ভেরিফাইড অ্যান্ড্রয়েড অ্যাপ লিঙ্কে সমাধান করে, তাহলে কোন অ্যাক্টিভিটি লিঙ্কটি পরিচালনা করবে তার কোন গ্যারান্টি নেই।
একবার আপনি আপনার অ্যাপ ম্যানিফেস্টে অ্যাক্টিভিটি বিষয়বস্তুর জন্য URI-এর সাথে ইন্টেন্ট ফিল্টার যোগ করলে, রানটাইমে আপনার অ্যাপে URI-এর সাথে মিলে যাওয়া যেকোন Intent
রুট করতে পারবে Android।
অভিপ্রায় ফিল্টারগুলি সংজ্ঞায়িত করার বিষয়ে আরও জানতে, আপনার কার্যকলাপ শুরু করার জন্য অন্যান্য অ্যাপগুলিকে অনুমতি দিন দেখুন৷
ইনকামিং ইন্টেন্ট থেকে ডেটা পড়ুন
একবার সিস্টেমটি একটি ইন্টেন্ট ফিল্টারের মাধ্যমে আপনার কার্যকলাপ শুরু করলে, আপনি কি রেন্ডার করতে হবে তা নির্ধারণ করতে Intent
দ্বারা প্রদত্ত ডেটা ব্যবহার করতে পারেন। ইনকামিং Intent
সাথে সম্পর্কিত ডেটা এবং অ্যাকশন পুনরুদ্ধার করতে getData()
এবং getAction()
পদ্ধতিতে কল করুন। আপনি কার্যকলাপের জীবনচক্র চলাকালীন যে কোনো সময় এই পদ্ধতিগুলিকে কল করতে পারেন, তবে আপনার সাধারণত onCreate()
বা onStart
এর মতো প্রাথমিক কলব্যাকের সময় এটি করা উচিত।
এখানে একটি স্নিপেট যা দেখায় কিভাবে একটি Intent
থেকে ডেটা পুনরুদ্ধার করতে হয়:
কোটলিন
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
জাভা
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে এই সেরা অনুশীলনগুলি অনুসরণ করুন:
- ডিপ লিঙ্ক ব্যবহারকারীদের সরাসরি বিষয়বস্তুতে নিয়ে যাবে, কোনো প্রম্পট, ইন্টারস্টিশিয়াল পৃষ্ঠা বা লগইন ছাড়াই। নিশ্চিত করুন যে ব্যবহারকারীরা অ্যাপের বিষয়বস্তু দেখতে পাচ্ছেন যদিও তারা আগে কখনও অ্যাপ্লিকেশনটি না খুলেন। ব্যবহারকারীদের পরবর্তী মিথস্ক্রিয়া বা যখন তারা লঞ্চার থেকে অ্যাপটি খুলবে তখন তাদের প্রম্পট করা ঠিক।
- নেভিগেশন উইথ ব্যাক অ্যান্ড আপ- এ বর্ণিত নকশা নির্দেশিকা অনুসরণ করুন যাতে আপনার অ্যাপটি একটি গভীর লিঙ্কের মাধ্যমে আপনার অ্যাপে প্রবেশ করার পর ব্যবহারকারীদের ব্যাকওয়ার্ড নেভিগেশনের প্রত্যাশার সাথে মেলে।
আপনার গভীর লিঙ্ক পরীক্ষা
আপনি অ্যাকটিভিটি ম্যানেজার (am) টুলের সাহায্যে অ্যান্ড্রয়েড ডিবাগ ব্রিজ ব্যবহার করতে পারেন যাতে আপনি ডিপ লিঙ্কিংয়ের জন্য নির্দিষ্ট করা ইন্টেন্ট ফিল্টার ইউআরআই সঠিক অ্যাপ অ্যাক্টিভিটির সমাধান করতে পারেন। আপনি একটি ডিভাইস বা এমুলেটরের বিরুদ্ধে adb কমান্ড চালাতে পারেন।
অ্যাডবি সহ একটি ইন্টেন্ট ফিল্টার ইউআরআই পরীক্ষা করার জন্য সাধারণ সিনট্যাক্স হল:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি নির্দিষ্ট ইউআরআই-এর সাথে যুক্ত একটি লক্ষ্য অ্যাপ কার্যকলাপ দেখার চেষ্টা করে।
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
দ্রষ্টব্য : একটি রুটে আদিম প্রকারের সংগ্রহ সংজ্ঞায়িত করার সময়, যেমন **@Serializable data class Product(val colors: List)**
, স্বয়ংক্রিয়ভাবে তৈরি হওয়া গভীর লিঙ্ক URL বিন্যাস হল **basePath?colors={value**}
। আপনি যদি একাধিক ক্যোয়ারী প্যারামের সাথে একটি URI নির্দিষ্ট করার চেষ্টা করেন (উদাহরণস্বরূপ, **basepath?colors=red&colors=blue**
), আপনাকে অবশ্যই অ্যাম্পারস্যান্ড এড়িয়ে যেতে হবে (উদাহরণস্বরূপ, **basepath?colors=red\&colors=blue**
)।
আপনি যে ম্যানিফেস্ট ঘোষণা এবং উদ্দেশ্য হ্যান্ডলার সেট করেছেন তা আপনার অ্যাপ এবং একটি ওয়েবসাইটের মধ্যে সংযোগ এবং ইনকামিং লিঙ্কগুলির সাথে কী করতে হবে তা নির্ধারণ করে। যাইহোক, সিস্টেমটি আপনার অ্যাপটিকে ইউআরআই-এর একটি সেটের জন্য ডিফল্ট হ্যান্ডলার হিসাবে বিবেচনা করার জন্য, আপনাকে অবশ্যই অনুরোধ করতে হবে যে সিস্টেমটি এই সংযোগটি যাচাই করবে। ভেরিফাই অ্যাপ লিংক ব্যাখ্যা করে কিভাবে এই যাচাইকরণ বাস্তবায়ন করতে হয়।
উদ্দেশ্য এবং অ্যাপ লিঙ্ক সম্পর্কে আরও জানতে, নিম্নলিখিত সংস্থানগুলি দেখুন:
- ইন্টেন্টস এবং ইনটেন্ট ফিল্টার
- অন্যান্য অ্যাপগুলিকে আপনার কার্যকলাপ শুরু করার অনুমতি দিন
- অ্যান্ড্রয়েড স্টুডিওর সাথে অ্যান্ড্রয়েড অ্যাপ লিঙ্ক যোগ করুন