অ্যান্ড্রয়েডে, একটি গভীর লিঙ্ক হল একটি লিঙ্ক যা আপনাকে সরাসরি একটি অ্যাপের মধ্যে একটি নির্দিষ্ট গন্তব্যে নিয়ে যায়।
নেভিগেশন উপাদান আপনাকে দুটি ভিন্ন ধরনের গভীর লিঙ্ক তৈরি করতে দেয়: স্পষ্ট এবং অন্তর্নিহিত ।
একটি স্পষ্ট গভীর লিঙ্ক তৈরি করুন
একটি স্পষ্ট গভীর লিঙ্ক হল একটি গভীর লিঙ্কের একটি একক উদাহরণ যা ব্যবহারকারীদের আপনার অ্যাপের মধ্যে একটি নির্দিষ্ট স্থানে নিয়ে যেতে একটি PendingIntent
ব্যবহার করে। উদাহরণস্বরূপ, আপনি একটি বিজ্ঞপ্তি বা একটি অ্যাপ উইজেটের অংশ হিসাবে একটি স্পষ্ট গভীর লিঙ্ক দেখাতে পারেন।
যখন একজন ব্যবহারকারী আপনার অ্যাপটি একটি স্পষ্ট ডিপ লিঙ্কের মাধ্যমে খোলে, টাস্ক ব্যাক স্ট্যাকটি সাফ করা হয় এবং ডিপ লিঙ্ক গন্তব্যের সাথে প্রতিস্থাপিত হয়। গ্রাফ নেস্ট করার সময়, নেস্টিংয়ের প্রতিটি স্তর থেকে শুরুর গন্তব্য—অর্থাৎ, হায়ারার্কিতে প্রতিটি <navigation>
উপাদান থেকে শুরুর গন্তব্য—ও স্ট্যাকে যোগ করা হয়। এর মানে হল যে যখন কোনও ব্যবহারকারী একটি গভীর লিঙ্কের গন্তব্য থেকে পিছনের বোতাম টিপে, তখন তারা নেভিগেশন স্ট্যাকের ব্যাক আপ নেভিগেট করে ঠিক যেমন তারা আপনার অ্যাপের প্রবেশ বিন্দু থেকে প্রবেশ করেছে।
নিচের উদাহরণে দেখানো হিসাবে আপনি একটি PendingIntent
তৈরি করতে NavDeepLinkBuilder
ক্লাস ব্যবহার করতে পারেন। উল্লেখ্য যে যদি প্রদত্ত প্রসঙ্গটি একটি Activity
না হয়, তাহলে কনস্ট্রাক্টর PackageManager.getLaunchIntentForPackage()
চালু করার জন্য ডিফল্ট অ্যাক্টিভিটি হিসেবে ব্যবহার করে, যদি উপলব্ধ থাকে।
কোটলিন
val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .createPendingIntent()
জাভা
PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .createPendingIntent();
ডিফল্টরূপে, NavDeepLinkBuilder
আপনার অ্যাপের ম্যানিফেস্টে ঘোষিত ডিফল্ট লঞ্চ Activity
আপনার স্পষ্ট গভীর লিঙ্ক চালু করে। যদি আপনার NavHost
অন্য একটি ক্রিয়াকলাপে থাকে, তাহলে ডিপ লিঙ্ক বিল্ডার তৈরি করার সময় আপনাকে অবশ্যই এর উপাদানের নাম উল্লেখ করতে হবে:
কোটলিন
val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(DestinationActivity::class.java) .createPendingIntent()
জাভা
PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(DestinationActivity.class) .createPendingIntent();
আপনার যদি একটি ComponentName
থাকে, তাহলে আপনি এটি সরাসরি নির্মাতার কাছে পাঠাতে পারেন:
কোটলিন
val componentName = ... val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(componentName) .createPendingIntent()
জাভা
ComponentName componentName = ...; PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(componentName) .createPendingIntent();
আপনার যদি একটি বিদ্যমান NavController
থাকে, তাহলে আপনি NavController.createDeepLink()
ব্যবহার করে একটি গভীর লিঙ্কও তৈরি করতে পারেন।
একটি অন্তর্নিহিত গভীর লিঙ্ক তৈরি করুন
একটি অন্তর্নিহিত গভীর লিঙ্ক একটি অ্যাপে একটি নির্দিষ্ট গন্তব্যকে বোঝায়। যখন ডিপ লিঙ্ক চালু করা হয়—উদাহরণস্বরূপ, যখন কোনো ব্যবহারকারী কোনো লিঙ্কে ক্লিক করেন—Android তারপর আপনার অ্যাপটিকে সংশ্লিষ্ট গন্তব্যে খুলতে পারে।
গভীর লিঙ্কগুলি ইউআরআই, অভিপ্রায় ক্রিয়া এবং MIME প্রকারের দ্বারা মিলিত হতে পারে। আপনি একটি একক গভীর লিঙ্কের জন্য একাধিক মিলের ধরন নির্দিষ্ট করতে পারেন, তবে মনে রাখবেন যে URI আর্গুমেন্ট ম্যাচিংকে প্রথমে অগ্রাধিকার দেওয়া হয়, তারপরে অ্যাকশন এবং তারপরে MIME প্রকার।
এখানে একটি উদাহরণ গভীর লিঙ্ক যেখানে একটি URI, একটি অ্যাকশন এবং একটি MIME প্রকার রয়েছে:
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
tools:layout="@layout/a">
<deepLink app:uri="www.example.com"
app:action="android.intent.action.MY_ACTION"
app:mimeType="type/subtype"/>
</fragment>
এছাড়াও আপনি গন্তব্যে একটি অন্তর্নিহিত গভীর লিঙ্ক তৈরি করতে নেভিগেশন এডিটর ব্যবহার করতে পারেন:
- নেভিগেশন এডিটরের ডিজাইন ট্যাবে, গভীর লিঙ্কের জন্য গন্তব্য নির্বাচন করুন।
- অ্যাট্রিবিউট প্যানেলের ডিপ লিঙ্ক বিভাগে + ক্লিক করুন।
প্রদর্শিত ডিপ লিঙ্ক ডায়ালগে, আপনার গভীর লিঙ্কের জন্য তথ্য লিখুন।
নিম্নলিখিত নোট করুন:
- একটি স্কিম ছাড়া URI গুলি হয় http বা https হিসাবে ধরে নেওয়া হয়৷ উদাহরণস্বরূপ,
www.google.com
http://www.google.com
এবংhttps://www.google.com
উভয়ের সাথেই মেলে। -
{placeholder_name}
আকারে পাথ প্যারামিটার স্থানধারক এক বা একাধিক অক্ষরের সাথে মেলে। উদাহরণস্বরূপ,http://www.example.com/users/{id}
http://www.example.com/users/4
সাথে মেলে। ন্যাভিগেশন উপাদানটি গভীর লিঙ্কের গন্তব্যের জন্য সংজ্ঞায়িত সংজ্ঞায়িত আর্গুমেন্টগুলির সাথে স্থানধারক নামগুলিকে মিলিয়ে উপযুক্ত প্রকারে স্থানধারক মানগুলিকে পার্স করার চেষ্টা করে৷ যদি একই নামের কোনো আর্গুমেন্ট সংজ্ঞায়িত করা না থাকে, তাহলে আর্গুমেন্ট মানের জন্য একটি ডিফল্টString
টাইপ ব্যবহার করা হয়। আপনি .* ওয়াইল্ডকার্ড ব্যবহার করতে পারেন 0 বা তার বেশি অক্ষরের সাথে মেলে। - ক্যোয়ারী প্যারামিটার স্থানধারক পাথ প্যারামিটারের পরিবর্তে বা একত্রে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ,
http://www.example.com/users/{id}?myarg={myarg}
মিলছেhttp://www.example.com/users/4?myarg=28
। - ডিফল্ট বা বাতিলযোগ্য মানের সাথে সংজ্ঞায়িত ভেরিয়েবলের জন্য কোয়েরি প্যারামিটার স্থানধারক মিলের প্রয়োজন নেই। উদাহরণস্বরূপ,
http://www.example.com/users/{id}?arg1={arg1}&arg2={arg2}
মিলছেhttp://www.example.com/users/4?arg2=28
বাhttp://www.example.com/users/4?arg1=7
এটি পাথ প্যারামিটারের ক্ষেত্রে নয়। উদাহরণস্বরূপ,http://www.example.com/users?arg1=7&arg2=28
উপরের প্যাটার্নের সাথে মেলে না কারণ প্রয়োজনীয় পাথ প্যারামিটার সরবরাহ করা হয়নি। - বহিরাগত ক্যোয়ারী প্যারামিটার গভীর লিঙ্ক ইউআরআই ম্যাচিংকে প্রভাবিত করে না। উদাহরণস্বরূপ,
http://www.example.com/users/{id}
http://www.example.com/users/4?extraneousParam=7
সাথে মেলে, যদিও ইউআরআই প্যাটার্নেextraneousParam
সংজ্ঞায়িত করা হয়নি।
- একটি স্কিম ছাড়া URI গুলি হয় http বা https হিসাবে ধরে নেওয়া হয়৷ উদাহরণস্বরূপ,
(ঐচ্ছিক) আপনি যে ইউআরআই-এর মালিক তা যাচাই করার জন্য Google-এর প্রয়োজনে স্বয়ংক্রিয় যাচাই পরীক্ষা করুন৷ আরও তথ্যের জন্য, Android অ্যাপ লিঙ্ক যাচাই করুন দেখুন।
যোগ করুন ক্লিক করুন. একটি লিঙ্ক আইকন গন্তব্যের একটি গভীর লিঙ্ক আছে তা নির্দেশ করতে নির্বাচিত গন্তব্যের উপরে প্রদর্শিত হয়।
XML ভিউতে টগল করতে কোড ট্যাবে ক্লিক করুন। একটি নেস্টেড
<deepLink>
উপাদান গন্তব্যে যোগ করা হয়েছে:<deepLink app:uri="https://www.google.com" />
অন্তর্নিহিত গভীর লিঙ্কিং সক্ষম করতে, আপনাকে অবশ্যই আপনার অ্যাপের manifest.xml
ফাইলে যোগ করতে হবে৷ একটি ক্রিয়াকলাপে একটি একক <nav-graph>
উপাদান যুক্ত করুন যা একটি বিদ্যমান নেভিগেশন গ্রাফকে নির্দেশ করে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <application ... > <activity name=".MainActivity" ...> ... <nav-graph android:value="@navigation/nav_graph" /> ... </activity> </application> </manifest>
আপনার প্রকল্প তৈরি করার সময়, নেভিগেশন গ্রাফের সমস্ত গভীর লিঙ্কের সাথে মেলে নেভিগেশন উপাদানটি জেনারেট করা <intent-filter>
উপাদানগুলির সাথে <nav-graph>
উপাদান প্রতিস্থাপন করে।
একটি অন্তর্নিহিত গভীর লিঙ্ক ট্রিগার করার সময়, ব্যাক স্ট্যাকের অবস্থা নির্ভর করে অন্তর্নিহিত Intent
Intent.FLAG_ACTIVITY_NEW_TASK
এর সাথে চালু করা হয়েছে কিনা। FLAG_ACTIVITY_NEW_TASK পতাকা:
- পতাকা সেট করা থাকলে, টাস্ক ব্যাক স্ট্যাক সাফ করা হয় এবং ডিপ লিঙ্ক গন্তব্যের সাথে প্রতিস্থাপিত হয়। স্পষ্ট ডিপ লিঙ্কিংয়ের মতো, গ্রাফ নেস্ট করার সময়, নেস্টিংয়ের প্রতিটি স্তর থেকে শুরুর গন্তব্য—অর্থাৎ, হায়ারার্কিতে প্রতিটি
<navigation>
উপাদান থেকে শুরুর গন্তব্য—ও স্ট্যাকে যোগ করা হয়। এর মানে হল যে যখন কোনও ব্যবহারকারী একটি গভীর লিঙ্কের গন্তব্য থেকে পিছনের বোতাম টিপে, তখন তারা নেভিগেশন স্ট্যাকের ব্যাক আপ নেভিগেট করে ঠিক যেমন তারা আপনার অ্যাপের প্রবেশ বিন্দু থেকে প্রবেশ করেছে। - পতাকা সেট না থাকলে, আপনি আগের অ্যাপের টাস্ক স্ট্যাকে থাকবেন যেখানে অন্তর্নিহিত গভীর লিঙ্কটি ট্রিগার করা হয়েছিল। এই ক্ষেত্রে, ব্যাক বোতাম আপনাকে পূর্ববর্তী অ্যাপে নিয়ে যাবে, যখন আপ বোতামটি আপনার নেভিগেশন গ্রাফের মধ্যে অনুক্রমিক অভিভাবক গন্তব্যে আপনার অ্যাপের কাজ শুরু করে।
গভীর লিঙ্ক হ্যান্ডলিং
নেভিগেশন ব্যবহার করার সময় সর্বদা standard
ডিফল্ট launchMode
ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। standard
লঞ্চ মোড ব্যবহার করার সময়, নেভিগেশন স্বয়ংক্রিয়ভাবে handleDeepLink()
কল করে গভীর লিঙ্কগুলি পরিচালনা করে যাতে Intent
মধ্যে কোনও স্পষ্ট বা অন্তর্নিহিত গভীর লিঙ্কগুলি প্রক্রিয়া করা হয়। যাইহোক, এটি স্বয়ংক্রিয়ভাবে ঘটবে না যদি একটি বিকল্প launchMode
যেমন singleTop
ব্যবহার করার সময় Activity
পুনরায় ব্যবহার করা হয়। এই ক্ষেত্রে, onNewIntent()
এ handleDeepLink()
ম্যানুয়ালি কল করা প্রয়োজন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) navController.handleDeepLink(intent) }
জাভা
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); navController.handleDeepLink(intent); }
অতিরিক্ত সম্পদ
নেভিগেশন সম্পর্কে আরও জানতে, নিম্নলিখিত সংস্থানগুলি দেখুন।